Draft: Change Snap toolbar to standard toolbar

This commit is contained in:
Roy-043
2022-10-27 10:45:48 +02:00
parent ebdd4c9af3
commit 024c50cd4f
7 changed files with 300 additions and 710 deletions

View File

@@ -48,21 +48,21 @@ draft_scales_metrics = ["1:1000", "1:500", "1:250", "1:200", "1:100",
"1:50", "1:25","1:20", "1:10", "1:5","1:2",
"1:1",
"2:1", "5:1", "10:1", "20:1",
translate("draft", "custom"),
translate("draft", "Custom"),
]
draft_scales_arch_imperial = ["1/16in=1ft", "3/32in=1ft", "1/8in=1ft",
"3/16in=1ft", "1/4in=1ft","3/8in=1ft",
"1/2in=1ft", "3/4in=1ft", "1in=1ft",
"1.5in=1ft", "3in=1ft",
translate("draft", "custom"),
translate("draft", "Custom"),
]
draft_scales_eng_imperial = ["1in=10ft", "1in=20ft", "1in=30ft",
"1in=40ft", "1in=50ft", "1in=60ft",
"1in=70ft", "1in=80ft", "1in=90ft",
"1in=100ft",
translate("draft", "custom"),
translate("draft", "Custom"),
]
def get_scales(unit_system = 0):
@@ -136,7 +136,7 @@ def label_to_scale(label):
return scale
except Exception:
err = translate("draft",
"Unable to convert input into a scale factor")
"Unable to convert input into a scale factor")
App.Console.PrintWarning(err)
return None
@@ -149,8 +149,10 @@ def _set_scale(action):
mw = Gui.getMainWindow()
sb = mw.statusBar()
scale_widget = sb.findChild(QtGui.QToolBar,"draft_status_scale_widget")
if action.text() == translate("draft", "custom"):
scale_widget = sb.findChild(QtGui.QToolBar,"draft_scale_widget")
if action.text() == translate("draft", "Custom"):
title_text = translate("draft", "Set custom scale")
dialog_text = translate("draft",
"Set custom annotation scale in format x:x, x=x")
@@ -172,6 +174,7 @@ def _set_scale(action):
#----------------------------------------------------------------------------
# MAIN DRAFT STATUSBAR FUNCTIONS
#----------------------------------------------------------------------------
def init_draft_statusbar_scale():
"""
this function initializes draft statusbar scale widget
@@ -182,7 +185,7 @@ def init_draft_statusbar_scale():
sb = mw.statusBar()
scale_widget = QtGui.QToolBar()
scale_widget.setObjectName("draft_status_scale_widget")
scale_widget.setObjectName("draft_scale_widget")
# get scales list according to system units
draft_scales = get_scales()
@@ -219,121 +222,64 @@ def init_draft_statusbar_snap():
"""
this function initializes draft statusbar snap widget
"""
param = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")
def _spacer():
"""
empty label instead of snap_widget.addSeparator()
"""
label = QtGui.QLabel()
label.setFixedWidth(2)
return label
mw = Gui.getMainWindow()
sb = mw.statusBar()
# SNAP WIDGET - init ----------------------------------------------------
# check if the toolbar is available, without it the required actions
# may be missing:
if mw.findChild(QtGui.QToolBar, "Draft snap") is None:
return
# snap widget:
snap_widget = QtGui.QToolBar()
snap_widget.setObjectName("draft_snap_widget")
snap_widget.setIconSize(QtCore.QSize(16,16))
# GRID BUTTON - init
gridbutton = QtGui.QPushButton(snap_widget)
gridbutton.setIcon(QtGui.QIcon.fromTheme("Draft",
QtGui.QIcon(":/icons/"
"Draft_Grid.svg")))
gridbutton.setToolTip(translate("Draft", "Toggles Grid On/Off"))
gridbutton.setObjectName("Grid_Statusbutton")
gridbutton.setWhatsThis("Draft_ToggleGrid")
gridbutton.setFlat(True)
QtCore.QObject.connect(gridbutton,QtCore.SIGNAL("clicked()"),
lambda f=Gui.doCommand,
arg='Gui.runCommand("Draft_ToggleGrid")':f(arg))
snap_widget.addWidget(gridbutton)
# SNAP BUTTON - init
snappref = param.GetString("snapModes","111111111101111")[0]
snapbutton = QtGui.QPushButton(snap_widget)
snapbutton.setIcon(QtGui.QIcon.fromTheme("Draft",
QtGui.QIcon(":/icons/"
"Snap_Lock.svg")))
snapbutton.setObjectName("Snap_Statusbutton")
snapbutton.setWhatsThis("Draft_ToggleLockSnap")
snapbutton.setToolTip(translate("Draft", "Object snapping"))
snapbutton.setCheckable(True)
snapbutton.setChecked(bool(int(snappref)))
snapbutton.setFlat(True)
snaps_menu = QtGui.QMenu(snapbutton)
snaps_menu.setObjectName("draft_statusbar_snap_toolbar")
snap_gui_commands = get_draft_snap_commands()
if 'Draft_Snap_Ortho' in snap_gui_commands:
snap_gui_commands.remove('Draft_Snap_Ortho')
if 'Draft_Snap_WorkingPlane' in snap_gui_commands:
snap_gui_commands.remove('Draft_Snap_WorkingPlane')
if 'Draft_Snap_Dimensions' in snap_gui_commands:
snap_gui_commands.remove('Draft_Snap_Dimensions')
if 'Draft_ToggleGrid' in snap_gui_commands:
snap_gui_commands.remove('Draft_ToggleGrid')
Gui.Snapper.init_draft_snap_buttons(snap_gui_commands,snaps_menu, "_Statusbutton")
Gui.Snapper.restore_snap_buttons_state(snaps_menu, "_Statusbutton")
snapbutton.setMenu(snaps_menu)
snap_widget.addWidget(snapbutton)
# DIMENSION BUTTON - init
dimpref = param.GetString("snapModes","111111111101111")[13]
dimbutton = QtGui.QPushButton(snap_widget)
dimbutton.setIcon(QtGui.QIcon.fromTheme("Draft",
QtGui.QIcon(":/icons/"
"Snap_Dimensions.svg")))
dimbutton.setToolTip(translate("Draft",
"Toggles Visual Aid Dimensions On/Off"))
dimbutton.setObjectName("Draft_Snap_Dimensions_Statusbutton")
dimbutton.setWhatsThis("Draft_ToggleDimensions")
dimbutton.setFlat(True)
dimbutton.setCheckable(True)
dimbutton.setChecked(bool(int(dimpref)))
QtCore.QObject.connect(dimbutton,QtCore.SIGNAL("clicked()"),
lambda f=Gui.doCommand,
arg='Gui.runCommand("Draft_Snap_Dimensions")':f(arg))
snap_widget.addWidget(dimbutton)
# ORTHO BUTTON - init
ortopref = param.GetString("snapModes","111111111101111")[10]
orthobutton = QtGui.QPushButton(snap_widget)
orthobutton.setIcon(QtGui.QIcon.fromTheme("Draft",
QtGui.QIcon(":/icons/"
"Snap_Ortho.svg")))
orthobutton.setObjectName("Draft_Snap_Ortho"+"_Statusbutton")
orthobutton.setWhatsThis("Draft_ToggleOrtho")
orthobutton.setToolTip(translate("Draft", "Toggles Ortho On/Off"))
orthobutton.setFlat(True)
orthobutton.setCheckable(True)
orthobutton.setChecked(bool(int(ortopref)))
QtCore.QObject.connect(orthobutton,QtCore.SIGNAL("clicked()"),
lambda f=Gui.doCommand,
arg='Gui.runCommand("Draft_Snap_Ortho")':f(arg))
snap_widget.addWidget(orthobutton)
# WORKINGPLANE BUTTON - init
wppref = param.GetString("snapModes","111111111101111")[14]
wpbutton = QtGui.QPushButton(snap_widget)
wpbutton.setIcon(QtGui.QIcon.fromTheme("Draft",
QtGui.QIcon(":/icons/"
"Snap_WorkingPlane.svg")))
wpbutton.setObjectName("Draft_Snap_WorkingPlane_Statusbutton")
wpbutton.setWhatsThis("Draft_ToggleWorkingPlaneSnap")
wpbutton.setToolTip(translate("Draft",
"Toggles Constrain to Working Plane On/Off"))
wpbutton.setFlat(True)
wpbutton.setCheckable(True)
wpbutton.setChecked(bool(int(wppref)))
QtCore.QObject.connect(wpbutton,QtCore.SIGNAL("clicked()"),
lambda f=Gui.doCommand,
arg='Gui.runCommand("Draft_Snap_WorkingPlane")':f(arg))
snap_widget.addWidget(wpbutton)
# add snap widget to the statusbar
sb.insertPermanentWidget(2, snap_widget)
snap_widget.setOrientation(QtCore.Qt.Orientation.Horizontal)
snap_widget.show()
snap_widget.setIconSize(QtCore.QSize(16, 16))
sb.insertPermanentWidget(2, snap_widget)
# grid button:
snap_widget.addAction(Gui.Command.get("Draft_ToggleGrid").getAction()[0])
snap_widget.addWidget(_spacer())
# lock button:
snap_widget.addAction(Gui.Command.get("Draft_Snap_Lock").getAction()[0])
snap_action = snap_widget.children()[-1]
snap_action.setFixedWidth(40) # Widen the button.
snap_widget.addWidget(_spacer())
# dimension button:
snap_widget.addAction(Gui.Command.get("Draft_Snap_Dimensions").getAction()[0])
snap_widget.addWidget(_spacer())
# ortho button:
snap_widget.addAction(Gui.Command.get("Draft_Snap_Ortho").getAction()[0])
snap_widget.addWidget(_spacer())
# working plane button:
snap_widget.addAction(Gui.Command.get("Draft_Snap_WorkingPlane").getAction()[0])
# menu for lock button:
for cmd in get_draft_snap_commands():
if cmd not in ["Separator",
"Draft_ToggleGrid",
"Draft_Snap_Lock", # Is automatically added to the menu anyway.
"Draft_Snap_Dimensions",
"Draft_Snap_Ortho",
"Draft_Snap_WorkingPlane"]:
snap_action.addAction(Gui.Command.get(cmd).getAction()[0])
def show_draft_statusbar():
@@ -346,13 +292,11 @@ def show_draft_statusbar():
sb = mw.statusBar()
if params.GetBool("DisplayStatusbarScaleWidget", True):
scale_widget = sb.findChild(QtGui.QToolBar,
"draft_status_scale_widget")
scale_widget = sb.findChild(QtGui.QToolBar, "draft_scale_widget")
if scale_widget:
scale_widget.show()
else:
scale_widget = mw.findChild(QtGui.QToolBar,
"draft_status_scale_widget")
scale_widget = mw.findChild(QtGui.QToolBar, "draft_scale_widget")
if scale_widget:
sb.insertPermanentWidget(3, scale_widget)
scale_widget.show()
@@ -361,12 +305,12 @@ def show_draft_statusbar():
t.singleShot(500, init_draft_statusbar_scale)
if params.GetBool("DisplayStatusbarSnapWidget", True):
snap_widget = sb.findChild(QtGui.QToolBar,"draft_snap_widget")
snap_widget = sb.findChild(QtGui.QToolBar, "draft_snap_widget")
if snap_widget:
snap_widget.setOrientation(QtCore.Qt.Orientation.Horizontal)
snap_widget.show()
else:
snap_widget = mw.findChild(QtGui.QToolBar,"draft_snap_widget")
snap_widget = mw.findChild(QtGui.QToolBar, "draft_snap_widget")
if snap_widget:
sb.insertPermanentWidget(2, snap_widget)
snap_widget.setOrientation(QtCore.Qt.Orientation.Horizontal)
@@ -384,27 +328,27 @@ def hide_draft_statusbar():
sb = mw.statusBar()
# hide scale widget
scale_widget = sb.findChild(QtGui.QToolBar,
"draft_status_scale_widget")
if scale_widget:
scale_widget.hide()
else:
scale_widget = sb.findChild(QtGui.QToolBar, "draft_scale_widget")
if scale_widget is None:
# when switching workbenches, the toolbar sometimes "jumps"
# out of the status bar to any other dock area...
scale_widget = mw.findChild(QtGui.QToolBar,
"draft_status_scale_widget")
if scale_widget:
scale_widget.hide()
scale_widget = mw.findChild(QtGui.QToolBar, "draft_scale_widget")
if scale_widget:
scale_widget.hide()
# prevent the widget from showing up as a blank item in the toolbar
# area context menu after switching to a different workbench:
scale_widget.toggleViewAction().setVisible(False)
# hide snap widget
snap_widget = sb.findChild(QtGui.QToolBar,"draft_snap_widget")
if snap_widget:
snap_widget.hide()
else:
if snap_widget is None:
# when switching workbenches, the toolbar sometimes "jumps"
# out of the status bar to any other dock area...
snap_widget = mw.findChild(QtGui.QToolBar,"draft_snap_widget")
if snap_widget:
snap_widget.hide()
if snap_widget:
snap_widget.hide()
# prevent the widget from showing up as a blank item in the toolbar
# area context menu after switching to a different workbench:
snap_widget.toggleViewAction().setVisible(False)
## @}

View File

@@ -141,47 +141,26 @@ def get_draft_utility_commands_toolbar():
def get_draft_snap_commands():
"""Return the snapping commands list."""
return ['Draft_Snap_Lock',
'Draft_Snap_Endpoint',
'Draft_Snap_Midpoint',
'Draft_Snap_Center',
'Draft_Snap_Angle',
'Draft_Snap_Intersection',
'Draft_Snap_Perpendicular',
'Draft_Snap_Extension',
'Draft_Snap_Parallel',
'Draft_Snap_Special',
'Draft_Snap_Near',
'Draft_Snap_Ortho',
'Draft_Snap_Grid',
'Draft_Snap_WorkingPlane',
'Draft_Snap_Dimensions',
'Separator',
'Draft_ToggleGrid']
def get_draft_snap_tooltips():
"""Return a dictionary with tooltips for the snapping commands.
For the snapping commands in the default toolbar and in the statusbar the
tooltips from the `GetResources` functions in gui_snaps.py are not used.
"""
return {'Draft_Snap_Lock' : translate('draft', 'Snap Lock'),
'Draft_Snap_Endpoint' : translate('draft', 'Snap Endpoint'),
'Draft_Snap_Midpoint' : translate('draft', 'Snap Midpoint'),
'Draft_Snap_Center' : translate('draft', 'Snap Center'),
'Draft_Snap_Angle' : translate('draft', 'Snap Angle'),
'Draft_Snap_Intersection' : translate('draft', 'Snap Intersection'),
'Draft_Snap_Perpendicular': translate('draft', 'Snap Perpendicular'),
'Draft_Snap_Extension' : translate('draft', 'Snap Extension'),
'Draft_Snap_Parallel' : translate('draft', 'Snap Parallel'),
'Draft_Snap_Special' : translate('draft', 'Snap Special'),
'Draft_Snap_Near' : translate('draft', 'Snap Near'),
'Draft_Snap_Ortho' : translate('draft', 'Snap Ortho'),
'Draft_Snap_Grid' : translate('draft', 'Snap Grid'),
'Draft_Snap_WorkingPlane' : translate('draft', 'Snap WorkingPlane'),
'Draft_Snap_Dimensions' : translate('draft', 'Snap Dimensions'),
'Draft_ToggleGrid' : translate('draft', 'Toggle Draft Grid')}
return ["Draft_Snap_Lock",
"Draft_Snap_Endpoint",
"Draft_Snap_Midpoint",
"Draft_Snap_Center",
"Draft_Snap_Angle",
"Draft_Snap_Intersection",
"Draft_Snap_Perpendicular",
"Draft_Snap_Extension",
"Draft_Snap_Parallel",
"Draft_Snap_Special",
"Draft_Snap_Near",
"Draft_Snap_Ortho",
"Draft_Snap_Grid",
"Draft_Snap_WorkingPlane",
"Draft_Snap_Dimensions",
# "Separator", # Removed: if the Python generated BIM snap toolbar
# is displayed in the Draft WB the separator appears
# after the last button. Can be reinstated when the
# BIM WB has a `normal` snap toolbar as well.
"Draft_ToggleGrid"]
def get_draft_context_commands():