diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index 5d3a234361..2b903053fe 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -97,6 +97,7 @@ SET(Draft_GUI_tools draftguitools/gui_trackers.py draftguitools/gui_edit.py draftguitools/gui_lineops.py + draftguitools/gui_togglemodes.py draftguitools/README.md ) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index e76434bb95..b59b4dedea 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -80,6 +80,8 @@ import draftguitools.gui_planeproxy from draftguitools.gui_lineops import FinishLine from draftguitools.gui_lineops import CloseLine from draftguitools.gui_lineops import UndoLine +from draftguitools.gui_togglemodes import ToggleConstructionMode +from draftguitools.gui_togglemodes import ToggleContinueMode # import DraftFillet import drafttaskpanels.task_shapestring as task_shapestring import drafttaskpanels.task_scale as task_scale @@ -4124,30 +4126,6 @@ class Scale(Modifier): for ghost in self.ghosts: ghost.finalize() -class ToggleConstructionMode(): - """The Draft_ToggleConstructionMode FreeCAD command definition""" - - def GetResources(self): - return {'Pixmap' : 'Draft_Construction', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleConstructionMode", "Toggle Construction Mode"), - 'Accel' : "C, M", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleConstructionMode", "Toggles the Construction Mode for next objects.")} - - def Activated(self): - FreeCADGui.draftToolBar.constrButton.toggle() - - -class ToggleContinueMode(): - """The Draft_ToggleContinueMode FreeCAD command definition""" - - def GetResources(self): - return {'Pixmap' : 'Draft_Rotate', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleContinueMode", "Toggle Continue Mode"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleContinueMode", "Toggles the Continue Mode for next commands.")} - - def Activated(self): - FreeCADGui.draftToolBar.toggleContinue() - class Drawing(Modifier): """The Draft Drawing command definition""" @@ -5444,8 +5422,6 @@ FreeCADGui.addCommand('Draft_Slope',Draft_Slope()) FreeCADGui.addCommand('Draft_Stretch',Stretch()) # context commands -FreeCADGui.addCommand('Draft_ToggleConstructionMode',ToggleConstructionMode()) -FreeCADGui.addCommand('Draft_ToggleContinueMode',ToggleContinueMode()) FreeCADGui.addCommand('Draft_ApplyStyle',ApplyStyle()) FreeCADGui.addCommand('Draft_ToggleDisplayMode',ToggleDisplayMode()) FreeCADGui.addCommand('Draft_AddToGroup',AddToGroup()) diff --git a/src/Mod/Draft/Resources/Draft.qrc b/src/Mod/Draft/Resources/Draft.qrc index 5e0c16a03b..45efb36c65 100644 --- a/src/Mod/Draft/Resources/Draft.qrc +++ b/src/Mod/Draft/Resources/Draft.qrc @@ -20,6 +20,7 @@ icons/Draft_CircularArray.svg icons/Draft_Clone.svg icons/Draft_Construction.svg + icons/Draft_Continue.svg icons/Draft_CubicBezCurve.svg icons/Draft_Cursor.svg icons/Draft_DelPoint.svg diff --git a/src/Mod/Draft/Resources/icons/Draft_Continue.svg b/src/Mod/Draft/Resources/icons/Draft_Continue.svg new file mode 100644 index 0000000000..519d134230 --- /dev/null +++ b/src/Mod/Draft/Resources/icons/Draft_Continue.svg @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Mon Oct 10 13:44:52 2011 +0000 + + + [vocx] + + + + + FreeCAD LGPL2+ + + + + + FreeCAD + + + FreeCAD/src/Mod/Draft/Resources/icons/Draft_Continue.svg + http://www.freecadweb.org/wiki/index.php?title=Artwork + + + [agryson] Alexander Gryson, [wmayer] + + + + + arrow + double + right + + + A large blue arrow pointing to the right, and another one following it. + + + + + + + + + + diff --git a/src/Mod/Draft/draftguitools/gui_togglemodes.py b/src/Mod/Draft/draftguitools/gui_togglemodes.py new file mode 100644 index 0000000000..e0eb690ae4 --- /dev/null +++ b/src/Mod/Draft/draftguitools/gui_togglemodes.py @@ -0,0 +1,153 @@ +# *************************************************************************** +# * (c) 2009, 2010 Yorik van Havre * +# * (c) 2009, 2010 Ken Cline * +# * (c) 2020 Eliud Cabrera Castillo * +# * * +# * This file is part of the FreeCAD CAx development system. * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * FreeCAD 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 Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with FreeCAD; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** +"""Provides tools to control the mode of other tools in the Draft Workbench. + +For example, a construction mode, and a continue mode to repeat commands. +""" +## @package gui_togglemodes +# \ingroup DRAFT +# \brief Provides certain mode operations of the Draft Workbench. +from PySide.QtCore import QT_TRANSLATE_NOOP + +import FreeCADGui as Gui +import Draft_rc +import draftguitools.gui_base as gui_base +from draftutils.messages import _msg +from draftutils.translate import _tr + +# The module is used to prevent complaints from code checkers (flake8) +True if Draft_rc.__name__ else False + + +class BaseMode(gui_base.GuiCommandSimplest): + """Base class for mode context GuiCommands. + + This is inherited by the other GuiCommand classes to run + a set of similar actions when changing modes. + + It inherits `GuiCommandSimplest` to set up the document + and other behavior. See this class for more information. + """ + + def Activated(self, mode="None"): + """Execute when the command is called. + + Parameters + ---------- + action: str + Indicates the type of mode to switch to. + It can be `'construction'` or `'continue'`. + """ + super().Activated() + + if hasattr(Gui, "draftToolBar"): + _ui = Gui.draftToolBar + else: + _msg(_tr("No active Draft Toolbar.")) + return + + if _ui is not None: + if mode == "construction" and hasattr(_ui, "constrButton"): + _ui.constrButton.toggle() + elif mode == "continue": + _ui.toggleContinue() + + +class ToggleConstructionMode(BaseMode): + """GuiCommand for the Draft_ToggleConstructionMode tool. + + When construction mode is active, the following objects created + will be included in the construction group, and will be drawn + with the specified color and properties. + """ + + def __init__(self): + super().__init__(name=_tr("Construction mode")) + + def GetResources(self): + """Set icon, menu and tooltip.""" + _menu = "Toggle construction mode" + _tip = ("Toggles the Construction mode.\n" + "When this is active, the following objects created " + "will be included in the construction group, " + "and will be drawn with the specified color " + "and properties.") + + d = {'Pixmap': 'Draft_Construction', + 'MenuText': QT_TRANSLATE_NOOP("Draft_ToggleConstructionMode", + _menu), + 'Accel': "C, M", + 'ToolTip': QT_TRANSLATE_NOOP("Draft_ToggleConstructionMode", + _tip)} + return d + + def Activated(self): + """Execute when the command is called. + + It calls the `toggle()` method of the construction button + in the `DraftToolbar` class. + """ + super().Activated(mode="construction") + + +Gui.addCommand('Draft_ToggleConstructionMode', ToggleConstructionMode()) + + +class ToggleContinueMode(BaseMode): + """GuiCommand for the Draft_ToggleContinueMode tool. + + When continue mode is active, any drawing tool that is terminated + will automatically start again. This can be used to draw several + objects one after the other in succession. + """ + + def __init__(self): + super().__init__(name=_tr("Continue mode")) + + def GetResources(self): + """Set icon, menu and tooltip.""" + _menu = "Toggle continue mode" + _tip = ("Toggles the Continue mode.\n" + "When this is active, any drawing tool that is terminated " + "will automatically start again.\n" + "This can be used to draw several objects " + "one after the other in succession.") + + d = {'Pixmap': 'Draft_Continue', + 'MenuText': QT_TRANSLATE_NOOP("Draft_ToggleContinueMode", + _menu), + 'ToolTip': QT_TRANSLATE_NOOP("Draft_ToggleContinueMode", + _tip)} + return d + + def Activated(self): + """Execute when the command is called. + + It calls the `toggleContinue()` method of the `DraftToolbar` class. + """ + super().Activated(mode="continue") + + +Gui.addCommand('Draft_ToggleContinueMode', ToggleContinueMode())