From cadafb8281ef0acf16f4ce0917539fb25df480c5 Mon Sep 17 00:00:00 2001 From: Swann Martinez Date: Wed, 15 May 2019 14:52:45 +0200 Subject: [PATCH] refactor: move session data to init, class renaming --- __init__.py | 103 ++++++++++++++++++++++++++++- client.py | 4 +- draw.py | 4 +- helpers.py | 28 +++----- operators.py | 181 +++++++++++++-------------------------------------- server.py | 1 + ui.py | 57 ++++++---------- 7 files changed, 179 insertions(+), 199 deletions(-) diff --git a/__init__.py b/__init__.py index 19a2c1d..9db1660 100644 --- a/__init__.py +++ b/__init__.py @@ -13,6 +13,8 @@ import bpy import os import sys import subprocess +import string +import random import bpy import addon_utils from pathlib import Path @@ -20,6 +22,40 @@ from pathlib import Path python_path = Path(bpy.app.binary_path_python) cwd_for_subprocesses = python_path.parent + +# UTILITY FUNCTIONS +def client_list_callback(scene, context): + global client_keys + items = [("Common", "Common", "")] + + username = bpy.context.window_manager.session.username + + if client_keys: + for k in client_keys: + if 'Client' in k[0]: + name = k[1] + + if name == username: + name += " (self)" + + items.append((name, name, "")) + + return items + + +def randomStringDigits(stringLength=6): + """Generate a random string of letters and digits """ + lettersAndDigits = string.ascii_letters + string.digits + return ''.join(random.choice(lettersAndDigits) for i in range(stringLength)) + + +def randomColor(): + r = random.random() + v = random.random() + b = random.random() + return [r, v, b] + + def get_package_install_directory(): for path in sys.path: if os.path.basename(path) in ("dist-packages", "site-packages"): @@ -34,13 +70,78 @@ except: from . import operators from . import ui +class RCFSessionProps(bpy.types.PropertyGroup): + username = bpy.props.StringProperty( + name="Username", + default="user_{}".format(randomStringDigits()) + ) + ip = bpy.props.StringProperty( + name="ip", + description='Distant host ip', + default="127.0.0.1") + port = bpy.props.IntProperty( + name="port", + description='Distant host port', + default=5555) + + add_property_depth = bpy.props.IntProperty( + name="add_property_depth", + default=1) + buffer = bpy.props.StringProperty(name="None") + is_admin = bpy.props.BoolProperty(name="is_admin", default=False) + load_data = bpy.props.BoolProperty(name="load_data", default=True) + init_scene = bpy.props.BoolProperty(name="load_data", default=True) + clear_scene = bpy.props.BoolProperty(name="clear_scene", default=True) + update_frequency = bpy.props.FloatProperty( + name="update_frequency", default=0.008) + active_object = bpy.props.PointerProperty( + name="active_object", type=bpy.types.Object) + session_mode = bpy.props.EnumProperty( + name='session_mode', + description='session mode', + items={ + ('HOST', 'hosting', 'host a session'), + ('CONNECT', 'connexion', 'connect to a session')}, + default='HOST') + client_color = bpy.props.FloatVectorProperty( + name="client_instance_color", + subtype='COLOR', + default=randomColor()) + clients = bpy.props.EnumProperty( + name="clients", + description="client enum", + items=client_list_callback + ) + enable_draw = bpy.props.BoolProperty( + name="enable_draw", + description='Enable overlay drawing module', + default=True) + +classes = { + RCFSessionProps, +} + def register(): + for cls in classes: + bpy.utils.register_class(cls) + + bpy.types.ID.id = bpy.props.StringProperty(default="None") + bpy.types.ID.is_dirty = bpy.props.BoolProperty(default=False) + bpy.types.WindowManager.session = bpy.props.PointerProperty( + type=RCFSessionProps) + operators.register() ui.register() def unregister(): + ui.unregister() operators.unregister() - \ No newline at end of file + del bpy.types.WindowManager.session + del bpy.types.ID.id + del bpy.types.ID.is_dirty + + for cls in classes: + bpy.utils.unregister_class(cls) diff --git a/client.py b/client.py index d399949..b08db17 100644 --- a/client.py +++ b/client.py @@ -468,8 +468,8 @@ def watchdog_worker(serial_feed,interval, stop_event): logger.info("watchdog thread launched with {} sec of interval".format(interval)) while not stop_event.is_set(): - for datatype in helpers.SUPPORTED_TYPES: - for item in getattr(bpy.data, helpers.CORRESPONDANCE[datatype]): + for datatype in helpers.BPY_TYPES.keys(): + for item in getattr(bpy.data, helpers.BPY_TYPES[datatype]): key = "{}/{}".format(datatype, item.name) try: if item.is_dirty: diff --git a/draw.py b/draw.py index e98f462..bfa00c9 100644 --- a/draw.py +++ b/draw.py @@ -122,7 +122,7 @@ class DrawFactory(object): def draw_client_selected_objects(self, client): if client: name = client['id'] - local_username = bpy.context.window_manager.session_settings.username + local_username = bpy.context.window_manager.session.username if name != local_username: if client['active_objects']: @@ -165,7 +165,7 @@ class DrawFactory(object): def draw_client(self, client): if client: name = client['id'] - local_username = bpy.context.window_manager.session_settings.username + local_username = bpy.context.window_manager.session.username if name != local_username: try: diff --git a/helpers.py b/helpers.py index a993c38..ea220dd 100644 --- a/helpers.py +++ b/helpers.py @@ -9,12 +9,10 @@ import mathutils from . import draw from .libs import dump_anything -CORRESPONDANCE = {'GreasePencil': 'grease_pencils', 'Curve': 'curves', 'Collection': 'collections', 'Mesh': 'meshes', 'Object': 'objects', 'Material': 'materials', +# TODO: replace hardcoded values... +BPY_TYPES = {'GreasePencil': 'grease_pencils', 'Curve': 'curves', 'Collection': 'collections', 'Mesh': 'meshes', 'Object': 'objects', 'Material': 'materials', 'Texture': 'textures', 'Scene': 'scenes', 'Light': 'lights', 'SunLight': 'lights', 'SpotLight': 'lights', 'AreaLight': 'lights', 'PointLight': 'lights', 'Camera': 'cameras', 'Action': 'actions', 'Armature': 'armatures', 'Grease Pencil': 'grease_pencils'} -SUPPORTED_TYPES = ['Curve', 'Material', 'Texture', 'Light', 'Camera', 'Mesh', - 'Armature', 'Grease Pencil', 'Object', 'Action', 'Collection', 'Scene'] - logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) # UTILITY FUNCTIONS @@ -69,16 +67,6 @@ def get_selected_objects(scene): return selected_objects -def get_all_datablocks(): - datas = [] - for datatype in SUPPORTED_TYPES: - for item in getattr(bpy.data, CORRESPONDANCE[datatype]): - item.id = bpy.context.window_manager.session_settings.username - datas.append("{}/{}".format(datatype, item.name)) - - return datas - - # LOAD HELPERS def load(key, value): target = resolve_bpy_path(key) @@ -129,7 +117,7 @@ def resolve_bpy_path(path): try: path = path.split('/') - item = getattr(bpy.data, CORRESPONDANCE[path[0]])[path[1]] + item = getattr(bpy.data, BPY_TYPES[path[0]])[path[1]] except: pass @@ -140,7 +128,7 @@ def resolve_bpy_path(path): def load_client(client=None, data=None): C = bpy.context D = bpy.data - net_settings = C.window_manager.session_settings + net_settings = C.window_manager.session if client and data: if net_settings.enable_draw: @@ -275,7 +263,7 @@ def load_object(target=None, data=None, create=False): target.id = data['id'] - client = bpy.context.window_manager.session_settings.username + client = bpy.context.window_manager.session.username if target.id == client: target.hide_select = False @@ -342,7 +330,7 @@ def load_collection(target=None, data=None, create=False): target.id = data['id'] - client = bpy.context.window_manager.session_settings.username + client = bpy.context.window_manager.session.username if target.id == client: target.hide_select = False @@ -525,7 +513,7 @@ def load_light(target=None, data=None, create=False, type=None): def load_default(target=None, data=None, create=False, type=None): try: if target is None and create: - target = getattr(bpy.data, CORRESPONDANCE[type]).new(data["name"]) + target = getattr(bpy.data, BPY_TYPES[type]).new(data["name"]) dump_anything.load(target, data) @@ -623,7 +611,7 @@ def init_client(key=None): client_dict = {} C = bpy.context - Net = C.window_manager.session_settings + Net = C.window_manager.session client_dict['uuid'] = str(uuid4()) client_dict['location'] = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] client_dict['color'] = [Net.client_color.r, diff --git a/operators.py b/operators.py index ef98476..6c9f5a8 100644 --- a/operators.py +++ b/operators.py @@ -1,23 +1,17 @@ import asyncio import logging import os -import queue import random import string import subprocess import time from operator import itemgetter -import queue import bpy import mathutils -from bpy_extras import view3d_utils -from gpu_extras.batch import batch_for_shader from pathlib import Path - - from . import client, draw, helpers, ui from .libs import umsgpack @@ -28,32 +22,13 @@ client_keys = None client_state = 1 server = None context = None -update_list = {} -history = queue.Queue() - -# UTILITY FUNCTIONS -def client_list_callback(scene, context): - global client_keys - items = [("Common", "Common", "")] - - username = bpy.context.window_manager.session_settings.username - - if client_keys: - for k in client_keys: - if 'Client' in k[0]: - name = k[1] - - if name == username: - name += " (self)" - - items.append((name, name, "")) - - return items -def clean_scene(elements=helpers.SUPPORTED_TYPES): + + +def clean_scene(elements=helpers.BPY_TYPES.keys()): for datablock in elements: - datablock_ref =getattr(bpy.data, helpers.CORRESPONDANCE[datablock]) + datablock_ref =getattr(bpy.data, helpers.BPY_TYPES[datablock]) for item in datablock_ref: try: datablock_ref.remove(item) @@ -62,23 +37,10 @@ def clean_scene(elements=helpers.SUPPORTED_TYPES): pass -def randomStringDigits(stringLength=6): - """Generate a random string of letters and digits """ - lettersAndDigits = string.ascii_letters + string.digits - return ''.join(random.choice(lettersAndDigits) for i in range(stringLength)) - - -def randomColor(): - r = random.random() - v = random.random() - b = random.random() - return [r, v, b] - - def upload_client_instance_position(): global client_instance - username = bpy.context.window_manager.session_settings.username + username = bpy.context.window_manager.session.username if client_instance: key = "Client/{}".format(username) @@ -96,9 +58,9 @@ def upload_client_instance_position(): def update_client_selected_object(context): global client_instance - session = bpy.context.window_manager.session_settings + session = bpy.context.window_manager.session - username = bpy.context.window_manager.session_settings.username + username = bpy.context.window_manager.session.username client_key = "Client/{}".format(username) client_data = client_instance.get(client_key) @@ -117,13 +79,13 @@ def update_client_selected_object(context): client_data[0][1]['active_objects'] = [] client_instance.set(client_key, client_data[0][1]) -# Init configuration +#TODO: cleanup def init_datablocks(): global client_instance - for datatype in helpers.SUPPORTED_TYPES: - for item in getattr(bpy.data, helpers.CORRESPONDANCE[datatype]): - item.id = bpy.context.window_manager.session_settings.username + for datatype in helpers.BPY_TYPES.keys(): + for item in getattr(bpy.data, helpers.BPY_TYPES[datatype]): + item.id = bpy.context.window_manager.session.username key = "{}/{}".format(datatype, item.name) client_instance.set(key) @@ -159,7 +121,7 @@ def unregister_ticks(): # OPERATORS -class session_join(bpy.types.Operator): +class SessionJoinOperator(bpy.types.Operator): bl_idname = "session.join" bl_label = "join" bl_description = "connect to a net server" @@ -172,7 +134,7 @@ class session_join(bpy.types.Operator): def execute(self, context): global client_instance - net_settings = context.window_manager.session_settings + net_settings = context.window_manager.session # Scene setup if net_settings.clear_scene: clean_scene() @@ -182,7 +144,7 @@ class session_join(bpy.types.Operator): net_settings.username = "{}_{}".format( net_settings.username, randomStringDigits()) - username = str(context.window_manager.session_settings.username) + username = str(context.window_manager.session.username) if len(net_settings.ip) < 1: net_settings.ip = "127.0.0.1" @@ -202,7 +164,7 @@ class session_join(bpy.types.Operator): return {"FINISHED"} -class session_refresh(bpy.types.Operator): +class SessionRefreshOperator(bpy.types.Operator): bl_idname = "session.refresh" bl_label = "refresh" bl_description = "refresh client ui keys " @@ -218,7 +180,7 @@ class session_refresh(bpy.types.Operator): return {"FINISHED"} -class session_add_property(bpy.types.Operator): +class SessionPropertyAddOperator(bpy.types.Operator): bl_idname = "session.add_prop" bl_label = "add" bl_description = "broadcast a property to connected client_instances" @@ -239,7 +201,7 @@ class session_add_property(bpy.types.Operator): return {"FINISHED"} -class session_get_property(bpy.types.Operator): +class SessionPropertyGetOperator(bpy.types.Operator): bl_idname = "session.get_prop" bl_label = "get" bl_description = "broadcast a property to connected client_instances" @@ -257,7 +219,7 @@ class session_get_property(bpy.types.Operator): return {"FINISHED"} -class session_remove_property(bpy.types.Operator): +class SessionPropertyRemoveOperator(bpy.types.Operator): bl_idname = "session.remove_prop" bl_label = "remove" bl_description = "broadcast a property to connected client_instances" @@ -280,7 +242,7 @@ class session_remove_property(bpy.types.Operator): return {"CANCELED"} -class session_create(bpy.types.Operator): +class SessionHostOperator(bpy.types.Operator): bl_idname = "session.create" bl_label = "create" bl_description = "create to a net session" @@ -294,7 +256,7 @@ class session_create(bpy.types.Operator): global server global client_instance - net_settings = context.window_manager.session_settings + net_settings = context.window_manager.session script_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),"server.py") @@ -315,7 +277,7 @@ class session_create(bpy.types.Operator): return {"FINISHED"} -class session_stop(bpy.types.Operator): +class SessionStopOperator(bpy.types.Operator): bl_idname = "session.stop" bl_label = "close" bl_description = "stop net service" @@ -329,7 +291,7 @@ class session_stop(bpy.types.Operator): global server global client_instance, client_keys, client_state - net_settings = context.window_manager.session_settings + net_settings = context.window_manager.session if server: server.kill() @@ -355,7 +317,7 @@ class session_stop(bpy.types.Operator): return {"FINISHED"} -class session_rights(bpy.types.Operator): +class SessionPropertyRightOperator(bpy.types.Operator): bl_idname = "session.right" bl_label = "Change owner to" bl_description = "stop net service" @@ -373,7 +335,7 @@ class session_rights(bpy.types.Operator): def draw(self, context): layout = self.layout - net_settings = context.window_manager.session_settings + net_settings = context.window_manager.session col = layout.column() col.prop(net_settings, "clients") @@ -382,7 +344,7 @@ class session_rights(bpy.types.Operator): global server global client_instance, client_keys, client_state - net_settings = context.window_manager.session_settings + net_settings = context.window_manager.session if net_settings.is_admin: val = client_instance.get(self.key) @@ -398,55 +360,7 @@ class session_rights(bpy.types.Operator): return {"FINISHED"} -class session_settings(bpy.types.PropertyGroup): - username = bpy.props.StringProperty( - name="Username", - default="user_{}".format(randomStringDigits()) - ) - ip = bpy.props.StringProperty( - name="ip", - description='Distant host ip', - default="127.0.0.1") - port = bpy.props.IntProperty( - name="port", - description='Distant host port', - default=5555) - - add_property_depth = bpy.props.IntProperty( - name="add_property_depth", - default=1) - buffer = bpy.props.StringProperty(name="None") - is_admin = bpy.props.BoolProperty(name="is_admin", default=False) - load_data = bpy.props.BoolProperty(name="load_data", default=True) - init_scene = bpy.props.BoolProperty(name="load_data", default=True) - clear_scene = bpy.props.BoolProperty(name="clear_scene", default=True) - update_frequency = bpy.props.FloatProperty( - name="update_frequency", default=0.008) - active_object = bpy.props.PointerProperty( - name="active_object", type=bpy.types.Object) - session_mode = bpy.props.EnumProperty( - name='session_mode', - description='session mode', - items={ - ('HOST', 'hosting', 'host a session'), - ('CONNECT', 'connexion', 'connect to a session')}, - default='HOST') - client_color = bpy.props.FloatVectorProperty( - name="client_instance_color", - subtype='COLOR', - default=randomColor()) - clients = bpy.props.EnumProperty( - name="clients", - description="client enum", - items=client_list_callback - ) - enable_draw = bpy.props.BoolProperty( - name="enable_draw", - description='Enable overlay drawing module', - default=True) - - -class session_snapview(bpy.types.Operator): +class SessionSnapUserOperator(bpy.types.Operator): bl_idname = "session.snapview" bl_label = "draw client_instances" bl_description = "Description that shows in blender tooltips" @@ -477,16 +391,15 @@ class session_snapview(bpy.types.Operator): # TODO: Rename to match official blender convention classes = ( - session_join, - session_refresh, - session_add_property, - session_get_property, - session_stop, - session_create, - session_settings, - session_remove_property, - session_snapview, - session_rights, + SessionJoinOperator, + SessionRefreshOperator, + SessionPropertyAddOperator, + SessionPropertyGetOperator, + SessionStopOperator, + SessionHostOperator, + SessionPropertyRemoveOperator, + SessionSnapUserOperator, + SessionPropertyRightOperator, ) @@ -513,6 +426,7 @@ def is_replicated(update): logger.info("{} Not rep".format(key)) return False + def get_datablock_from_update(update,context): item_type = update.id.__class__.__name__ item_id = update.id.name @@ -521,8 +435,8 @@ def get_datablock_from_update(update,context): if item_id == 'Master Collection': datablock_ref= bpy.context.scene - elif item_type in helpers.CORRESPONDANCE.keys(): - datablock_ref = getattr(bpy.data, helpers.CORRESPONDANCE[update.id.__class__.__name__])[update.id.name] + elif item_type in helpers.BPY_TYPES.keys(): + datablock_ref = getattr(bpy.data, helpers.BPY_TYPES[update.id.__class__.__name__])[update.id.name] else: if item_id in bpy.data.lights.keys(): datablock_ref = bpy.data.lights[item_id] @@ -530,6 +444,7 @@ def get_datablock_from_update(update,context): return datablock_ref + def toogle_update_dirty(context, update): data_ref = get_datablock_from_update(update,context) @@ -537,6 +452,7 @@ def toogle_update_dirty(context, update): logger.info(update.id.bl_rna.__class__.__name__) data_ref.is_dirty= True + def depsgraph_update(scene): global client_instance global client_keys @@ -548,7 +464,7 @@ def depsgraph_update(scene): if ctx.mode in ['OBJECT','PAINT_GPENCIL']: updates = ctx.depsgraph.updates - username = ctx.window_manager.session_settings.username + username = ctx.window_manager.session.username selected_objects = helpers.get_selected_objects(scene) @@ -577,7 +493,7 @@ def depsgraph_update(scene): logger.info("APPEND {}".format(key)) else: try: - getattr(bpy.data, helpers.CORRESPONDANCE[update.id.__class__.__name__]).remove(item) + getattr(bpy.data, helpers.BPY_TYPES[update.id.__class__.__name__]).remove(item) except: pass break @@ -589,10 +505,7 @@ def register(): from bpy.utils import register_class for cls in classes: register_class(cls) - bpy.types.ID.id = bpy.props.StringProperty(default="None") - bpy.types.ID.is_dirty = bpy.props.BoolProperty(default=False) - bpy.types.WindowManager.session_settings = bpy.props.PointerProperty( - type=session_settings) + bpy.app.handlers.depsgraph_update_post.append(depsgraph_update) draw.register() @@ -603,8 +516,8 @@ def unregister(): draw.unregister() - - bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update) + if bpy.app.handlers.depsgraph_update_post.count(depsgraph_update) > 0: + bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update) if server: server.kill() @@ -621,10 +534,6 @@ def unregister(): for cls in reversed(classes): unregister_class(cls) - del bpy.types.WindowManager.session_settings - del bpy.types.ID.id - del bpy.types.ID.is_dirty - if __name__ == "__main__": register() diff --git a/server.py b/server.py index 06b7539..ac202c8 100644 --- a/server.py +++ b/server.py @@ -5,6 +5,7 @@ from operator import itemgetter import zmq import message + logger = logging.getLogger("Server") logging.basicConfig(level=logging.DEBUG) diff --git a/ui.py b/ui.py index aee53eb..bde261f 100644 --- a/ui.py +++ b/ui.py @@ -7,9 +7,7 @@ from . import client, operators ICONS = {'Curve':'CURVE_DATA', 'Client':'SOLO_ON','Collection': 'FILE_FOLDER', 'Mesh': 'MESH_DATA', 'Object': 'OBJECT_DATA', 'Material': 'MATERIAL_DATA', 'Texture': 'TEXTURE_DATA', 'Scene': 'SCENE_DATA', 'Light': 'LIGHT_DATA', 'SpotLight': 'LIGHT_DATA', 'SunLight': 'LIGHT_DATA', 'PointLight': 'LIGHT_DATA', 'Camera': 'CAMERA_DATA', 'Action': 'ACTION_DATA', 'Armature': 'ARMATURE_DATA', 'Grease Pencil': 'GREASEPENCIL'} - -class SessionSettingsPanel(bpy.types.Panel): - """Creates a Panel in the scene context of the properties editor""" +class SESSION_PT_settings(bpy.types.Panel): bl_label = "NET settings" bl_idname = "SCENE_PT_SessionSettings" bl_space_type = 'PROPERTIES' @@ -19,8 +17,8 @@ class SessionSettingsPanel(bpy.types.Panel): def draw(self, context): layout = self.layout - if hasattr(context.window_manager, 'session_settings'): - net_settings = context.window_manager.session_settings + if hasattr(context.window_manager, 'session'): + net_settings = context.window_manager.session window_manager = context.window_manager row = layout.row() @@ -30,10 +28,10 @@ class SessionSettingsPanel(bpy.types.Panel): row = box.row() row.label(text="USER", icon='TRIA_RIGHT') row = box.row() - row.prop(window_manager.session_settings, "username", text="id") + row.prop(window_manager.session, "username", text="id") row = box.row() - row.prop(window_manager.session_settings, "client_color", text="color") + row.prop(window_manager.session, "client_color", text="color") row = box.row() row = layout.row() @@ -48,16 +46,13 @@ class SessionSettingsPanel(bpy.types.Panel): row.label(text="clear blend:") row.prop(net_settings, "clear_scene", text="") row = box.row() - - + row = box.row() row.prop(net_settings, "session_mode", expand=True) row = box.row() - + - - - if window_manager.session_settings.session_mode == 'HOST': + if window_manager.session.session_mode == 'HOST': box = row.box() row = box.row() row.label(text="init scene:") @@ -70,7 +65,7 @@ class SessionSettingsPanel(bpy.types.Panel): row.prop(net_settings, "ip", text="ip") row = box.row() row.label(text="port:") - row.prop(window_manager.session_settings, "port", text="") + row.prop(window_manager.session, "port", text="") row = box.row() row.label(text="load data:") row.prop(net_settings, "load_data", text="") @@ -86,13 +81,6 @@ class SessionSettingsPanel(bpy.types.Panel): row.operator("session.stop", icon='QUIT', text="Exit") row = layout.row() - # row = layout.row() - # row.label(text="serial ",icon="KEYTYPE_EXTREME_VEC") - # row = layout.row() - # row.label(text="serial ",icon="KEYTYPE_BREAKDOWN_VEC") - # row = layout.row() - # row.label(text="serial ",icon="KEYTYPE_JITTER_VEC") - box = row.box() row = box.row() row.label(text="", icon='INFO') @@ -110,8 +98,7 @@ class SessionSettingsPanel(bpy.types.Panel): row = layout.row() -class SessionUsersPanel(bpy.types.Panel): - """Creates a Panel in the scene context of the properties editor""" +class SESSION_PT_user(bpy.types.Panel): bl_label = "NET users" bl_idname = "SCENE_PT_SessionUsers" bl_space_type = 'PROPERTIES' @@ -126,7 +113,7 @@ class SessionUsersPanel(bpy.types.Panel): def draw(self, context): layout = self.layout - net_settings = context.window_manager.session_settings + net_settings = context.window_manager.session scene = context.window_manager # Create a simple row. row = layout.row() @@ -156,8 +143,7 @@ class SessionUsersPanel(bpy.types.Panel): def get_client_key(item): return item[0] -class SessionPropertiesPanel(bpy.types.Panel): - """Creates a Panel in the scene context of the properties editor""" +class SESSION_PT_properties(bpy.types.Panel): bl_label = "NET properties" bl_idname = "SCENE_PT_SessionProps" bl_space_type = 'PROPERTIES' @@ -171,10 +157,10 @@ class SessionPropertiesPanel(bpy.types.Panel): def draw(self, context): layout = self.layout - if hasattr(context.window_manager,'session_settings'): - net_settings = context.window_manager.session_settings + if hasattr(context.window_manager,'session'): + net_settings = context.window_manager.session scene = context.window_manager - # Create a simple row. + row = layout.row() row = layout.row(align=True) @@ -185,6 +171,7 @@ class SessionPropertiesPanel(bpy.types.Panel): add.property_path = net_settings.buffer add.depth = net_settings.add_property_depth row = layout.row() + # Property area area_msg = row.box() area_msg.operator("session.refresh", text="", @@ -203,14 +190,8 @@ class SessionPropertiesPanel(bpy.types.Panel): item_box = area_msg.box() detail_item_box = item_box.row(align = True) - - # detail_item_box = item_box.row() detail_item_box.label(text="",icon=ICONS[store_type]) - detail_item_box.label(text="{} ".format(store_name)) - - # detail_item_box.prop(net_settings, "clients", text="") - detail_item_box.label(text="{} ".format(owner)) right_icon = "DECORATE_UNLOCKED" @@ -229,9 +210,9 @@ class SessionPropertiesPanel(bpy.types.Panel): classes = ( - SessionSettingsPanel, - SessionUsersPanel, - SessionPropertiesPanel, + SESSION_PT_settings, + SESSION_PT_user, + SESSION_PT_properties, )