Add functions for auto-order, auto-init, update workspace_ops
This commit is contained in:
parent
18b37319bb
commit
017f15bf98
@ -1,21 +1,45 @@
|
||||
from .. import __package__ as base_package
|
||||
import bpy
|
||||
|
||||
def has_data():
|
||||
return 'scene_workspaces' in bpy.data.scenes[bpy.context.scene.name]
|
||||
prop_name = "scene_workspaces";
|
||||
prop_i_name = "scene_workspaces_active";
|
||||
|
||||
def_templates_w_order = [
|
||||
['Layout','Modeling','Sculpting','UV Editing','Texture Paint','Shading','Animation','Rendering','Compositing','Geometry Nodes','Scripting'],
|
||||
['2D Animation','2D Full Canvas','Compositing','Rendering'],
|
||||
['Sculpting','Shading'],
|
||||
['Motion Tracking','Masking','Compositing','Rendering'],
|
||||
['Video Editing','Rendering']
|
||||
]
|
||||
|
||||
def has_data(scene = None, prop = prop_name):
|
||||
return prop in bpy.data.scenes[scene if scene else bpy.context.scene.name]
|
||||
|
||||
def get_scene_workspaces(scene = None):
|
||||
if has_data():
|
||||
return bpy.data.scenes[scene if scene else bpy.context.scene.name]['scene_workspaces']
|
||||
if has_data(scene):
|
||||
return bpy.data.scenes[scene if scene else bpy.context.scene.name][prop_name]
|
||||
else:
|
||||
return []
|
||||
|
||||
def get_active(scene = None):
|
||||
if has_data(scene, prop_i_name):
|
||||
i = bpy.data.scenes[scene if scene else bpy.context.scene.name][prop_i_name]
|
||||
return i if i else 0
|
||||
else:
|
||||
return 0
|
||||
|
||||
def set_active(val = 0):
|
||||
bpy.data.scenes[bpy.context.scene.name][prop_i_name] = val
|
||||
|
||||
def prefs():
|
||||
return bpy.context.preferences.addons[base_package].preferences
|
||||
|
||||
def get_use_topbar():
|
||||
return prefs().use_topbar
|
||||
|
||||
def get_only_with_multiple():
|
||||
return prefs().only_with_multiple_scene
|
||||
|
||||
def get_switch():
|
||||
return prefs().switch
|
||||
|
||||
@ -23,12 +47,30 @@ def get_compact():
|
||||
return prefs().compact
|
||||
|
||||
def set_scene_workspaces(workspaces, scene = None):
|
||||
bpy.data.scenes[scene if scene else bpy.context.scene.name]['scene_workspaces'] = workspaces
|
||||
s = scene if scene else bpy.context.scene.name
|
||||
bpy.data.scenes[s][prop_name] = workspaces
|
||||
if not get_active():
|
||||
set_active()
|
||||
|
||||
def workspaces_match_template():
|
||||
match = False
|
||||
templates = []
|
||||
for templs in def_templates_w_order:
|
||||
if set([w.name for w in bpy.data.workspaces]) == set(templs):
|
||||
match = True
|
||||
templates = templs
|
||||
break
|
||||
return match, templates
|
||||
|
||||
def select_all():
|
||||
workspaces = []
|
||||
for w in bpy.data.workspaces:
|
||||
workspaces.append(w.name)
|
||||
workspaces = get_scene_workspaces()
|
||||
match, templates = workspaces_match_template()
|
||||
if match and not workspaces:
|
||||
workspaces = templates
|
||||
else:
|
||||
for w in bpy.data.workspaces:
|
||||
if w not in workspaces:
|
||||
workspaces.append(w.name)
|
||||
set_scene_workspaces(workspaces)
|
||||
|
||||
def get_other_scene_names():
|
||||
@ -54,11 +96,10 @@ def remove_shortcuts():
|
||||
wm = bpy.context.window_manager
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Window', space_type='EMPTY')
|
||||
for kmi in km.keymap_items:
|
||||
if kmi.idname in ['sw.activate', 'sw.move'] :
|
||||
if kmi.idname == "sw.activate":
|
||||
km.keymap_items.remove(kmi)
|
||||
|
||||
def workspace_ops(layout, i, menu_mode=False, name=None):
|
||||
layout.separator()
|
||||
if menu_mode:
|
||||
layout.prop(prefs(), "compact", text="Compact Mode")
|
||||
layout.separator()
|
||||
@ -66,9 +107,8 @@ def workspace_ops(layout, i, menu_mode=False, name=None):
|
||||
remove = l.operator(
|
||||
"sw.remove", text="Unlink workspace from scene" if menu_mode else "", icon='X')
|
||||
remove.index = i
|
||||
if menu_mode:
|
||||
remove(layout)
|
||||
layout.separator()
|
||||
remove(layout)
|
||||
layout.separator()
|
||||
rename = layout.operator(
|
||||
"sw.rename", text="Rename" if menu_mode else "", icon="TEXT")
|
||||
rename.current_name = name if name else bpy.context.window.workspace.name
|
||||
@ -95,8 +135,6 @@ def workspace_ops(layout, i, menu_mode=False, name=None):
|
||||
layout.separator()
|
||||
layout.operator("sw.activate", text="Previous Workspace (scene)" if menu_mode else "").next = False
|
||||
layout.operator("sw.activate", text="Next Workspace (scene)" if menu_mode else "").next = True
|
||||
else:
|
||||
remove(layout)
|
||||
|
||||
def workspace_menu(self, context):
|
||||
layout = self.layout
|
||||
|
Loading…
x
Reference in New Issue
Block a user