[Bf-blender-cvs] [b401d0030a] app-templates: Split out override class into its own base class

Campbell Barton noreply at git.blender.org
Wed Mar 22 01:36:44 CET 2017


Commit: b401d0030a9b09b511f5ee191e0b73e7b57355bc
Author: Campbell Barton
Date:   Wed Mar 22 11:28:15 2017 +1100
Branches: app-templates
https://developer.blender.org/rBb401d0030a9b09b511f5ee191e0b73e7b57355bc

Split out override class into its own base class

This means multiple templates can share a single base class,
each templates class only needs to fill in the callbacks.

===================================================================

M	release/datafiles/app_templates/101/template/__init__.py
M	release/scripts/modules/bl_app_override.py

===================================================================

diff --git a/release/datafiles/app_templates/101/template/__init__.py b/release/datafiles/app_templates/101/template/__init__.py
index 6b01da07d5..8d511809ed 100644
--- a/release/datafiles/app_templates/101/template/__init__.py
+++ b/release/datafiles/app_templates/101/template/__init__.py
@@ -22,31 +22,15 @@ import bpy
 import bl_app_override
 
 
-class AppStateStore:
-    # Utility class to encapsulate application state, backup and restore.
-    __slots__ = (
-        # setup_classes
-        "class_store",
-        # setup_addons
-        "sys_path",
-        # setup_ui_filter
-        "ui_filter_store"
-    )
-
-    _template_addons = (
-        "template_101_library",
-    )
-
-    def __init__(self):
-        self.class_store = []
-        self.sys_path = []
-        self.ui_filter_store = []
-
-    def setup_classes(self):
-        assert(len(self.class_store) == 0)
-
-        # Classes
-        self.class_store.extend(
+class AppStateStore(bl_app_override.AppOverrideState):
+    # Just provides data & callbacks for AppOverrideState
+    __slots__ = ()
+
+    @staticmethod
+    def class_ignore():
+        classes = []
+
+        classes.extend(
             bl_app_override.class_filter(
                 bpy.types.Panel,
                 # match any of these values
@@ -59,9 +43,9 @@ class AppStateStore:
                 },
             ),
         )
-        # print(self.class_store)
+        # print(self.classes)
 
-        self.class_store.extend(
+        classes.extend(
             bl_app_override.class_filter(
                 bpy.types.Panel,
                 # match any of these values
@@ -114,114 +98,81 @@ class AppStateStore:
                     'VIEW3D_PT_tools_meshedit',
                     'WORLD_PT_preview',
                     'WORLD_PT_world',
-                    # '',
                 },
             ),
         )
-
-        unregister = bpy.utils.unregister_class
-        for cls in self.class_store:
-            unregister(cls)
-
-    def teardown_classes(self):
-        assert(len(self.class_store) != 0)
-
-        register = bpy.utils.register_class
-        for cls in self.class_store:
-            register(cls)
-        self.class_store.clear()
-
-    def setup_ui_filter(self):
-        import bl_app_override
-
-        def filter_operator(op_id):
-            return op_id not in {
-                "object.select_by_layer",
-                "object.select_mirror",
-                "object.select_pattern",
-                "sound.mixdown",
-                "transform.mirror",
-                "view3d.clear_render_border",
-                "view3d.clip_border",
-                "view3d.localview",
-                "view3d.render_border",
-                "view3d.zoom_border",
-            }
-
-        def filter_property(ty, prop):
-            return (ty, prop) not in {
-                ("Material", "use_nodes"),
-                ("MaterialSlot", "link"),
-                ("Object", "pass_index"),
-                ("RenderSettings", "filter_size"),
-                ("RenderSettings", "frame_map_new"),
-                ("RenderSettings", "frame_map_old"),
-                ("RenderSettings", "pixel_aspect_x"),
-                ("RenderSettings", "pixel_aspect_y"),
-                ("RenderSettings", "pixel_filter_type"),
-                ("RenderSettings", "use_border"),
-                ("RenderSettings", "use_crop_to_border"),
-                ("RenderSettings", "use_placeholder"),
-                ("RenderSettings", "use_render_cache"),
-                ("Scene", "frame_step"),
-                ("Scene", "lock_frame_selection_to_range"),
-                ("Scene", "sync_mode"),
-                ("Scene", "use_preview_range"),
-            }
-
-        def filter_menu(menu_id):
-            return menu_id not in {
-                "TIME_MT_marker",
-                "TIME_MT_playback",
-            }
-
-        def filter_label(text):
-            # print(text)
-            return text not in {
-                "Aspect Ratio:",
-                "Time Remapping:",
-            }
-
-        self.ui_filter_store = bl_app_override.ui_draw_filter_register(
-            filter_operator=filter_operator,
-            filter_property=filter_property,
-            filter_menu=filter_menu,
-            filter_label=filter_label,
+        return classes
+
+    # ----------------
+    # UI Filter/Ignore
+
+    @staticmethod
+    def ui_ignore_operator(op_id):
+        return op_id in {
+            "object.select_by_layer",
+            "object.select_mirror",
+            "object.select_pattern",
+            "sound.mixdown",
+            "transform.mirror",
+            "view3d.clear_render_border",
+            "view3d.clip_border",
+            "view3d.localview",
+            "view3d.render_border",
+            "view3d.zoom_border",
+        }
+
+    @staticmethod
+    def ui_ignore_property(ty, prop):
+        return (ty, prop) in {
+            ("Material", "use_nodes"),
+            ("MaterialSlot", "link"),
+            ("Object", "pass_index"),
+            ("RenderSettings", "filter_size"),
+            ("RenderSettings", "frame_map_new"),
+            ("RenderSettings", "frame_map_old"),
+            ("RenderSettings", "pixel_aspect_x"),
+            ("RenderSettings", "pixel_aspect_y"),
+            ("RenderSettings", "pixel_filter_type"),
+            ("RenderSettings", "use_border"),
+            ("RenderSettings", "use_crop_to_border"),
+            ("RenderSettings", "use_placeholder"),
+            ("RenderSettings", "use_render_cache"),
+            ("Scene", "frame_step"),
+            ("Scene", "lock_frame_selection_to_range"),
+            ("Scene", "sync_mode"),
+            ("Scene", "use_preview_range"),
+        }
+
+    @staticmethod
+    def ui_ignore_menu(menu_id):
+        return menu_id in {
+            "TIME_MT_marker",
+            "TIME_MT_playback",
+        }
+
+    @staticmethod
+    def ui_ignore_label(text):
+        # print(text)
+        return text in {
+            "Aspect Ratio:",
+            "Time Remapping:",
+        }
+
+    # -------
+    # Add-ons
+
+    @staticmethod
+    def addon_paths():
+        import os
+        return (
+            os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "addons")),
         )
 
-    def teardown_ui_filter(self):
-        import bl_app_override
-        bl_app_override.ui_draw_filter_unregister(
-            self.ui_filter_store
+    @staticmethod
+    def addons():
+        return (
+            "template_101_library",
         )
-        self.ui_filter_store = None
-
-
-    def setup_addons(self):
-        import sys
-        import os
-        template_addons = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "addons"))
-        if template_addons not in sys.path:
-            sys.path.append(template_addons)
-            self.sys_path.append(template_addons)
-
-        import addon_utils
-        for addon in self._template_addons:
-            addon_utils.enable(addon)
-
-    def teardown_addons(self):
-        import sys
-        for path in self.sys_path:
-            # should always succeed, but if not its no problem
-            try:
-                sys.path.remove(path)
-            except:
-                pass
-        self.sys_path.clear()
-
-        import addon_utils
-        for addon in self._template_addons:
-            addon_utils.disable(addon)
 
 
 app_state = AppStateStore()
@@ -230,9 +181,8 @@ from . import ui
 
 def register():
     print("Template Register", __file__)
-    app_state.setup_classes()
-    app_state.setup_addons()
-    app_state.setup_ui_filter()
+
+    app_state.setup()
 
     ui.register()
 
@@ -241,6 +191,4 @@ def unregister():
 
     ui.unregister()
 
-    app_state.teardown_classes()
-    app_state.teardown_addons()
-    app_state.teardown_ui_filter()
+    app_state.teardown()
diff --git a/release/scripts/modules/bl_app_override.py b/release/scripts/modules/bl_app_override.py
index 3e79c1ed06..8c274478f6 100644
--- a/release/scripts/modules/bl_app_override.py
+++ b/release/scripts/modules/bl_app_override.py
@@ -45,10 +45,10 @@ def class_filter(cls_parent, **kw):
 def ui_draw_filter_register(
     *,
     classes=None,
-    filter_operator=None,
-    filter_property=None,
-    filter_menu=None,
-    filter_label=None,
+    ui_ignore_operator=None,
+    ui_ignore_property=None,
+    ui_ignore_menu=None,
+    ui_ignore_label=None,
 ):
     import bpy
 
@@ -79,14 +79,14 @@ def ui_draw_filter_register(
                 return dummy_func
 
             elif attr in {"operator", "operator_menu_enum", "operator_enum"}:
-                if filter_operator is None:
+                if ui_ignore_operator is None:
                     return UILayout.__getattribute__(self, attr)
 
                 real_func = UILayout.__getattribute__(self, attr)
 
                 def dummy_func(*args, **kw):
                     # print("wrapped", attr)
-                    if filter_operator(args[0]):
+                    if not ui_ignore_operator(args[0]):
                         ret = real_func(*args, **kw)
                     else:
                         # UILayout.__getattribute__(self, "label")()
@@ -96,14 +96,14 @@ def ui_draw_filter_register(
                 return dummy_func
 
             elif attr in {"prop", "prop_enum"}:
-                if filter_property is None:
+                if ui_ignore_property is None:
                     return UILayout.__getattribute__(self, attr)
 
                 real_func = UILayout.__getattribute__(self, attr)
 
                 def dummy_func(*args, **kw):
                     # print("wrapped", attr)
-                    if filter_property(args[0].__class__.__name__, args[1]):
+                    if not ui_ignore_property(args[0].__class__.__name__, args[1]):
                         ret = real_func(*args, **kw)
                     else:
                         ret = None
@@ -111,14 +111,14 @@ def ui_draw_filter_register(
                 return dummy_func
 
             elif attr == "menu":
-                if filter_menu is None:
+                if ui_ignore_menu is None:
                     return UILayout.__getattribute__(self, at

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list