diff options
29 files changed, 409 insertions, 212 deletions
diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg index 3f2aa4a856f..8d6b9eef29d 100644 --- a/release/datafiles/blender_icons.svg +++ b/release/datafiles/blender_icons.svg @@ -86291,6 +86291,42 @@ style="opacity:0.7;fill:url(#linearGradient18212);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" /> <g + style="display:inline;enable-background:new" + id="g24559-2-1" + transform="translate(279.8665,506.92392)"> + <rect + y="111" + x="103" + height="16" + width="16" + id="rect24489-7-4" + style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <rect + style="fill:#ececec;fill-opacity:1;stroke:#141414;stroke-width:0.79452544;stroke-opacity:1" + id="rect29842" + width="11.816368" + height="2.1883197" + x="105.18671" + y="-116.88043" + transform="scale(1,-1)" /> + <rect + style="fill:#ececec;fill-opacity:1;stroke:#141414;stroke-width:0.79452544;stroke-opacity:1;display:inline;enable-background:new" + id="rect29842-4" + width="11.816368" + height="2.1883197" + x="105.31538" + y="-120.80865" + transform="scale(1,-1)" /> + <rect + style="fill:#ececec;fill-opacity:1;stroke:#141414;stroke-width:0.79452544;stroke-opacity:1;display:inline;enable-background:new" + id="rect29842-4-5" + width="11.816368" + height="2.1883197" + x="105.41832" + y="-124.71391" + transform="scale(1,-1)" /> + </g> + <g inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Pracownia\Pulpit\sss.png" diff --git a/release/datafiles/blender_icons16/icon16_collapsemenu.dat b/release/datafiles/blender_icons16/icon16_collapsemenu.dat Binary files differnew file mode 100644 index 00000000000..fd16fadcc8b --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_collapsemenu.dat diff --git a/release/datafiles/blender_icons32/icon32_collapsemenu.dat b/release/datafiles/blender_icons32/icon32_collapsemenu.dat Binary files differnew file mode 100644 index 00000000000..d84dd843436 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_collapsemenu.dat diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index f7af297a0e0..0b9893cea51 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -753,6 +753,17 @@ class Menu(StructRNA, _GenericUI, metaclass=RNAMeta): self.preset_operator, filter_ext=lambda ext: ext.lower() in {".py", ".xml"}) + @classmethod + def draw_collapsible(cls, context, layout): + # helper function for (optionally) collapsed header menus + # only usable within headers + if context.area.show_menus: + cls.draw_menus(layout, context) + else: + layout.separator() + layout.menu(cls.__name__, icon='COLLAPSEMENU') + layout.separator() + class Region(StructRNA): __slots__ = () diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py index 3a203c77463..28d1d52924e 100644 --- a/release/scripts/startup/bl_ui/space_clip.py +++ b/release/scripts/startup/bl_ui/space_clip.py @@ -51,18 +51,7 @@ class CLIP_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - sub = row.row(align=True) - sub.menu("CLIP_MT_view") - - if sc.view == 'CLIP': - if clip: - sub.menu("CLIP_MT_select") - sub.menu("CLIP_MT_clip") - sub.menu("CLIP_MT_track") - sub.menu("CLIP_MT_reconstruction") - else: - sub.menu("CLIP_MT_clip") + CLIP_MT_tracking_editor_menus.draw_collapsible(context, layout) row = layout.row() row.template_ID(sc, "clip", open="clip.open") @@ -128,16 +117,7 @@ class CLIP_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - sub = row.row(align=True) - sub.menu("CLIP_MT_view") - - if clip: - sub.menu("MASK_MT_select") - sub.menu("CLIP_MT_clip") # XXX - remove? - sub.menu("MASK_MT_mask") - else: - sub.menu("CLIP_MT_clip") # XXX - remove? + CLIP_MT_masking_editor_menus.draw_collapsible(context, layout) row = layout.row() row.template_ID(sc, "clip", open="clip.open") @@ -169,6 +149,52 @@ class CLIP_HT_header(Header): layout.template_running_jobs() +class CLIP_MT_tracking_editor_menus(Menu): + bl_idname = "CLIP_MT_tracking_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + sc = context.space_data + clip = sc.clip + + layout.menu("CLIP_MT_view") + + if sc.view == 'CLIP': + if clip: + layout.menu("CLIP_MT_select") + layout.menu("CLIP_MT_clip") + layout.menu("CLIP_MT_track") + layout.menu("CLIP_MT_reconstruction") + else: + layout.menu("CLIP_MT_clip") + + +class CLIP_MT_masking_editor_menus(Menu): + + bl_idname = "CLIP_MT_masking_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + layout = self.layout + + layout.menu("CLIP_MT_view") + + if clip: + layout.menu("MASK_MT_select") + layout.menu("CLIP_MT_clip") # XXX - remove? + layout.menu("MASK_MT_mask") + else: + layout.menu("CLIP_MT_clip") # XXX - remove? + + class CLIP_PT_clip_view_panel: @classmethod diff --git a/release/scripts/startup/bl_ui/space_console.py b/release/scripts/startup/bl_ui/space_console.py index e097dfe802d..ec16cfd89be 100644 --- a/release/scripts/startup/bl_ui/space_console.py +++ b/release/scripts/startup/bl_ui/space_console.py @@ -29,12 +29,23 @@ class CONSOLE_HT_header(Header): layout.template_header() - if context.area.show_menus: - layout.menu("CONSOLE_MT_console") + CONSOLE_MT_editor_menus.draw_collapsible(context, layout) layout.operator("console.autocomplete", text="Autocomplete") +class CONSOLE_MT_editor_menus(Menu): + bl_idname = "CONSOLE_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + layout.menu("CONSOLE_MT_console") + + class CONSOLE_MT_console(Menu): bl_label = "Console" diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py index 9d317033bb9..269c960ee7e 100644 --- a/release/scripts/startup/bl_ui/space_dopesheet.py +++ b/release/scripts/startup/bl_ui/space_dopesheet.py @@ -107,20 +107,7 @@ class DOPESHEET_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - row.menu("DOPESHEET_MT_view") - row.menu("DOPESHEET_MT_select") - row.menu("DOPESHEET_MT_marker") - - if st.mode == 'DOPESHEET' or (st.mode == 'ACTION' and st.action is not None): - row.menu("DOPESHEET_MT_channel") - elif st.mode == 'GPENCIL': - row.menu("DOPESHEET_MT_gpencil_channel") - - if st.mode != 'GPENCIL': - row.menu("DOPESHEET_MT_key") - else: - row.menu("DOPESHEET_MT_gpencil_frame") + DOPESHEET_MT_editor_menus.draw_collapsible(context, layout) layout.prop(st, "mode", text="") layout.prop(st.dopesheet, "show_summary", text="Summary") @@ -144,6 +131,32 @@ class DOPESHEET_HT_header(Header): row.operator("action.paste", text="", icon='PASTEDOWN') +class DOPESHEET_MT_editor_menus(Menu): + bl_idname = "DOPESHEET_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + st = context.space_data + + layout.menu("DOPESHEET_MT_view") + layout.menu("DOPESHEET_MT_select") + layout.menu("DOPESHEET_MT_marker") + + if st.mode == 'DOPESHEET' or (st.mode == 'ACTION' and st.action is not None): + layout.menu("DOPESHEET_MT_channel") + elif st.mode == 'GPENCIL': + layout.menu("DOPESHEET_MT_gpencil_channel") + + if st.mode != 'GPENCIL': + layout.menu("DOPESHEET_MT_key") + else: + layout.menu("DOPESHEET_MT_gpencil_frame") + + class DOPESHEET_MT_view(Menu): bl_label = "View" diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py index 201ac0a72d0..b90eb7a89c3 100644 --- a/release/scripts/startup/bl_ui/space_filebrowser.py +++ b/release/scripts/startup/bl_ui/space_filebrowser.py @@ -29,7 +29,7 @@ class FILEBROWSER_HT_header(Header): st = context.space_data - layout.template_header(menus=False) + layout.template_header() row = layout.row() row.separator() diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py index 61e2f10a057..775f398bc78 100644 --- a/release/scripts/startup/bl_ui/space_graph.py +++ b/release/scripts/startup/bl_ui/space_graph.py @@ -35,12 +35,7 @@ class GRAPH_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - row.menu("GRAPH_MT_view") - row.menu("GRAPH_MT_select") - row.menu("GRAPH_MT_marker") - row.menu("GRAPH_MT_channel") - row.menu("GRAPH_MT_key") + GRAPH_MT_editor_menus.draw_collapsible(context, layout) layout.prop(st, "mode", text="") @@ -65,6 +60,22 @@ class GRAPH_HT_header(Header): row.operator("graph.ghost_curves_create", text="", icon='GHOST_ENABLED') +class GRAPH_MT_editor_menus(Menu): + bl_idname = "GRAPH_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + layout.menu("GRAPH_MT_view") + layout.menu("GRAPH_MT_select") + layout.menu("GRAPH_MT_marker") + layout.menu("GRAPH_MT_channel") + layout.menu("GRAPH_MT_key") + + class GRAPH_MT_view(Menu): bl_label = "View" diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index cb22ee7a580..9b3c2267aba 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -373,25 +373,7 @@ class IMAGE_HT_header(Header): row = layout.row(align=True) row.template_header() - # menus - if context.area.show_menus: - sub = row.row(align=True) - sub.menu("IMAGE_MT_view") - - if show_uvedit: - sub.menu("IMAGE_MT_select") - if show_maskedit: - sub.menu("MASK_MT_select") - - if ima and ima.is_dirty: - sub.menu("IMAGE_MT_image", text="Image*") - else: - sub.menu("IMAGE_MT_image", text="Image") - - if show_uvedit: - sub.menu("IMAGE_MT_uvs") - if show_maskedit: - sub.menu("MASK_MT_mask") + MASK_MT_editor_menus.draw_collapsible(context, layout) layout.template_ID(sima, "image", new="image.new", open="image.open") if not show_render: @@ -450,6 +432,40 @@ class IMAGE_HT_header(Header): layout.prop(sima, "use_realtime_update", text="", icon_only=True, icon='LOCKED') +class MASK_MT_editor_menus(Menu): + bl_idname = "MASK_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + sima = context.space_data + ima = sima.image + + show_render = sima.show_render + show_uvedit = sima.show_uvedit + show_maskedit = sima.show_maskedit + + layout.menu("IMAGE_MT_view") + + if show_uvedit: + layout.menu("IMAGE_MT_select") + if show_maskedit: + layout.menu("MASK_MT_select") + + if ima and ima.is_dirty: + layout.menu("IMAGE_MT_image", text="Image*") + else: + layout.menu("IMAGE_MT_image", text="Image") + + if show_uvedit: + layout.menu("IMAGE_MT_uvs") + if show_maskedit: + layout.menu("MASK_MT_mask") + + class IMAGE_PT_image_properties(Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py index 6457075c9e2..769cc53d953 100644 --- a/release/scripts/startup/bl_ui/space_info.py +++ b/release/scripts/startup/bl_ui/space_info.py @@ -34,15 +34,7 @@ class INFO_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - sub = row.row(align=True) - sub.menu("INFO_MT_file") - if rd.use_game_engine: - sub.menu("INFO_MT_game") - else: - sub.menu("INFO_MT_render") - sub.menu("INFO_MT_window") - sub.menu("INFO_MT_help") + INFO_MT_editor_menus.draw_collapsible(context, layout) if window.screen.show_fullscreen: layout.operator("screen.back_to_previous", icon='SCREEN_BACK', text="Back to Previous") @@ -79,6 +71,29 @@ class INFO_HT_header(Header): row.label(text=scene.statistics(), translate=False) +class INFO_MT_editor_menus(Menu): + bl_idname = "INFO_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + scene = context.scene + rd = scene.render + + layout.menu("INFO_MT_file") + + if rd.use_game_engine: + layout.menu("INFO_MT_game") + else: + layout.menu("INFO_MT_render") + + layout.menu("INFO_MT_window") + layout.menu("INFO_MT_help") + + class INFO_MT_file(Menu): bl_label = "File" @@ -132,7 +147,7 @@ class INFO_MT_file(Menu): layout.operator_context = 'EXEC_AREA' if bpy.data.is_dirty and context.user_preferences.view.use_quit_dialog: - layout.operator_context = 'INVOKE_SCREEN' # quit dialog + layout.operator_context = 'INVOKE_SCREEN' # quit dialog layout.operator("wm.quit_blender", text="Quit", icon='QUIT') diff --git a/release/scripts/startup/bl_ui/space_logic.py b/release/scripts/startup/bl_ui/space_logic.py index 730398171d6..9792a26d224 100644 --- a/release/scripts/startup/bl_ui/space_logic.py +++ b/release/scripts/startup/bl_ui/space_logic.py @@ -93,10 +93,20 @@ class LOGIC_HT_header(Header): layout.template_header() - if context.area.show_menus: - row = layout.row(align=True) - row.menu("LOGIC_MT_view") - row.menu("LOGIC_MT_logicbricks_add") + LOGIC_MT_editor_menus.draw_collapsible(context, layout) + + +class LOGIC_MT_editor_menus(Menu): + bl_idname = "LOGIC_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + layout.menu("LOGIC_MT_view") + layout.menu("LOGIC_MT_logicbricks_add") class LOGIC_MT_view(Menu): diff --git a/release/scripts/startup/bl_ui/space_nla.py b/release/scripts/startup/bl_ui/space_nla.py index dd3ec33d56b..e41086f6da1 100644 --- a/release/scripts/startup/bl_ui/space_nla.py +++ b/release/scripts/startup/bl_ui/space_nla.py @@ -35,18 +35,29 @@ class NLA_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - row.menu("NLA_MT_view") - row.menu("NLA_MT_select") - row.menu("NLA_MT_marker") - row.menu("NLA_MT_edit") - row.menu("NLA_MT_add") + NLA_MT_editor_menus.draw_collapsible(context, layout) dopesheet_filter(layout, context) layout.prop(st, "auto_snap", text="") +class NLA_MT_editor_menus(Menu): + bl_idname = "NLA_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + layout.menu("NLA_MT_view") + layout.menu("NLA_MT_select") + layout.menu("NLA_MT_marker") + layout.menu("NLA_MT_edit") + layout.menu("NLA_MT_add") + + class NLA_MT_view(Menu): bl_label = "View" diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py index 3bf2977d778..a91c9a31769 100644 --- a/release/scripts/startup/bl_ui/space_node.py +++ b/release/scripts/startup/bl_ui/space_node.py @@ -36,11 +36,7 @@ class NODE_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - row.menu("NODE_MT_view") - row.menu("NODE_MT_select") - row.menu("NODE_MT_add") - row.menu("NODE_MT_node") + NODE_MT_editor_menus.draw_collapsible(context, layout) layout.prop(snode, "tree_type", text="", expand=True) @@ -115,6 +111,21 @@ class NODE_HT_header(Header): layout.template_running_jobs() +class NODE_MT_editor_menus(Menu): + bl_idname = "NODE_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + layout.menu("NODE_MT_view") + layout.menu("NODE_MT_select") + layout.menu("NODE_MT_add") + layout.menu("NODE_MT_node") + + class NODE_MT_add(bpy.types.Menu): bl_space_type = 'NODE_EDITOR' bl_label = "Add" diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py index 16f639eafc4..01165bf2889 100644 --- a/release/scripts/startup/bl_ui/space_outliner.py +++ b/release/scripts/startup/bl_ui/space_outliner.py @@ -34,12 +34,7 @@ class OUTLINER_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - sub = row.row(align=True) - sub.menu("OUTLINER_MT_view") - sub.menu("OUTLINER_MT_search") - if space.display_mode == 'DATABLOCKS': - sub.menu("OUTLINER_MT_edit_datablocks") + OUTLINER_MT_editor_menus.draw_collapsible(context, layout) layout.prop(space, "display_mode", text="") @@ -64,6 +59,24 @@ class OUTLINER_HT_header(Header): row.label(text="No Keying Set active") +class OUTLINER_MT_editor_menus(Menu): + bl_idname = "OUTLINER_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + space = context.space_data + + layout.menu("OUTLINER_MT_view") + layout.menu("OUTLINER_MT_search") + + if space.display_mode == 'DATABLOCKS': + layout.menu("OUTLINER_MT_edit_datablocks") + + class OUTLINER_MT_view(Menu): bl_label = "View" diff --git a/release/scripts/startup/bl_ui/space_properties.py b/release/scripts/startup/bl_ui/space_properties.py index 758713b5cc4..f0ca01ec3ba 100644 --- a/release/scripts/startup/bl_ui/space_properties.py +++ b/release/scripts/startup/bl_ui/space_properties.py @@ -30,7 +30,7 @@ class PROPERTIES_HT_header(Header): view = context.space_data row = layout.row() - row.template_header(menus=False) + row.template_header() row.prop(view, "context", expand=True, icon_only=True) diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 6f28bcb2225..eab4f5ea541 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -63,14 +63,7 @@ class SEQUENCER_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - row.menu("SEQUENCER_MT_view") - - if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}: - row.menu("SEQUENCER_MT_select") - row.menu("SEQUENCER_MT_marker") - row.menu("SEQUENCER_MT_add") - row.menu("SEQUENCER_MT_strip") + SEQUENCER_MT_editor_menus.draw_collapsible(context, layout) layout.prop(st, "view_type", expand=True, text="") @@ -112,6 +105,26 @@ class SEQUENCER_HT_header(Header): layout.template_running_jobs() +class SEQUENCER_MT_editor_menus(Menu): + bl_idname = "SEQUENCER_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + st = context.space_data + + layout.menu("SEQUENCER_MT_view") + + if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}: + layout.menu("SEQUENCER_MT_select") + layout.menu("SEQUENCER_MT_marker") + layout.menu("SEQUENCER_MT_add") + layout.menu("SEQUENCER_MT_strip") + + class SEQUENCER_MT_view_toggle(Menu): bl_label = "View Type" diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py index 32cb1009492..a430fb09165 100644 --- a/release/scripts/startup/bl_ui/space_text.py +++ b/release/scripts/startup/bl_ui/space_text.py @@ -34,21 +34,14 @@ class TEXT_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - row.menu("TEXT_MT_view") - row.menu("TEXT_MT_text") - - if text: - row.menu("TEXT_MT_edit") - row.menu("TEXT_MT_format") - - row.menu("TEXT_MT_templates") + TEXT_MT_editor_menus.draw_collapsible(context, layout) if text and text.is_modified: sub = row.row(align=True) sub.alert = True sub.operator("text.resolve_conflict", text="", icon='HELP') + row = layout.row(align=True) row.template_ID(st, "text", new="text.new", unlink="text.unlink", open="text.open") row = layout.row(align=True) @@ -84,6 +77,28 @@ class TEXT_HT_header(Header): else "Text: Internal") +class TEXT_MT_editor_menus(Menu): + bl_idname = "TEXT_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + st = context.space_data + text = st.text + + layout.menu("TEXT_MT_view") + layout.menu("TEXT_MT_text") + + if text: + layout.menu("TEXT_MT_edit") + layout.menu("TEXT_MT_format") + + layout.menu("TEXT_MT_templates") + + class TEXT_PT_properties(Panel): bl_space_type = 'TEXT_EDITOR' bl_region_type = 'UI' diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py index 4cb67181fdb..c0d55536991 100644 --- a/release/scripts/startup/bl_ui/space_time.py +++ b/release/scripts/startup/bl_ui/space_time.py @@ -34,11 +34,7 @@ class TIME_HT_header(Header): row = layout.row(align=True) row.template_header() - if context.area.show_menus: - row.menu("TIME_MT_view") - row.menu("TIME_MT_marker") - row.menu("TIME_MT_frame") - row.menu("TIME_MT_playback") + TIME_MT_editor_menus.draw_collapsible(context, layout) row = layout.row(align=True) row.prop(scene, "use_preview_range", text="", toggle=True) @@ -96,6 +92,21 @@ class TIME_HT_header(Header): row.operator("anim.keyframe_delete", text="", icon='KEY_DEHLT') +class TIME_MT_editor_menus(Menu): + bl_idname = "TIME_MT_editor_menus" + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + layout.menu("TIME_MT_view") + layout.menu("TIME_MT_marker") + layout.menu("TIME_MT_frame") + layout.menu("TIME_MT_playback") + + class TIME_MT_marker(Menu): bl_label = "Marker" diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 8d4fd47508c..72785fc2c15 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -48,7 +48,7 @@ class USERPREF_HT_header(Header): def draw(self, context): layout = self.layout - layout.template_header(menus=False) + layout.template_header() userpref = context.user_preferences @@ -432,12 +432,12 @@ class USERPREF_PT_system(Panel): col.label(text="Might fail for Mesh editing selection!") col.separator() col.prop(system, "use_region_overlap") - + col.separator() col.label(text="Text Draw Options:") col.prop(system, "use_text_antialiasing") - + col.separator() col.label(text="Textures:") @@ -917,7 +917,7 @@ class USERPREF_PT_file(Panel): col.prop(paths, "save_version") col.prop(paths, "recent_files") col.prop(paths, "use_save_preview_images") - + col.separator() col.label(text="Auto Save:") @@ -1047,7 +1047,7 @@ class USERPREF_PT_input(Panel): sub.row().prop(inputs, "view_rotate_method", expand=True) sub.separator() - + sub.label(text="Zoom Style:") sub.row().prop(inputs, "view_zoom_method", text="") if inputs.view_zoom_method in {'DOLLY', 'CONTINUE'}: diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index cc264eabafd..062345103ef 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -37,47 +37,9 @@ class VIEW3D_HT_header(Header): row = layout.row(align=True) row.template_header() + sub = row.row(align=True) - # Menus - if context.area.show_menus: - sub = row.row(align=True) - - sub.menu("VIEW3D_MT_view") - - # Select Menu - if mode_string in {'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'}: - mesh = obj.data - if mesh.use_paint_mask: - sub.menu("VIEW3D_MT_select_paint_mask") - elif mesh.use_paint_mask_vertex and mode_string == 'PAINT_WEIGHT': - sub.menu("VIEW3D_MT_select_paint_mask_vertex") - elif mode_string not in {'SCULPT'}: - sub.menu("VIEW3D_MT_select_%s" % mode_string.lower()) - - if mode_string == 'OBJECT': - sub.menu("INFO_MT_add", text="Add") - elif mode_string == 'EDIT_MESH': - sub.menu("INFO_MT_mesh_add", text="Add") - elif mode_string == 'EDIT_CURVE': - sub.menu("INFO_MT_curve_add", text="Add") - elif mode_string == 'EDIT_SURFACE': - sub.menu("INFO_MT_surface_add", text="Add") - elif mode_string == 'EDIT_METABALL': - sub.menu("INFO_MT_metaball_add", text="Add") - elif mode_string == 'EDIT_ARMATURE': - sub.menu("INFO_MT_edit_armature_add", text="Add") - - if edit_object: - sub.menu("VIEW3D_MT_edit_%s" % edit_object.type.lower()) - elif obj: - if mode_string not in {'PAINT_TEXTURE'}: - sub.menu("VIEW3D_MT_%s" % mode_string.lower()) - if mode_string in {'SCULPT', 'PAINT_VERTEX', 'PAINT_WEIGHT', 'PAINT_TEXTURE'}: - sub.menu("VIEW3D_MT_brush") - if mode_string == 'SCULPT': - sub.menu("VIEW3D_MT_hide_mask") - else: - sub.menu("VIEW3D_MT_object") + VIEW3D_MT_editor_menus.draw_collapsible(context, layout) # Contains buttons like Mode, Pivot, Manipulator, Layer, Mesh Select Mode... row = layout @@ -143,6 +105,57 @@ class VIEW3D_HT_header(Header): row.operator("pose.paste", text="", icon='PASTEFLIPDOWN').flipped = 1 +class VIEW3D_MT_editor_menus(Menu): + bl_space_type = 'VIEW3D_MT_editor_menus' + bl_label = "" + + def draw(self, context): + self.draw_menus(self.layout, context) + + @staticmethod + def draw_menus(layout, context): + obj = context.active_object + mode_string = context.mode + edit_object = context.edit_object + + layout.menu("VIEW3D_MT_view") + + # Select Menu + if mode_string in {'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'}: + mesh = obj.data + if mesh.use_paint_mask: + layout.menu("VIEW3D_MT_select_paint_mask") + elif mesh.use_paint_mask_vertex and mode_string == 'PAINT_WEIGHT': + layout.menu("VIEW3D_MT_select_paint_mask_vertex") + elif mode_string not in {'EDIT_TEXT', 'SCULPT'}: + layout.menu("VIEW3D_MT_select_%s" % mode_string.lower()) + + if mode_string == 'OBJECT': + layout.menu("INFO_MT_add", text="Add") + elif mode_string == 'EDIT_MESH': + layout.menu("INFO_MT_mesh_add", text="Add") + elif mode_string == 'EDIT_CURVE': + layout.menu("INFO_MT_curve_add", text="Add") + elif mode_string == 'EDIT_SURFACE': + layout.menu("INFO_MT_surface_add", text="Add") + elif mode_string == 'EDIT_METABALL': + layout.menu("INFO_MT_metaball_add", text="Add") + elif mode_string == 'EDIT_ARMATURE': + layout.menu("INFO_MT_edit_armature_add", text="Add") + + if edit_object: + layout.menu("VIEW3D_MT_edit_%s" % edit_object.type.lower()) + elif obj: + if mode_string not in {'PAINT_TEXTURE'}: + layout.menu("VIEW3D_MT_%s" % mode_string.lower()) + if mode_string in {'SCULPT', 'PAINT_VERTEX', 'PAINT_WEIGHT', 'PAINT_TEXTURE'}: + layout.menu("VIEW3D_MT_brush") + if mode_string == 'SCULPT': + layout.menu("VIEW3D_MT_hide_mask") + else: + layout.menu("VIEW3D_MT_object") + + # ********** Menu ********** diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index d80e40d2455..b432e611c56 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -73,7 +73,6 @@ void ED_region_visible_rect(struct ARegion *ar, struct rcti *rect); /* spaces */ void ED_spacetypes_keymap(struct wmKeyConfig *keyconf); int ED_area_header_switchbutton(const struct bContext *C, struct uiBlock *block, int yco); -int ED_area_header_standardbuttons(const struct bContext *C, struct uiBlock *block, int yco); /* areas */ diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index 27205771d1a..dcc526b81d2 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -51,9 +51,7 @@ DEF_ICON(MENU_PANEL) DEF_ICON(BLENDER) DEF_ICON(GRIP) DEF_ICON(DOT) -#ifndef DEF_ICON_BLANK_SKIP - DEF_ICON(BLANK004) -#endif +DEF_ICON(COLLAPSEMENU) DEF_ICON(X) #ifndef DEF_ICON_BLANK_SKIP DEF_ICON(BLANK005) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 3a48e943da2..65811b7c009 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -820,7 +820,7 @@ uiLayout *uiLayoutOverlap(uiLayout *layout); uiBlock *uiLayoutAbsoluteBlock(uiLayout *layout); /* templates */ -void uiTemplateHeader(uiLayout *layout, struct bContext *C, int menus); +void uiTemplateHeader(uiLayout *layout, struct bContext *C); void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname, const char *newop, const char *openop, const char *unlinkop); void uiTemplateIDBrowse(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname, diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 14ec4d5e0f0..0aa9368fc5f 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -91,13 +91,12 @@ void UI_template_fix_linking(void) /********************** Header Template *************************/ -void uiTemplateHeader(uiLayout *layout, bContext *C, int menus) +void uiTemplateHeader(uiLayout *layout, bContext *C) { uiBlock *block; block = uiLayoutAbsoluteBlock(layout); - if (menus) ED_area_header_standardbuttons(C, block, 0); - else ED_area_header_switchbutton(C, block, 0); + ED_area_header_switchbutton(C, block, 0); } /********************** Search Callbacks *************************/ diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 2c691505877..25b6f241d9b 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1533,39 +1533,6 @@ int ED_area_header_switchbutton(const bContext *C, uiBlock *block, int yco) return xco + 1.7 * U.widget_unit; } -int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) -{ - ScrArea *sa = CTX_wm_area(C); - int xco = 0.4 * U.widget_unit; - uiBut *but; - - if (!sa->full) - xco = ED_area_header_switchbutton(C, block, yco); - - uiBlockSetEmboss(block, UI_EMBOSSN); - - if (sa->flag & HEADER_NO_PULLDOWN) { - but = uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0, - ICON_DISCLOSURE_TRI_RIGHT, - xco, yco, U.widget_unit, U.widget_unit * 0.9f, - &(sa->flag), 0, 0, 0, 0, - TIP_("Show pulldown menus")); - } - else { - but = uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0, - ICON_DISCLOSURE_TRI_DOWN, - xco, yco, U.widget_unit, U.widget_unit * 0.9f, - &(sa->flag), 0, 0, 0, 0, - TIP_("Hide pulldown menus")); - } - - uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */ - - uiBlockSetEmboss(block, UI_EMBOSS); - - return xco + U.widget_unit; -} - /************************ standard UI regions ************************/ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, const char *context, int contextnr) diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index f9e366a2646..8b7246b4b90 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -3046,9 +3046,9 @@ static int header_toggle_menus_exec(bContext *C, wmOperator *UNUSED(op)) static void SCREEN_OT_header_toggle_menus(wmOperatorType *ot) { /* identifiers */ - ot->name = "Show/Hide Header Menus"; + ot->name = "Expand/Collapse Header Menus"; ot->idname = "SCREEN_OT_header_toggle_menus"; - ot->description = "Show or hide the header pulldown menus"; + ot->description = "Expand or collapse the header pulldown menus"; /* api callbacks */ ot->exec = header_toggle_menus_exec; @@ -3069,10 +3069,9 @@ void ED_screens_header_tools_menu_create(bContext *C, uiLayout *layout, void *UN else uiItemO(layout, IFACE_("Flip to Top"), ICON_NONE, "SCREEN_OT_header_flip"); - if (sa->flag & HEADER_NO_PULLDOWN) - uiItemO(layout, IFACE_("Show Menus"), ICON_NONE, "SCREEN_OT_header_toggle_menus"); - else - uiItemO(layout, IFACE_("Hide Menus"), ICON_NONE, "SCREEN_OT_header_toggle_menus"); + uiItemO(layout, IFACE_("Collapse Menus"), + (sa->flag & HEADER_NO_PULLDOWN) ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT, + "SCREEN_OT_header_toggle_menus"); uiItemS(layout); diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index f3f31b5dd66..adabc1dd761 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -631,7 +631,6 @@ void RNA_api_ui_layout(StructRNA *srna) /* templates */ func = RNA_def_function(srna, "template_header", "uiTemplateHeader"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); - RNA_def_boolean(func, "menus", true, "", "The header has menus, and should show menu expander"); func = RNA_def_function(srna, "template_ID", "uiTemplateID"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 18422554dce..45b03198a1f 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -465,7 +465,7 @@ struct bTheme *UI_GetTheme(void) {STUB_ASSERT(0); return (struct bTheme *) NULL; /* rna template */ void uiTemplateAnyID(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, char *text) {STUB_ASSERT(0);} void uiTemplatePathBuilder(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, struct PointerRNA *root_ptr, char *text) {STUB_ASSERT(0);} -void uiTemplateHeader(struct uiLayout *layout, struct bContext *C, int menus) {STUB_ASSERT(0);} +void uiTemplateHeader(struct uiLayout *layout, struct bContext *C) {STUB_ASSERT(0);} void uiTemplateID(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, char *newop, char *unlinkop) {STUB_ASSERT(0);} struct uiLayout *uiTemplateModifier(struct uiLayout *layout, struct PointerRNA *ptr) {STUB_ASSERT(0); return (struct uiLayout *) NULL;} struct uiLayout *uiTemplateConstraint(struct uiLayout *layout, struct PointerRNA *ptr) {STUB_ASSERT(0); return (struct uiLayout *) NULL;} |