refactor: move session data to init, class renaming

This commit is contained in:
Swann Martinez
2019-05-15 14:52:45 +02:00
parent 0873d63333
commit cadafb8281
7 changed files with 179 additions and 199 deletions

View File

@ -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()
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)

View File

@ -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:

View File

@ -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:

View File

@ -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,

View File

@ -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()

View File

@ -5,6 +5,7 @@ from operator import itemgetter
import zmq
import message
logger = logging.getLogger("Server")
logging.basicConfig(level=logging.DEBUG)

57
ui.py
View File

@ -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,
)