From 7b2369de9e777e279f111169b43eef78729004f6 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Wed, 20 Sep 2017 12:28:38 +0200 Subject: Fix T52839: "Copy Render Settings" doesn't work. Recent removing of registered types from bpy.types broke this, had to twist a bit around to get it working again... --- render_copy_settings/__init__.py | 52 ++++-------------------------- render_copy_settings/data.py | 68 ++++++++++++++++++++++++++++++++++++++++ render_copy_settings/panel.py | 11 ++++--- 3 files changed, 80 insertions(+), 51 deletions(-) create mode 100644 render_copy_settings/data.py diff --git a/render_copy_settings/__init__.py b/render_copy_settings/__init__.py index abd01299..5f7d8781 100644 --- a/render_copy_settings/__init__.py +++ b/render_copy_settings/__init__.py @@ -21,8 +21,8 @@ bl_info = { "name": "Copy Settings", "author": "Bastien Montagne", - "version": (0, 1, 6), - "blender": (2, 65, 9), + "version": (0, 1, 7), + "blender": (2, 79, 1), "location": "Render buttons (Properties window)", "description": "Allows to copy a selection of render settings " "from current scene to others.", @@ -34,12 +34,14 @@ bl_info = { if "bpy" in locals(): import importlib + importlib.reload(data) importlib.reload(operator) importlib.reload(panel) importlib.reload(translations) else: from . import ( + data, operator, panel, translations, @@ -48,59 +50,17 @@ else: import bpy from bpy.props import ( - StringProperty, - BoolProperty, - IntProperty, - CollectionProperty, PointerProperty, ) -######################################################################################################################## -# Global properties for the script, for UI (as there’s no way to let them in the operator…). -######################################################################################################################## -class RenderCopySettingsDataScene(bpy.types.PropertyGroup): - allowed = BoolProperty(default=True) - - -class RenderCopySettingsDataSetting(bpy.types.PropertyGroup): - strid = StringProperty(default="") - copy = BoolProperty(default=False) - - -class RenderCopySettingsData(bpy.types.PropertyGroup): - # XXX: The consistency of this collection is delegated to the UI code. - # It should only contain one element for each render setting. - affected_settings = CollectionProperty(type=RenderCopySettingsDataSetting, - name="Affected Settings", - description="The list of all available render settings") - # XXX Unused, but needed for template_list… - affected_settings_idx = IntProperty() - - # XXX: The consistency of this collection is delegated to the UI code. - # It should only contain one element for each scene. - allowed_scenes = CollectionProperty(type=RenderCopySettingsDataScene, - name="Allowed Scenes", - description="The list all scenes in the file") - # XXX Unused, but needed for template_list… - allowed_scenes_idx = IntProperty() - - filter_scene = StringProperty(name="Filter Scene", - description="Regex to only affect scenes which name matches it", - default="") - - -classes = ( - RenderCopySettingsDataScene, - RenderCopySettingsDataSetting, - RenderCopySettingsData, -) + operator.classes + panel.classes +classes = data.classes + operator.classes + panel.classes def register(): for cls in classes: bpy.utils.register_class(cls) - bpy.types.Scene.render_copy_settings = PointerProperty(type=RenderCopySettingsData) + bpy.types.Scene.render_copy_settings = PointerProperty(type=data.RenderCopySettingsData) bpy.app.translations.register(__name__, translations.translations_dict) diff --git a/render_copy_settings/data.py b/render_copy_settings/data.py new file mode 100644 index 00000000..d370d7b7 --- /dev/null +++ b/render_copy_settings/data.py @@ -0,0 +1,68 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy +from bpy.props import ( + StringProperty, + BoolProperty, + IntProperty, + CollectionProperty, + ) + +######################################################################################################################## +# Global properties for the script, for UI (as there’s no way to let them in the operator…). +######################################################################################################################## + +class RenderCopySettingsDataScene(bpy.types.PropertyGroup): + allowed = BoolProperty(default=True) + + +class RenderCopySettingsDataSetting(bpy.types.PropertyGroup): + strid = StringProperty(default="") + copy = BoolProperty(default=False) + + +class RenderCopySettingsData(bpy.types.PropertyGroup): + # XXX: The consistency of this collection is delegated to the UI code. + # It should only contain one element for each render setting. + affected_settings = CollectionProperty(type=RenderCopySettingsDataSetting, + name="Affected Settings", + description="The list of all available render settings") + # XXX Unused, but needed for template_list… + affected_settings_idx = IntProperty() + + # XXX: The consistency of this collection is delegated to the UI code. + # It should only contain one element for each scene. + allowed_scenes = CollectionProperty(type=RenderCopySettingsDataScene, + name="Allowed Scenes", + description="The list all scenes in the file") + # XXX Unused, but needed for template_list… + allowed_scenes_idx = IntProperty() + + filter_scene = StringProperty(name="Filter Scene", + description="Regex to only affect scenes which name matches it", + default="") + + +classes = ( + RenderCopySettingsDataScene, + RenderCopySettingsDataSetting, + RenderCopySettingsData, +) diff --git a/render_copy_settings/panel.py b/render_copy_settings/panel.py index db609a15..375e1bd3 100644 --- a/render_copy_settings/panel.py +++ b/render_copy_settings/panel.py @@ -20,23 +20,24 @@ import bpy from . import presets +from . import data as data_types class RENDER_UL_copy_settings(bpy.types.UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): - #assert(isinstance(item, (bpy.types.RenderCopySettingsScene, bpy.types.RenderCopySettingsDataSetting))) + #assert(isinstance(item, (data_types.RenderCopySettingsScene, data_types.RenderCopySettingsDataSetting))) if self.layout_type in {'DEFAULT', 'COMPACT'}: - if isinstance(item, bpy.types.RenderCopySettingsDataSetting): + if isinstance(item, data_types.RenderCopySettingsDataSetting): layout.label(item.name, icon_value=icon) layout.prop(item, "copy", text="") - else: #elif isinstance(item, bpy.types.RenderCopySettingsDataScene): + else: #elif isinstance(item, data_types.RenderCopySettingsDataScene): layout.prop(item, "allowed", text=item.name, toggle=True) elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' - if isinstance(item, bpy.types.RenderCopySettingsDataSetting): + if isinstance(item, data_types.RenderCopySettingsDataSetting): layout.label(item.name, icon_value=icon) layout.prop(item, "copy", text="") - else: #elif isinstance(item, bpy.types.RenderCopySettingsDataScene): + else: #elif isinstance(item, data_types.RenderCopySettingsDataScene): layout.prop(item, "allowed", text=item.name, toggle=True) -- cgit v1.2.3