diff options
Diffstat (limited to 'release/scripts/startup/bl_ui/space_spreadsheet.py')
-rw-r--r-- | release/scripts/startup/bl_ui/space_spreadsheet.py | 75 |
1 files changed, 40 insertions, 35 deletions
diff --git a/release/scripts/startup/bl_ui/space_spreadsheet.py b/release/scripts/startup/bl_ui/space_spreadsheet.py index 741ad544d67..846582b0142 100644 --- a/release/scripts/startup/bl_ui/space_spreadsheet.py +++ b/release/scripts/startup/bl_ui/space_spreadsheet.py @@ -11,34 +11,37 @@ class SPREADSHEET_HT_header(bpy.types.Header): space = context.space_data layout.template_header() + viewer_path = space.viewer_path.path - if len(space.context_path) == 0: - self.draw_without_context_path(layout) + if len(viewer_path) == 0: + self.draw_without_viewer_path(layout) return - root_context = space.context_path[0] - if root_context.type != 'OBJECT': - self.draw_without_context_path(layout) + root_context = viewer_path[0] + if root_context.type != 'ID': + self.draw_without_viewer_path(layout) return - obj = root_context.object + if not isinstance(root_context.id, bpy.types.Object): + self.draw_without_viewer_path(layout) + return + obj = root_context.id if obj is None: - self.draw_without_context_path(layout) + self.draw_without_viewer_path(layout) return layout.prop(space, "object_eval_state", text="") - context_path = space.context_path if space.object_eval_state == 'ORIGINAL': # Only show first context. - context_path = context_path[:1] - if space.display_context_path_collapsed: - self.draw_collapsed_context_path(context, layout, context_path) + viewer_path = viewer_path[:1] + if space.display_viewer_path_collapsed: + self.draw_collapsed_viewer_path(context, layout, viewer_path) else: - self.draw_full_context_path(context, layout, context_path) + self.draw_full_viewer_path(context, layout, viewer_path) pin_icon = 'PINNED' if space.is_pinned else 'UNPINNED' layout.operator("spreadsheet.toggle_pin", text="", icon=pin_icon, emboss=False) - if space.object_eval_state == 'VIEWER_NODE' and len(context_path) < 3: + if space.object_eval_state == 'VIEWER_NODE' and len(viewer_path) < 3: layout.label(text="No active viewer node", icon='INFO') layout.separator_spacer() @@ -49,50 +52,52 @@ class SPREADSHEET_HT_header(bpy.types.Header): sub.prop(space, "show_only_selected", text="") row.prop(space, "use_filter", toggle=True, icon='FILTER', icon_only=True) - def draw_without_context_path(self, layout): + def draw_without_viewer_path(self, layout): layout.label(text="No active context") - def draw_full_context_path(self, context, layout, context_path): + def draw_full_viewer_path(self, context, layout, viewer_path): space = context.space_data row = layout.row() - for ctx in context_path[:-1]: + for ctx in viewer_path[:-1]: subrow = row.row(align=True) self.draw_spreadsheet_context(subrow, ctx) - self.draw_spreadsheet_context_path_icon(subrow, space) + self.draw_spreadsheet_viewer_path_icon(subrow, space) - self.draw_spreadsheet_context(row, context_path[-1]) + self.draw_spreadsheet_context(row, viewer_path[-1]) - def draw_collapsed_context_path(self, context, layout, context_path): + def draw_collapsed_viewer_path(self, context, layout, viewer_path): space = context.space_data row = layout.row(align=True) - self.draw_spreadsheet_context(row, context_path[0]) - if len(context_path) == 1: + self.draw_spreadsheet_context(row, viewer_path[0]) + if len(viewer_path) == 1: return - self.draw_spreadsheet_context_path_icon(row, space) - if len(context_path) > 2: - self.draw_spreadsheet_context_path_icon(row, space, icon='DOT') - self.draw_spreadsheet_context_path_icon(row, space) - self.draw_spreadsheet_context(row, context_path[-1]) + self.draw_spreadsheet_viewer_path_icon(row, space) + if len(viewer_path) > 2: + self.draw_spreadsheet_viewer_path_icon(row, space, icon='DOT') + self.draw_spreadsheet_viewer_path_icon(row, space) + self.draw_spreadsheet_context(row, viewer_path[-1]) def draw_spreadsheet_context(self, layout, ctx): - if ctx.type == 'OBJECT': - if ctx.object is None: - layout.label(text="<no object>", icon='OBJECT_DATA') + if ctx.type == 'ID': + if ctx.id is not None and isinstance(ctx.id, bpy.types.Object): + layout.label(text=ctx.id.name, icon='OBJECT_DATA') else: - layout.label(text=ctx.object.name, icon='OBJECT_DATA') + layout.label(text="Invalid id") elif ctx.type == 'MODIFIER': layout.label(text=ctx.modifier_name, icon='MODIFIER') elif ctx.type == 'NODE': layout.label(text=ctx.node_name, icon='NODE') - def draw_spreadsheet_context_path_icon(self, layout, space, icon='RIGHTARROW_THIN'): - layout.prop(space, "display_context_path_collapsed", icon_only=True, emboss=False, icon=icon) + def draw_spreadsheet_viewer_path_icon(self, layout, space, icon='RIGHTARROW_THIN'): + layout.prop(space, "display_viewer_path_collapsed", icon_only=True, emboss=False, icon=icon) def selection_filter_available(self, space): - root_context = space.context_path[0] - if root_context.type != 'OBJECT': + root_context = space.viewer_path.path[0] + if root_context.type != 'ID': + return False + if not isinstance(root_context.id, bpy.types.Object): return False - obj = root_context.object + obj = root_context.id if obj is None: return False if obj.type == 'MESH': |