diff --git a/src/Mod/Draft/draftutils/init_tools.py b/src/Mod/Draft/draftutils/init_tools.py index 4812575d82..a2c5454db1 100644 --- a/src/Mod/Draft/draftutils/init_tools.py +++ b/src/Mod/Draft/draftutils/init_tools.py @@ -1,5 +1,6 @@ # *************************************************************************** -# * (c) 2020 Eliud Cabrera Castillo * +# * Copyright (c) 2020 Eliud Cabrera Castillo * +# * Copyright (c) 2021 FreeCAD Developers * # * * # * This file is part of the FreeCAD CAx development system. * # * * @@ -20,13 +21,9 @@ # * USA * # * * # *************************************************************************** -"""Provides lists of commands in order to set up toolbars of the workbench. -This module returns lists of commands, so that the toolbars -can be initialized by Draft, and by other workbenches. -These commands should be defined in `DraftTools`, and in the individual -modules in `draftguitools`. -""" +"""Provides functions and lists of commands to set up Draft menus and toolbars.""" + ## @package init_tools # \ingroup draftutils # \brief Provides lists of commands to set up toolbars of the workbench. @@ -48,6 +45,35 @@ def get_draft_drawing_commands(): "Draft_ShapeString","Draft_Hatch"] +# This function replaces get_draft_drawing_commands. +# The "_temp" suffix should be removed when the BIM Workbench has been updated. +def get_draft_drawing_commands_temp(): + """Return the drawing commands list.""" + from draftguitools import gui_arcs + from draftguitools import gui_beziers + arc_group = gui_arcs.ArcGroup + bez_group = gui_beziers.BezierGroup + + return ["Draft_Line", + "Draft_Wire", + "Draft_Fillet", + ([QT_TRANSLATE_NOOP("Draft", "Arc tools")], + list(arc_group.GetCommands(arc_group))), # tuple len=2: submenu + ("Draft_ArcTools", ), # tuple len=1: toolbar flyout + "Draft_Circle", + "Draft_Ellipse", + "Draft_Rectangle", + "Draft_Polygon", + "Draft_BSpline", + ([QT_TRANSLATE_NOOP("Draft", "Bezier tools")], + list(bez_group.GetCommands(bez_group))), + ("Draft_BezierTools", ), + "Draft_Point", + "Draft_Facebinder", + "Draft_ShapeString", + "Draft_Hatch"] + + def get_draft_annotation_commands(): """Return the annotation commands list.""" return ["Draft_Text", "Draft_Dimension", @@ -59,6 +85,8 @@ def get_draft_array_commands(): return ["Draft_ArrayTools"] +# This function has been replaced by get_draft_utility_commands_toolbar. +# It should be removed when the BIM Workbench has been updated. def get_draft_small_commands(): """Return a list with only some utilities.""" return ["Draft_Layer", @@ -92,6 +120,42 @@ def get_draft_modification_commands(): return lst +# This function replaces get_draft_modification_commands. +# The "_temp" suffix should be removed when the BIM Workbench has been updated. +def get_draft_modification_commands_temp(): + """Return the modification commands list.""" + from draftguitools import gui_arrays + arr_group = gui_arrays.ArrayGroup + + return ["Draft_Move", + "Draft_Rotate", + "Draft_Scale", + "Draft_Mirror", + "Draft_Offset", + "Draft_Trimex", + "Draft_Stretch", + "Separator", + "Draft_Clone", + ([QT_TRANSLATE_NOOP("Draft", "Array tools")], + list(arr_group.GetCommands(arr_group))), # tuple len=2: submenu + ("Draft_ArrayTools", ), # tuple len=1: toolbar flyout + "Separator", + "Draft_Edit", + "Draft_SubelementHighlight", + "Separator", + "Draft_Join", + "Draft_Split", + "Draft_Upgrade", + "Draft_Downgrade", + "Separator", + "Draft_WireToBSpline", + "Draft_Draft2Sketch", + "Draft_Slope", + "Draft_FlipDimension", + "Separator", + "Draft_Shape2DView"] + + def get_draft_context_commands(): """Return the context menu commands list.""" return ["Draft_ApplyStyle", "Draft_ToggleDisplayMode", @@ -106,6 +170,8 @@ def get_draft_line_commands(): "Draft_CloseLine"] +# This function has been replaced by get_draft_utility_commands_menu. +# It should be removed when the BIM Workbench has been updated. def get_draft_utility_commands(): """Return the utility commands list.""" return ["Draft_Layer", @@ -116,6 +182,39 @@ def get_draft_utility_commands(): "Draft_AddConstruction"] +def get_draft_utility_commands_menu(): + """Return the utility commands list for the menu.""" + return ["Draft_SetStyle", + "Draft_ApplyStyle", + "Separator", + "Draft_Layer", + "Draft_AddNamedGroup", + "Draft_AddToGroup", + "Draft_SelectGroup", + "Draft_ToggleConstructionMode", + "Draft_AddConstruction", + "Separator", + "Draft_ToggleDisplayMode", + "Draft_ToggleGrid", + "Draft_SelectPlane", + "Draft_WorkingPlaneProxy", + "Separator", + "Draft_Heal", + "Draft_ToggleContinueMode", + "Draft_ShowSnapBar"] + + +def get_draft_utility_commands_toolbar(): + """Return the utility commands list for the toolbar.""" + return ["Draft_Layer", + "Draft_AddNamedGroup", + "Draft_AddToGroup", + "Draft_SelectGroup", + "Draft_AddConstruction", + "Draft_ToggleDisplayMode", + "Draft_WorkingPlaneProxy"] + + def get_draft_snap_commands(): """Return the snapping commands list.""" return ['Draft_Snap_Lock', @@ -130,47 +229,48 @@ def get_draft_snap_commands(): ] -def init_draft_toolbars(workbench): - """Initialize the Draft toolbars. +def init_toolbar(workbench, toolbar, cmd_list): + """Initialize a toolbar. Parameters ---------- workbench: Gui.Workbench - The workbench class on which the commands have to be available. - If called from within the `Initialize` method - of a workbench class defined inside `InitGui.py`, - it can be used as `setup_draft_toolbars(self)`. + The workbench. The commands from cmd_list must be available. + + toolbar: string + The name of the toolbar. + + cmd_list: list of strings or list of strings and tuples + See f.e. the return value of get_draft_drawing_commands_temp. """ - workbench.appendToolbar(QT_TRANSLATE_NOOP("Draft", - "Draft creation tools"), - get_draft_drawing_commands()) - workbench.appendToolbar(QT_TRANSLATE_NOOP("Draft", - "Draft annotation tools"), - get_draft_annotation_commands()) - workbench.appendToolbar(QT_TRANSLATE_NOOP("Draft", - "Draft modification tools"), - get_draft_modification_commands()) + for cmd in cmd_list: + if isinstance(cmd, tuple): + if len(cmd) == 1: + workbench.appendToolbar(toolbar, [cmd[0]]) + else: + workbench.appendToolbar(toolbar, [cmd]) -def init_draft_menus(workbench): - """Initialize the Draft menus. +def init_menu(workbench, menu_list, cmd_list): + """Initialize a menu. Parameters ---------- workbench: Gui.Workbench - The workbench class on which the commands have to be available. - If called from within the `Initialize` method - of a workbench class defined inside `InitGui.py`, - it can be used as `setup_draft_menus(self)`. + The workbench. The commands from cmd_list must be available. + + menu_list: list of strings + The main and optional submenu(s). The commands, and additonal + submenus (if any), are added to the last (sub)menu in the list. + + cmd_list: list of strings or list of strings and tuples + See f.e. the return value of get_draft_drawing_commands_temp. """ - workbench.appendMenu(QT_TRANSLATE_NOOP("Draft", "&Drafting"), - get_draft_drawing_commands()) - workbench.appendMenu(QT_TRANSLATE_NOOP("Draft", "&Annotation"), - get_draft_annotation_commands()) - workbench.appendMenu(QT_TRANSLATE_NOOP("Draft", "&Modification"), - get_draft_modification_commands()) - workbench.appendMenu(QT_TRANSLATE_NOOP("Draft", "&Utilities"), - get_draft_utility_commands() - + get_draft_context_commands()) + for cmd in cmd_list: + if isinstance(cmd, tuple): + if len(cmd) == 2: + workbench.appendMenu(menu_list + cmd[0], cmd[1]) + else: + workbench.appendMenu(menu_list, [cmd]) ## @}