Skip to content

Commit

Permalink
Add: Options to show UI in Sidebar/Overlay (#35)
Browse files Browse the repository at this point in the history
  • Loading branch information
nutti committed Oct 19, 2020
1 parent a16f6c7 commit 6a8ae74
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 54 deletions.
19 changes: 16 additions & 3 deletions src/screencast_keys/__init__.py
Expand Up @@ -105,23 +105,34 @@ def unregister_shortcut_key():
addon_keymaps.clear()


def call_silently(fn, *args):
try:
fn(*args)
except:
pass


def register():
register_updater(bl_info)
# TODO: Register by BlClassRegistry
bpy.utils.register_class(preferences.DisplayEventTextAliasProperties)
bpy.utils.register_class(ui.SK_PT_ScreencastKeys)
bpy.utils.register_class(ui.SK_PT_ScreencastKeys_Overlay)
utils.bl_class_registry.BlClassRegistry.register()
register_shortcut_key()
bpy.app.handlers.load_pre.append(load_pre_handler)

# Apply preferences of the panel location.
# Apply preferences of UI.
context = bpy.context
prefs = utils.compatibility.get_user_preferences(context).addons[__package__].preferences
# Only default panel location is available in < 2.80
if utils.compatibility.check_version(2, 80, 0) < 0:
prefs.panel_space_type = 'VIEW_3D'
prefs.panel_category = "Screencast Key"
preferences.SK_Preferences.panel_category_update_fn(prefs, context)
preferences.SK_Preferences.panel_space_type_update_fn(prefs, context)
prefs.show_ui_in_sidebar = True
prefs.show_ui_in_overlay = False
preferences.SK_Preferences.ui_in_sidebar_update_fn(prefs, context)
preferences.SK_Preferences.ui_in_overlay_update_fn(prefs, context)

for event in list(ops.EventType):
item = prefs.display_event_text_aliases_props.add()
Expand All @@ -134,6 +145,8 @@ def unregister():
unregister_shortcut_key()
# TODO: Unregister by BlClassRegistry
utils.bl_class_registry.BlClassRegistry.unregister()
call_silently(bpy.utils.unregister_class, ui.SK_PT_ScreencastKeys_Overlay)
call_silently(bpy.utils.unregister_class, ui.SK_PT_ScreencastKeys)
bpy.utils.unregister_class(preferences.DisplayEventTextAliasProperties)


Expand Down
124 changes: 74 additions & 50 deletions src/screencast_keys/preferences.py
Expand Up @@ -26,7 +26,7 @@
)

from .ops import EventType, show_mouse_hold_status
from .ui import SK_PT_ScreencastKeys
from .ui import SK_PT_ScreencastKeys, SK_PT_ScreencastKeys_Overlay
from .utils.addon_updater import AddonUpdaterManager
from .utils.bl_class_registry import BlClassRegistry
from .utils import compatibility as compat
Expand Down Expand Up @@ -99,52 +99,7 @@ class SK_Preferences(bpy.types.AddonPreferences):
default='CONFIG'
)

# for UI
def panel_space_type_update_fn(self, context):
has_panel = hasattr(bpy.types, SK_PT_ScreencastKeys.bl_idname)
if has_panel:
try:
bpy.utils.unregister_class(SK_PT_ScreencastKeys)
except:
pass

SK_PT_ScreencastKeys.bl_space_type = self.panel_space_type
bpy.utils.register_class(SK_PT_ScreencastKeys)

def panel_space_type_items_fn(self, _):
space_types = compat.get_all_space_types()
items = []
for i, (identifier, space) in enumerate(space_types.items()):
space_name = space.bl_rna.name
space_name = space_name.replace(" Space", "")
space_name = space_name.replace("Space ", "")
items.append((identifier, space_name, space_name, i))
return items

panel_space_type = bpy.props.EnumProperty(
name="Space",
description="Space to show ScreencastKey panel",
items=panel_space_type_items_fn,
update=panel_space_type_update_fn,
)

def panel_category_update_fn(self, context):
has_panel = hasattr(bpy.types, SK_PT_ScreencastKeys.bl_idname)
if has_panel:
try:
bpy.utils.unregister_class(SK_PT_ScreencastKeys)
except:
pass
SK_PT_ScreencastKeys.bl_category = self.panel_category
bpy.utils.register_class(SK_PT_ScreencastKeys)

panel_category = bpy.props.StringProperty(
name="Category",
description="Category to show ScreencastKey panel",
default="Screencast Keys",
update=panel_category_update_fn,
)

# for Config.
color = bpy.props.FloatVectorProperty(
name="Color",
default=(1.0, 1.0, 1.0),
Expand Down Expand Up @@ -297,11 +252,74 @@ def panel_category_update_fn(self, context):
default=False
)

# for UI.
def panel_space_type_items_fn(self, _):
space_types = compat.get_all_space_types()
items = []
for i, (identifier, space) in enumerate(space_types.items()):
space_name = space.bl_rna.name
space_name = space_name.replace(" Space", "")
space_name = space_name.replace("Space ", "")
items.append((identifier, space_name, space_name, i))
return items

def ui_in_sidebar_update_fn(self, context):
has_panel = hasattr(bpy.types, SK_PT_ScreencastKeys.bl_idname)
if has_panel:
try:
bpy.utils.unregister_class(SK_PT_ScreencastKeys)
except:
pass

if self.show_ui_in_sidebar:
SK_PT_ScreencastKeys.bl_space_type = self.panel_space_type
SK_PT_ScreencastKeys.bl_category = self.panel_category
bpy.utils.register_class(SK_PT_ScreencastKeys)

panel_space_type = bpy.props.EnumProperty(
name="Space",
description="Space to show ScreencastKey panel",
items=panel_space_type_items_fn,
update=ui_in_sidebar_update_fn,
)

panel_category = bpy.props.StringProperty(
name="Category",
description="Category to show ScreencastKey panel",
default="Screencast Keys",
update=ui_in_sidebar_update_fn,
)

show_ui_in_sidebar = bpy.props.BoolProperty(
name="Sidebar",
description="Show UI in Sidebar",
default=True,
update=ui_in_sidebar_update_fn,
)

def ui_in_overlay_update_fn(self, context):
has_panel = hasattr(bpy.types, SK_PT_ScreencastKeys_Overlay.bl_idname)
if has_panel:
try:
bpy.utils.unregister_class(SK_PT_ScreencastKeys_Overlay)
except:
pass
if self.show_ui_in_overlay:
bpy.utils.register_class(SK_PT_ScreencastKeys_Overlay)

show_ui_in_overlay = bpy.props.BoolProperty(
name="Overlay",
description="Show UI in Overlay",
default=False,
update=ui_in_overlay_update_fn,
)

# for display event text alias
enable_display_event_text_aliases = bpy.props.BoolProperty(
name="Enable Display Event Text Aliases",
description="Enable display event text aliases",
default=False,
update=ui_in_overlay_update_fn,
)

display_event_text_aliases_props = bpy.props.CollectionProperty(
Expand Down Expand Up @@ -360,10 +378,16 @@ def draw(self, context):
if compat.check_version(2, 80, 0) >= 0:
layout.separator()

layout.label(text="Panel Location:")
layout.label(text="UI:")
col = layout.column()
col.prop(self, "panel_space_type")
col.prop(self, "panel_category")
col.prop(self, "show_ui_in_sidebar")

if self.show_ui_in_sidebar:
col.label(text="Panel Location:")
col.prop(self, "panel_space_type")
col.prop(self, "panel_category")

col.prop(self, "show_ui_in_overlay")

layout.separator()

Expand Down
13 changes: 12 additions & 1 deletion src/screencast_keys/ui.py
Expand Up @@ -27,7 +27,6 @@
from .utils import c_structures


@BlClassRegistry()
class SK_PT_ScreencastKeys(bpy.types.Panel):
bl_idname = "SK_PT_ScreencastKeys"
bl_label = "Screencast Keys"
Expand Down Expand Up @@ -108,3 +107,15 @@ def update_func(self, context):
@classmethod
def unregister(cls):
del bpy.types.WindowManager.enable_screencast_keys


class SK_PT_ScreencastKeys_Overlay(bpy.types.Panel):
bl_label = ""
bl_space_type = 'VIEW_3D'
bl_region_type = 'HEADER'
bl_idname = "SK_PT_ScreencastKeys_Overlay"
bl_parent_id = "VIEW3D_PT_overlay"

def draw(self, context):
layout = self.layout
layout.prop(context.window_manager, "enable_screencast_keys", text="Screencast Keys")
5 changes: 5 additions & 0 deletions src/screencast_keys/utils/bl_class_registry.py
Expand Up @@ -30,6 +30,11 @@ def __init__(self, *_, **kwargs):
def __call__(self, cls):
if hasattr(cls, "bl_idname"):
BlClassRegistry.add_class(cls.bl_idname, cls, self.legacy)
elif not hasattr(cls, "bl_context"):
bl_idname = "{}{}{}".format(cls.bl_space_type,
cls.bl_region_type,
cls.bl_label)
BlClassRegistry.add_class(bl_idname, cls, self.legacy)
else:
bl_idname = "{}{}{}{}".format(cls.bl_space_type,
cls.bl_region_type,
Expand Down

0 comments on commit 6a8ae74

Please sign in to comment.