diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-07-25 17:09:12 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-07-25 17:09:12 +0400 |
commit | c01a561ca79c1634efa801909f134229b457aeeb (patch) | |
tree | 4f38e5c5c2346600b504530480f7bda02cf57beb /release/scripts | |
parent | c017f910892c5ce30b11bb3763bc13a549fa28e9 (diff) |
split out mask UI into their own classes.
Diffstat (limited to 'release/scripts')
-rw-r--r-- | release/scripts/startup/bl_ui/__init__.py | 1 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_mask_common.py | 304 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_clip.py | 244 |
3 files changed, 323 insertions, 226 deletions
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py index 84049e9f1fe..847807029fa 100644 --- a/release/scripts/startup/bl_ui/__init__.py +++ b/release/scripts/startup/bl_ui/__init__.py @@ -38,6 +38,7 @@ _modules = ( "properties_data_modifier", "properties_data_speaker", "properties_game", + "properties_mask_common", "properties_material", "properties_object_constraint", "properties_object", diff --git a/release/scripts/startup/bl_ui/properties_mask_common.py b/release/scripts/startup/bl_ui/properties_mask_common.py new file mode 100644 index 00000000000..bc82f3f1e2b --- /dev/null +++ b/release/scripts/startup/bl_ui/properties_mask_common.py @@ -0,0 +1,304 @@ +# ##### 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 ##### + +# <pep8 compliant> + +# panels get subclassed (not registered directly) +# menus are referenced `as is` + +import bpy +from bpy.types import Menu + + +class MASK_PT_mask(): + # subclasses must define... + #~ bl_space_type = 'CLIP_EDITOR' + #~ bl_region_type = 'UI' + bl_label = "Mask Settings" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + layout = self.layout + + sc = context.space_data + mask = sc.mask + + col = layout.column(align=True) + col.prop(mask, "frame_start") + col.prop(mask, "frame_end") + + +class MASK_PT_layers(): + # subclasses must define... + #~ bl_space_type = 'CLIP_EDITOR' + #~ bl_region_type = 'UI' + bl_label = "Mask Layers" + + @classmethod + def poll(cls, context): + sc = context.space_data + + return sc.mask and sc.mode == 'MASKEDIT' + + def draw(self, context): + layout = self.layout + + sc = context.space_data + mask = sc.mask + active_layer = mask.layers.active + + rows = 5 if active_layer else 2 + + row = layout.row() + row.template_list(mask, "layers", + mask, "active_layer_index", rows=rows) + + sub = row.column(align=True) + + sub.operator("mask.layer_new", icon='ZOOMIN', text="") + sub.operator("mask.layer_remove", icon='ZOOMOUT', text="") + + if active_layer: + sub.separator() + + props = sub.operator("mask.layer_move", icon='TRIA_UP', text="") + props.direction = 'UP' + + props = sub.operator("mask.layer_move", icon='TRIA_DOWN', text="") + props.direction = 'DOWN' + + layout.prop(active_layer, "name") + + # blending + row = layout.row(align=True) + row.prop(active_layer, "alpha") + row.prop(active_layer, "invert", text="", icon='IMAGE_ALPHA') + + layout.prop(active_layer, "blend") + layout.prop(active_layer, "falloff") + + +class MASK_PT_spline(): + # subclasses must define... + #~ bl_space_type = 'CLIP_EDITOR' + #~ bl_region_type = 'UI' + bl_label = "Active Spline" + + @classmethod + def poll(cls, context): + sc = context.space_data + mask = sc.mask + + if mask and sc.mode == 'MASKEDIT': + return mask.layers.active and mask.layers.active.splines.active + + return False + + def draw(self, context): + layout = self.layout + + sc = context.space_data + mask = sc.mask + spline = mask.layers.active.splines.active + + col = layout.column() + col.prop(spline, "weight_interpolation") + rowsub = col.row() + rowsub.prop(spline, "use_cyclic") + rowsub.prop(spline, "use_fill") + + +class MASK_PT_point(): + # subclasses must define... + #~ bl_space_type = 'CLIP_EDITOR' + #~ bl_region_type = 'UI' + bl_label = "Active Point" + + @classmethod + def poll(cls, context): + sc = context.space_data + mask = sc.mask + + if mask and sc.mode == 'MASKEDIT': + mask_layer_active = mask.layers.active + return (mask_layer_active and + mask_layer_active.splines.active_point) + + return False + + def draw(self, context): + layout = self.layout + + sc = context.space_data + mask = sc.mask + point = mask.layers.active.splines.active_point + parent = point.parent + + col = layout.column() + col.prop(point, "handle_type") + + col = layout.column() + # Currently only parenting yo movie clip is allowed, so do not + # ver-oplicate things for now and use single template_ID + #col.template_any_ID(parent, "id", "id_type", text="") + + col.label("Parent:") + col.prop(parent, "id", text="") + + if parent.id_type == 'MOVIECLIP' and parent.id: + clip = parent.id + tracking = clip.tracking + + col.prop_search(parent, "parent", tracking, + "objects", icon='OBJECT_DATA', text="Object:") + + if parent.parent in tracking.objects: + object = tracking.objects[parent.parent] + col.prop_search(parent, "sub_parent", object, + "tracks", icon='ANIM_DATA', text="Track:") + else: + col.prop_search(parent, "sub_parent", tracking, + "tracks", icon='ANIM_DATA', text="Track:") + + +class MASK_PT_display(): + # subclasses must define... + #~ bl_space_type = 'CLIP_EDITOR' + #~ bl_region_type = 'UI' + bl_label = "Mask Display" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + layout = self.layout + + sc = context.space_data + + col.prop(layout, "mask_draw_type", text="") + col.prop(layout, "show_mask_smooth") + + +class MASK_PT_tools(): + # subclasses must define... + #~ bl_space_type = 'CLIP_EDITOR' + #~ bl_region_type = 'TOOLS' + bl_label = "Mask Tools" + + def draw(self, context): + layout = self.layout + + col = layout.column(align=True) + col.label(text="Transform:") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") + props = col.operator("transform.transform", text="Shrink/Fatten") + props.mode = 'MASK_SHRINKFATTEN' + + col = layout.column(align=True) + col.label(text="Spline:") + col.operator("mask.delete") + col.operator("mask.cyclic_toggle") + col.operator("mask.switch_direction") + + col = layout.column(align=True) + col.label(text="Parenting:") + col.operator("mask.parent_set") + col.operator("mask.parent_clear") + + +class MASK_MT_mask(Menu): + bl_label = "Mask" + + def draw(self, context): + layout = self.layout + + layout.operator("mask.delete") + + layout.separator() + layout.operator("mask.cyclic_toggle") + layout.operator("mask.switch_direction") + layout.operator("mask.normals_make_consistent") + layout.operator("mask.feather_weight_clear") # TODO, better place? + + layout.separator() + layout.operator("mask.parent_clear") + layout.operator("mask.parent_set") + + layout.separator() + layout.menu("MASK_MT_visibility") + layout.menu("MASK_MT_transform") + layout.menu("MASK_MT_animation") + + +class MASK_MT_visibility(Menu): + bl_label = "Show/Hide" + + def draw(self, context): + layout = self.layout + + layout.operator("mask.hide_view_clear", text="Show Hidden") + layout.operator("mask.hide_view_set", text="Hide Selected") + + props = layout.operator("mask.hide_view_set", text="Hide Unselected") + props.unselected = True + + +class MASK_MT_transform(Menu): + bl_label = "Transform" + + def draw(self, context): + layout = self.layout + + layout.operator("transform.translate") + layout.operator("transform.rotate") + layout.operator("transform.resize") + props = layout.operator("transform.transform", text="Shrink/Fatten") + props.mode = 'MASK_SHRINKFATTEN' + + +class MASK_MT_animation(Menu): + bl_label = "Animation" + + def draw(self, context): + layout = self.layout + + layout.operator("mask.shape_key_clear") + layout.operator("mask.shape_key_insert") + layout.operator("mask.shape_key_feather_reset") + layout.operator("mask.shape_key_rekey") + + +class MASK_MT_select(Menu): + bl_label = "Select" + + def draw(self, context): + layout = self.layout + sc = context.space_data + + layout.operator("mask.select_border") + layout.operator("mask.select_circle") + + layout.separator() + + layout.operator("mask.select_all" + ).action = 'TOGGLE' + layout.operator("mask.select_all", + text="Inverse").action = 'INVERT' + +if __name__ == "__main__": # only for live edit. + bpy.utils.register_module(__name__) diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py index ac724518e85..4cf75f72dd0 100644 --- a/release/scripts/startup/bl_ui/space_clip.py +++ b/release/scripts/startup/bl_ui/space_clip.py @@ -20,7 +20,12 @@ import bpy from bpy.types import Panel, Header, Menu - +from bl_ui.properties_mask_common import (MASK_PT_mask, + MASK_PT_layers, + MASK_PT_spline, + MASK_PT_point, + MASK_PT_display, + MASK_PT_tools) class CLIP_HT_header(Header): bl_space_type = 'CLIP_EDITOR' @@ -115,11 +120,11 @@ class CLIP_HT_header(Header): sub.menu("CLIP_MT_view") if clip: - sub.menu("CLIP_MT_select") - sub.menu("CLIP_MT_clip") - sub.menu("CLIP_MT_mask") + sub.menu("MASK_MT_select") + sub.menu("CLIP_MT_clip") # XXX - remove? + sub.menu("MASK_MT_mask") else: - sub.menu("CLIP_MT_clip") + sub.menu("CLIP_MT_clip") # XXX - remove? row = layout.row() row.template_ID(sc, "clip", open="clip.open") @@ -422,32 +427,9 @@ class CLIP_PT_tools_object(CLIP_PT_reconstruction_panel, Panel): col.prop(settings, "object_distance") -class CLIP_PT_tools_mask(CLIP_PT_mask_view_panel, Panel): +class CLIP_PT_tools_mask(MASK_PT_tools, CLIP_PT_mask_view_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'TOOLS' - bl_label = "Mask Tools" - - def draw(self, context): - layout = self.layout - - col = layout.column(align=True) - col.label(text="Transform:") - col.operator("transform.translate") - col.operator("transform.rotate") - col.operator("transform.resize", text="Scale") - props = col.operator("transform.transform", text="Shrink/Fatten") - props.mode = 'MASK_SHRINKFATTEN' - - col = layout.column(align=True) - col.label(text="Spline:") - col.operator("mask.delete") - col.operator("mask.cyclic_toggle") - col.operator("mask.switch_direction") - - col = layout.column(align=True) - col.label(text="Parenting:") - col.operator("mask.parent_set") - col.operator("mask.parent_clear") class CLIP_PT_tools_grease_pencil(Panel): @@ -661,134 +643,19 @@ class CLIP_PT_tracking_camera(Panel): col.prop(clip.tracking.camera, "k3") -class CLIP_PT_mask_layers(Panel): +class CLIP_PT_mask_layers(MASK_PT_layers, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' - bl_label = "Mask Layers" - - @classmethod - def poll(cls, context): - sc = context.space_data - - return sc.mask and sc.mode == 'MASKEDIT' - - def draw(self, context): - layout = self.layout - - sc = context.space_data - mask = sc.mask - active_layer = mask.layers.active - - rows = 5 if active_layer else 2 - - row = layout.row() - row.template_list(mask, "layers", - mask, "active_layer_index", rows=rows) - - sub = row.column(align=True) - - sub.operator("mask.layer_new", icon='ZOOMIN', text="") - sub.operator("mask.layer_remove", icon='ZOOMOUT', text="") - - if active_layer: - sub.separator() - - props = sub.operator("mask.layer_move", icon='TRIA_UP', text="") - props.direction = 'UP' - - props = sub.operator("mask.layer_move", icon='TRIA_DOWN', text="") - props.direction = 'DOWN' - layout.prop(active_layer, "name") - # blending - row = layout.row(align=True) - row.prop(active_layer, "alpha") - row.prop(active_layer, "invert", text="", icon='IMAGE_ALPHA') - - layout.prop(active_layer, "blend") - layout.prop(active_layer, "falloff") - - -class CLIP_PT_active_mask_spline(Panel): +class CLIP_PT_active_mask_spline(MASK_PT_spline, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' - bl_label = "Active Spline" - - @classmethod - def poll(cls, context): - sc = context.space_data - mask = sc.mask - if mask and sc.mode == 'MASKEDIT': - return mask.layers.active and mask.layers.active.splines.active - return False - - def draw(self, context): - layout = self.layout - - sc = context.space_data - mask = sc.mask - spline = mask.layers.active.splines.active - - col = layout.column() - col.prop(spline, "weight_interpolation") - rowsub = col.row() - rowsub.prop(spline, "use_cyclic") - rowsub.prop(spline, "use_fill") - - -class CLIP_PT_active_mask_point(Panel): +class CLIP_PT_active_mask_point(MASK_PT_point, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' - bl_label = "Active Point" - - @classmethod - def poll(cls, context): - sc = context.space_data - mask = sc.mask - - if mask and sc.mode == 'MASKEDIT': - mask_layer_active = mask.layers.active - return (mask_layer_active and - mask_layer_active.splines.active_point) - - return False - - def draw(self, context): - layout = self.layout - - sc = context.space_data - mask = sc.mask - point = mask.layers.active.splines.active_point - parent = point.parent - - col = layout.column() - col.prop(point, "handle_type") - - col = layout.column() - # Currently only parenting yo movie clip is allowed, so do not - # ver-oplicate things for now and use single template_ID - #col.template_any_ID(parent, "id", "id_type", text="") - - col.label("Parent:") - col.prop(parent, "id", text="") - - if parent.id_type == 'MOVIECLIP' and parent.id: - clip = parent.id - tracking = clip.tracking - - col.prop_search(parent, "parent", tracking, - "objects", icon='OBJECT_DATA', text="Object:") - - if parent.parent in tracking.objects: - object = tracking.objects[parent.parent] - col.prop_search(parent, "sub_parent", object, - "tracks", icon='ANIM_DATA', text="Track:") - else: - col.prop_search(parent, "sub_parent", tracking, - "tracks", icon='ANIM_DATA', text="Track:") class CLIP_PT_display(CLIP_PT_clip_view_panel, Panel): @@ -835,28 +702,15 @@ class CLIP_PT_display(CLIP_PT_clip_view_panel, Panel): row = col.row() row.prop(clip, "display_aspect", text="") - if sc.mode == 'MASKEDIT': - col = layout.column() - col.prop(sc, "mask_draw_type", text="") - col.prop(sc, "show_mask_smooth") - -# TODO, move into its own file -class CLIP_PT_mask(CLIP_PT_mask_view_panel, Panel): +class CLIP_PT_mask(MASK_PT_mask, CLIP_PT_mask_view_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' - bl_label = "Mask Settings" - bl_options = {'DEFAULT_CLOSED'} - def draw(self, context): - layout = self.layout - - sc = context.space_data - mask = sc.mask - col = layout.column(align=True) - col.prop(mask, "frame_start") - col.prop(mask, "frame_end") +class CLIP_PT_mask_display(MASK_PT_display, CLIP_PT_mask_view_panel, Panel): + bl_space_type = 'CLIP_EDITOR' + bl_region_type = 'UI' class CLIP_PT_marker_display(CLIP_PT_clip_view_panel, Panel): @@ -1280,30 +1134,6 @@ class CLIP_MT_tracking_specials(Menu): props.action = 'UNLOCK' -class CLIP_MT_mask(Menu): - bl_label = "Mask" - - def draw(self, context): - layout = self.layout - - layout.operator("mask.delete") - - layout.separator() - layout.operator("mask.cyclic_toggle") - layout.operator("mask.switch_direction") - layout.operator("mask.normals_make_consistent") - layout.operator("mask.feather_weight_clear") # TODO, better place? - - layout.separator() - layout.operator("mask.parent_clear") - layout.operator("mask.parent_set") - - layout.separator() - layout.menu("CLIP_MT_mask_visibility") - layout.menu("CLIP_MT_mask_transform") - layout.menu("CLIP_MT_mask_animation") - - class CLIP_MT_select_mode(Menu): bl_label = "Select Mode" @@ -1315,44 +1145,6 @@ class CLIP_MT_select_mode(Menu): layout.operator_enum("clip.mode_set", "mode") -class CLIP_MT_mask_visibility(Menu): - bl_label = "Show/Hide" - - def draw(self, context): - layout = self.layout - - layout.operator("mask.hide_view_clear", text="Show Hidden") - layout.operator("mask.hide_view_set", text="Hide Selected") - - props = layout.operator("mask.hide_view_set", text="Hide Unselected") - props.unselected = True - - -class CLIP_MT_mask_transform(Menu): - bl_label = "Transform" - - def draw(self, context): - layout = self.layout - - layout.operator("transform.translate") - layout.operator("transform.rotate") - layout.operator("transform.resize") - props = layout.operator("transform.transform", text="Shrink/Fatten") - props.mode = 'MASK_SHRINKFATTEN' - - -class CLIP_MT_mask_animation(Menu): - bl_label = "Animation" - - def draw(self, context): - layout = self.layout - - layout.operator("mask.shape_key_clear") - layout.operator("mask.shape_key_insert") - layout.operator("mask.shape_key_feather_reset") - layout.operator("mask.shape_key_rekey") - - class CLIP_MT_camera_presets(Menu): """Predefined tracking camera intrinsics""" bl_label = "Camera Presets" |