Draft: General cleanup of the Draft UI
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2009 Yorik van Havre <yorik@uncreated.net> *
|
||||
#* Copyright (c) 2009 Yorik van Havre <yorik@uncreated.net> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
@@ -31,7 +31,7 @@ __url__ = ["http://www.freecadweb.org"]
|
||||
# \brief GUI elements and utilities of the Draft workbench
|
||||
#
|
||||
# This module provides GUI tools for the Draft workbench, such as
|
||||
# toolbars and task panels, and Qt-dependent utilities such as
|
||||
# toolbars and task panels, and Qt-dependent utilities such as
|
||||
# a delayed (todo) commit system
|
||||
|
||||
'''
|
||||
@@ -137,7 +137,7 @@ class todo:
|
||||
itinerary = []
|
||||
commitlist = []
|
||||
afteritinerary = []
|
||||
|
||||
|
||||
@staticmethod
|
||||
def doTasks():
|
||||
#print("debug: doing delayed tasks: commitlist: ",todo.commitlist," itinerary: ",todo.itinerary)
|
||||
@@ -226,9 +226,9 @@ def getDefaultUnit(dim):
|
||||
else:
|
||||
UOM = "xx"
|
||||
return UOM
|
||||
|
||||
|
||||
def makeFormatSpec(decimals=4,dim='Length'):
|
||||
''' return a % format spec with specified decimals for a specified
|
||||
''' return a % format spec with specified decimals for a specified
|
||||
dimension based on on user preference Units Schema'''
|
||||
if dim == 'Length':
|
||||
fmtSpec = "%." + str(decimals) + "f "+ getDefaultUnit('Length')
|
||||
@@ -239,7 +239,7 @@ def makeFormatSpec(decimals=4,dim='Length'):
|
||||
return fmtSpec
|
||||
|
||||
def displayExternal(internValue,decimals=None,dim='Length',showUnit=True,unit=None):
|
||||
'''return an internal value (ie mm) Length or Angle converted for display according
|
||||
'''return an internal value (ie mm) Length or Angle converted for display according
|
||||
to Units Schema in use. Unit can be used to force the value to express in a certain unit'''
|
||||
from FreeCAD import Units
|
||||
if dim == 'Length':
|
||||
@@ -292,7 +292,7 @@ class DraftDockWidget(DraftBaseWidget):
|
||||
self.emit(QtCore.SIGNAL("retranslate()"))
|
||||
else:
|
||||
QtGui.QWidget.changeEvent(self,event)
|
||||
|
||||
|
||||
class DraftLineEdit(QtGui.QLineEdit):
|
||||
"custom QLineEdit widget that has the power to catch Escape keypress"
|
||||
def __init__(self, parent=None):
|
||||
@@ -368,7 +368,7 @@ class DraftToolBar:
|
||||
self.autogroup = None
|
||||
self.isCenterPlane = False
|
||||
self.lastMode = None
|
||||
|
||||
|
||||
if self.taskmode:
|
||||
# add only a dummy widget, since widgets are created on demand
|
||||
self.baseWidget = DraftBaseWidget()
|
||||
@@ -385,7 +385,7 @@ class DraftToolBar:
|
||||
self.tray.hide()
|
||||
|
||||
else:
|
||||
# create the draft Toolbar
|
||||
# create the draft Toolbar
|
||||
self.draftWidget = QtGui.QDockWidget()
|
||||
self.baseWidget = DraftDockWidget()
|
||||
self.draftWidget.setObjectName("draftToolbar")
|
||||
@@ -420,18 +420,21 @@ class DraftToolBar:
|
||||
# General UI setup
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def _pushbutton (self,name, layout, hide=True, icon=None, width=66, checkable=False):
|
||||
def _pushbutton (self,name, layout, hide=True, icon=None, width=None, checkable=False,square=False):
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/General")
|
||||
bsize = p.GetInt("ToolbarIconSize",24)+2
|
||||
isize = p.GetInt("ToolbarIconSize",24)/3*2
|
||||
button = QtGui.QPushButton(self.baseWidget)
|
||||
button.setObjectName(name)
|
||||
button.setMaximumSize(QtCore.QSize(width,bsize))
|
||||
if square:
|
||||
button.setMaximumSize(QtCore.QSize(button.height(),button.height()))
|
||||
button.setFlat(True)
|
||||
#button.setMaximumSize(QtCore.QSize(width,bsize))
|
||||
if hide:
|
||||
button.hide()
|
||||
if icon:
|
||||
button.setIcon(QtGui.QIcon.fromTheme(icon, QtGui.QIcon(':/icons/'+icon+'.svg')))
|
||||
button.setIconSize(QtCore.QSize(isize, isize))
|
||||
#button.setIconSize(QtCore.QSize(isize, isize))
|
||||
if checkable:
|
||||
button.setCheckable(True)
|
||||
button.setChecked(False)
|
||||
@@ -451,8 +454,8 @@ class DraftToolBar:
|
||||
lineedit = DraftLineEdit(self.baseWidget)
|
||||
lineedit.setObjectName(name)
|
||||
if hide: lineedit.hide()
|
||||
if not width: width = 800
|
||||
lineedit.setMaximumSize(QtCore.QSize(width,bsize))
|
||||
#if not width: width = 800
|
||||
#lineedit.setMaximumSize(QtCore.QSize(width,bsize))
|
||||
layout.addWidget(lineedit)
|
||||
return lineedit
|
||||
|
||||
@@ -475,9 +478,9 @@ class DraftToolBar:
|
||||
else:
|
||||
sbox = QtGui.QSpinBox(self.baseWidget)
|
||||
sbox.setObjectName(name)
|
||||
if val: sbox.setValue(val)
|
||||
if vmax: sbox.setMaximum(vmax)
|
||||
if size: sbox.setMaximumSize(QtCore.QSize(size[0],size[1]))
|
||||
if val: sbox.setValue(val)
|
||||
#if size: sbox.setMaximumSize(QtCore.QSize(size[0],size[1]))
|
||||
if hide: sbox.hide()
|
||||
layout.addWidget(sbox)
|
||||
return sbox
|
||||
@@ -495,10 +498,10 @@ class DraftToolBar:
|
||||
cb.setObjectName(name)
|
||||
if hide: cb.hide()
|
||||
layout.addWidget(cb)
|
||||
|
||||
|
||||
def setupToolBar(self,task=False):
|
||||
"sets the draft toolbar up"
|
||||
|
||||
|
||||
# command
|
||||
|
||||
self.promptlabel = self._label("promptlabel", self.layout, hide=task)
|
||||
@@ -537,12 +540,12 @@ class DraftToolBar:
|
||||
self.labelz = self._label("labelz", zl)
|
||||
self.zValue = self._inputfield("zValue", zl)
|
||||
self.zValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
|
||||
self.pointButton = self._pushbutton("addButton", bl, icon="Draft_AddPoint", width=100)
|
||||
|
||||
self.pointButton = self._pushbutton("addButton", bl, icon="Draft_AddPoint")
|
||||
|
||||
# text
|
||||
|
||||
|
||||
self.textValue = self._lineedit("textValue", self.layout)
|
||||
|
||||
|
||||
# additional line controls
|
||||
|
||||
ll = QtGui.QHBoxLayout()
|
||||
@@ -558,28 +561,28 @@ class DraftToolBar:
|
||||
self.angleValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString)
|
||||
|
||||
# shapestring
|
||||
|
||||
|
||||
self.labelSSize = self._label("labelSize", self.layout)
|
||||
self.SSizeValue = self._inputfield("SSizeValue", self.layout) #, width=60)
|
||||
self.SSizeValue = self._inputfield("SSizeValue", self.layout) #, width=60)
|
||||
self.SSizeValue.setText(FreeCAD.Units.Quantity(1,FreeCAD.Units.Length).UserString)
|
||||
self.labelSTrack = self._label("labelTracking", self.layout)
|
||||
self.STrackValue = self._inputfield("STrackValue", self.layout) #, width=60)
|
||||
self.STrackValue = self._inputfield("STrackValue", self.layout) #, width=60)
|
||||
self.STrackValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
|
||||
self.labelSString = self._label("labelString", self.layout)
|
||||
self.SStringValue = self._lineedit("SStringValue", self.layout)
|
||||
self.SStringValue = self._lineedit("SStringValue", self.layout)
|
||||
self.SStringValue.setText("")
|
||||
self.labelFFile = self._label("labelFFile", self.layout)
|
||||
self.FFileValue = self._lineedit("FFileValue", self.layout)
|
||||
self.chooserButton = self._pushbutton("chooserButton", self.layout, width=26)
|
||||
self.chooserButton.setText("...")
|
||||
self.SSize = 1
|
||||
self.STrack = 0
|
||||
|
||||
self.STrack = 0
|
||||
|
||||
# options
|
||||
|
||||
|
||||
fl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(fl)
|
||||
self.numFacesLabel = self._label("numfaceslabel", fl)
|
||||
self.layout.addLayout(fl)
|
||||
self.numFacesLabel = self._label("numfaceslabel", fl)
|
||||
self.numFaces = self._spinbox("numFaces", fl, 3)
|
||||
ol = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(ol)
|
||||
@@ -595,17 +598,39 @@ class DraftToolBar:
|
||||
self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode)
|
||||
self.continueCmd = self._checkbox("continueCmd",self.layout,checked=self.continueMode)
|
||||
self.occOffset = self._checkbox("occOffset",self.layout,checked=False)
|
||||
self.undoButton = self._pushbutton("undoButton", self.layout, icon='Draft_Rotate')
|
||||
self.finishButton = self._pushbutton("finishButton", self.layout, icon='Draft_Finish')
|
||||
self.closeButton = self._pushbutton("closeButton", self.layout, icon='Draft_Lock')
|
||||
self.wipeButton = self._pushbutton("wipeButton", self.layout, icon='Draft_Wipe')
|
||||
self.orientWPButton = self._pushbutton("orientWPButton", self.layout, icon='Draft_SelectPlane')
|
||||
self.selectButton = self._pushbutton("selectButton", self.layout, icon='view-select')
|
||||
self.xyButton = self._pushbutton("xyButton", self.layout,icon="view-top")
|
||||
self.xzButton = self._pushbutton("xzButton", self.layout,icon="view-front")
|
||||
self.yzButton = self._pushbutton("yzButton", self.layout,icon="view-right")
|
||||
self.currentViewButton = self._pushbutton("view", self.layout,icon="view-isometric")
|
||||
self.resetPlaneButton = self._pushbutton("none", self.layout,icon="view-axonometric")
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.undoButton = self._pushbutton("undoButton", bl, icon='Draft_Rotate')
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.finishButton = self._pushbutton("finishButton", bl, icon='Draft_Finish')
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.closeButton = self._pushbutton("closeButton", bl, icon='Draft_Lock')
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.wipeButton = self._pushbutton("wipeButton", bl, icon='Draft_Wipe')
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.orientWPButton = self._pushbutton("orientWPButton", bl, icon='Draft_SelectPlane')
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.selectButton = self._pushbutton("selectButton", bl, icon='view-select')
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.xyButton = self._pushbutton("xyButton", bl,icon="view-top")
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.xzButton = self._pushbutton("xzButton", bl,icon="view-front")
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.yzButton = self._pushbutton("yzButton", bl,icon="view-right")
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.currentViewButton = self._pushbutton("view", bl,icon="view-isometric")
|
||||
bl = QtGui.QHBoxLayout()
|
||||
self.layout.addLayout(bl)
|
||||
self.resetPlaneButton = self._pushbutton("none", bl,icon="view-axonometric")
|
||||
self.isCopy = self._checkbox("isCopy",self.layout,checked=False)
|
||||
self.isSubelementMode = self._checkbox("isSubelementMode",self.layout,checked=False)
|
||||
gl = QtGui.QHBoxLayout()
|
||||
@@ -627,14 +652,14 @@ class DraftToolBar:
|
||||
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
|
||||
QtGui.QSizePolicy.Expanding)
|
||||
self.layout.addItem(spacerItem)
|
||||
|
||||
|
||||
|
||||
QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("valueChanged(double)"),self.changeXValue)
|
||||
QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("valueChanged(double)"),self.changeYValue)
|
||||
QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("valueChanged(double)"),self.changeZValue)
|
||||
QtCore.QObject.connect(self.lengthValue,QtCore.SIGNAL("valueChanged(double)"),self.changeLengthValue)
|
||||
QtCore.QObject.connect(self.angleValue,QtCore.SIGNAL("valueChanged(double)"),self.changeAngleValue)
|
||||
QtCore.QObject.connect(self.angleLock,QtCore.SIGNAL("stateChanged(int)"),self.toggleAngle)
|
||||
QtCore.QObject.connect(self.angleLock,QtCore.SIGNAL("stateChanged(int)"),self.toggleAngle)
|
||||
QtCore.QObject.connect(self.radiusValue,QtCore.SIGNAL("valueChanged(double)"),self.changeRadiusValue)
|
||||
QtCore.QObject.connect(self.offsetValue,QtCore.SIGNAL("valueChanged(double)"),self.changeOffsetValue)
|
||||
QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("returnPressed()"),self.checkx)
|
||||
@@ -674,7 +699,7 @@ class DraftToolBar:
|
||||
QtCore.QObject.connect(self.continueCmd,QtCore.SIGNAL("stateChanged(int)"),self.setContinue)
|
||||
QtCore.QObject.connect(self.isCopy,QtCore.SIGNAL("stateChanged(int)"),self.setCopymode)
|
||||
QtCore.QObject.connect(self.isRelative,QtCore.SIGNAL("stateChanged(int)"),self.setRelative)
|
||||
QtCore.QObject.connect(self.hasFill,QtCore.SIGNAL("stateChanged(int)"),self.setFill)
|
||||
QtCore.QObject.connect(self.hasFill,QtCore.SIGNAL("stateChanged(int)"),self.setFill)
|
||||
QtCore.QObject.connect(self.currentViewButton,QtCore.SIGNAL("clicked()"),self.selectCurrentView)
|
||||
QtCore.QObject.connect(self.resetPlaneButton,QtCore.SIGNAL("clicked()"),self.selectResetPlane)
|
||||
QtCore.QObject.connect(self.baseWidget,QtCore.SIGNAL("resized()"),self.relocate)
|
||||
@@ -688,8 +713,8 @@ class DraftToolBar:
|
||||
QtCore.QObject.connect(self.FFileValue,QtCore.SIGNAL("returnPressed()"),self.validateFile)
|
||||
QtCore.QObject.connect(self.gridValue,QtCore.SIGNAL("textEdited(QString)"),self.setGridSize)
|
||||
QtCore.QObject.connect(self.mainlineValue,QtCore.SIGNAL("valueChanged(int)"),self.setMainline)
|
||||
QtCore.QObject.connect(self.centerPlane,QtCore.SIGNAL("stateChanged(int)"),self.setCenterPlane)
|
||||
|
||||
QtCore.QObject.connect(self.centerPlane,QtCore.SIGNAL("stateChanged(int)"),self.setCenterPlane)
|
||||
|
||||
# following lines can cause a crash and are not needed anymore when using the task panel
|
||||
# http://forum.freecadweb.org/viewtopic.php?f=3&t=6952
|
||||
#QtCore.QObject.connect(self.FFileValue,QtCore.SIGNAL("escaped()"),self.escape)
|
||||
@@ -704,27 +729,27 @@ class DraftToolBar:
|
||||
# if Ui changed to have Size & Track visible at same time, use this
|
||||
#QtCore.QObject.connect(self.SSizeValue,QtCore.SIGNAL("returnPressed()"),self.checkSSize)
|
||||
#QtCore.QObject.connect(self.STrackValue,QtCore.SIGNAL("returnPressed()"),self.checkSTrack)
|
||||
|
||||
|
||||
def setupTray(self):
|
||||
"sets draft tray buttons up"
|
||||
|
||||
self.wplabel = self._pushbutton("wplabel", self.toptray, icon='Draft_SelectPlane',hide=False,width=120)
|
||||
defaultWP = Draft.getParam("defaultWP",0)
|
||||
if defaultWP == 1:
|
||||
self.wplabel.setText("Top")
|
||||
self.wplabel.setText(translate("draft","Top"))
|
||||
elif defaultWP == 2:
|
||||
self.wplabel.setText("Front")
|
||||
self.wplabel.setText(translate("draft","Front"))
|
||||
elif defaultWP == 3:
|
||||
self.wplabel.setText("Side")
|
||||
self.wplabel.setText(translate("draft","Side"))
|
||||
else:
|
||||
self.wplabel.setText("Auto")
|
||||
self.constrButton = self._pushbutton("constrButton", self.toptray, hide=False, icon='Draft_Construction',width=22, checkable=True)
|
||||
self.wplabel.setText(translate("draft","Auto"))
|
||||
self.constrButton = self._pushbutton("constrButton", self.toptray, hide=False, icon='Draft_Construction',checkable=True,square=True)
|
||||
self.constrColor = QtGui.QColor(self.paramconstr)
|
||||
self.colorButton = self._pushbutton("colorButton",self.bottomtray, hide=False,width=22)
|
||||
self.colorButton = self._pushbutton("colorButton",self.bottomtray, hide=False,square=True)
|
||||
self.colorPix = QtGui.QPixmap(16,16)
|
||||
self.colorPix.fill(self.color)
|
||||
self.colorButton.setIcon(QtGui.QIcon(self.colorPix))
|
||||
self.facecolorButton = self._pushbutton("facecolorButton",self.bottomtray, hide=False,width=22)
|
||||
self.facecolorButton = self._pushbutton("facecolorButton",self.bottomtray, hide=False,square=True)
|
||||
self.facecolorPix = QtGui.QPixmap(16,16)
|
||||
self.facecolorPix.fill(self.facecolor)
|
||||
self.facecolorButton.setIcon(QtGui.QIcon(self.facecolorPix))
|
||||
@@ -732,19 +757,10 @@ class DraftToolBar:
|
||||
bsize = p.GetInt("ToolbarIconSize",24)+2
|
||||
self.widthButton = self._spinbox("widthButton", self.bottomtray, val=self.linewidth,hide=False,size=(bsize * 2,bsize))
|
||||
self.widthButton.setSuffix("px")
|
||||
self.fontsizeButton = self._spinbox("fontsizeButton",self.bottomtray, val=self.fontsize,vmax=999, hide=False,double=True,size=(bsize * 3,bsize))
|
||||
self.applyButton = self._pushbutton("applyButton", self.toptray, hide=False, icon='Draft_Apply',width=22)
|
||||
self.fontsizeButton = self._spinbox("fontsizeButton",self.bottomtray, val=self.fontsize,vmax=999, hide=False,double=True,size=(bsize * 4,bsize))
|
||||
self.applyButton = self._pushbutton("applyButton", self.toptray, hide=False, icon='Draft_Apply',square=True)
|
||||
self.autoGroupButton = self._pushbutton("autoGroup",self.bottomtray,icon="Draft_AutoGroup_off",hide=False,width=120)
|
||||
self.autoGroupButton.setText("None")
|
||||
|
||||
self.wplabel.setToolTip(translate("draft", "Current working plane:",utf8_decode=True)+self.wplabel.text())
|
||||
self.constrButton.setToolTip(translate("draft", "Toggle construction mode"))
|
||||
self.colorButton.setToolTip(translate("draft", "Current line color"))
|
||||
self.facecolorButton.setToolTip(translate("draft", "Current face color"))
|
||||
self.widthButton.setToolTip(translate("draft", "Current line width"))
|
||||
self.fontsizeButton.setToolTip(translate("draft", "Current font size"))
|
||||
self.applyButton.setToolTip(translate("draft", "Apply to selected objects"))
|
||||
self.autoGroupButton.setToolTip(translate("draft", "Autogroup off"))
|
||||
|
||||
QtCore.QObject.connect(self.wplabel,QtCore.SIGNAL("pressed()"),self.selectplane)
|
||||
QtCore.QObject.connect(self.colorButton,QtCore.SIGNAL("pressed()"),self.getcol)
|
||||
@@ -755,6 +771,8 @@ class DraftToolBar:
|
||||
QtCore.QObject.connect(self.constrButton,QtCore.SIGNAL("toggled(bool)"),self.toggleConstrMode)
|
||||
QtCore.QObject.connect(self.autoGroupButton,QtCore.SIGNAL("pressed()"),self.runAutoGroup)
|
||||
|
||||
QtCore.QTimer.singleShot(2000,self.retranslateTray) # delay so translations get a chance to load
|
||||
|
||||
def setupStyle(self):
|
||||
style = "#constrButton:Checked {background-color: "
|
||||
style += self.getDefaultColor("constr",rgb=True)+" } "
|
||||
@@ -770,7 +788,7 @@ class DraftToolBar:
|
||||
#---------------------------------------------------------------------------
|
||||
# language tools
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def retranslateUi(self, widget=None):
|
||||
self.promptlabel.setText(translate("draft", "active command:"))
|
||||
self.cmdlabel.setText(translate("draft", "None"))
|
||||
@@ -847,7 +865,8 @@ class DraftToolBar:
|
||||
self.mainlineLabel.setText(translate("draft", "Main line every"))
|
||||
self.mainlineValue.setToolTip(translate("draft", "The number of lines between main lines"))
|
||||
self.centerPlane.setText(translate("draft", "Center plane on view"))
|
||||
|
||||
self.retranslateTray(widget)
|
||||
|
||||
# Update the maximum width of the push buttons
|
||||
maxwidth = 66 # that's the default
|
||||
pb = []
|
||||
@@ -855,16 +874,27 @@ class DraftToolBar:
|
||||
w = self.layout.itemAt(i).widget()
|
||||
if w != None and w.inherits('QPushButton'):
|
||||
pb.append(w)
|
||||
|
||||
|
||||
for i in pb:
|
||||
fm = QtGui.QFontMetrics(i.font())
|
||||
fw = fm.width(i.text())
|
||||
fw = max(fw, maxwidth)
|
||||
|
||||
|
||||
maxwidth = maxwidth + 16 +10 # add icon width and a margin
|
||||
for i in pb:
|
||||
i.setMaximumWidth(maxwidth)
|
||||
|
||||
def retranslateTray(self,widget=None):
|
||||
|
||||
self.wplabel.setToolTip(translate("draft", "Current working plane")+":"+self.wplabel.text())
|
||||
self.constrButton.setToolTip(translate("draft", "Toggle construction mode"))
|
||||
self.colorButton.setToolTip(translate("draft", "Current line color"))
|
||||
self.facecolorButton.setToolTip(translate("draft", "Current face color"))
|
||||
self.widthButton.setToolTip(translate("draft", "Current line width"))
|
||||
self.fontsizeButton.setToolTip(translate("draft", "Current font size"))
|
||||
self.applyButton.setToolTip(translate("draft", "Apply to selected objects"))
|
||||
self.autoGroupButton.setToolTip(translate("draft", "Autogroup off"))
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Interface modes
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -905,11 +935,11 @@ class DraftToolBar:
|
||||
FreeCADGui.Control.closeDialog()
|
||||
todo.delay(FreeCADGui.Control.showDialog,dummy(extra))
|
||||
self.setTitle(title)
|
||||
|
||||
|
||||
def redraw(self):
|
||||
"utility function that is performed after each clicked point"
|
||||
self.checkLocal()
|
||||
|
||||
|
||||
def setFocus(self,f=None):
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")
|
||||
if p.GetBool("focusOnLength",False) and self.lengthValue.isVisible():
|
||||
@@ -921,7 +951,7 @@ class DraftToolBar:
|
||||
elif f=="y":
|
||||
self.yValue.setFocus()
|
||||
self.yValue.selectAll()
|
||||
elif f=="z":
|
||||
elif f=="z":
|
||||
self.zValue.setFocus()
|
||||
self.zValue.selectAll()
|
||||
|
||||
@@ -943,7 +973,7 @@ class DraftToolBar:
|
||||
p = Draft.getParam("gridEvery",10)
|
||||
self.mainlineValue.setValue(p)
|
||||
self.centerPlane.show()
|
||||
|
||||
|
||||
def extraLineUi(self):
|
||||
'''shows length and angle controls'''
|
||||
self.labellength.show()
|
||||
@@ -995,7 +1025,7 @@ class DraftToolBar:
|
||||
self.orientWPButton.show()
|
||||
self.undoButton.show()
|
||||
self.continueCmd.show()
|
||||
|
||||
|
||||
def circleUi(self):
|
||||
self.pointUi(translate("draft", "Circle"),icon="Draft_Circle")
|
||||
self.continueCmd.show()
|
||||
@@ -1032,7 +1062,7 @@ class DraftToolBar:
|
||||
todo.delay(self.setFocus,None)
|
||||
self.xValue.selectAll()
|
||||
self.showCommandOptions(title)
|
||||
|
||||
|
||||
def labelUi(self,title=translate("draft","Label"),callback=None):
|
||||
w = QtGui.QWidget()
|
||||
w.setWindowTitle(translate("draft","Label type", utf8_decode=True))
|
||||
@@ -1114,7 +1144,7 @@ class DraftToolBar:
|
||||
self.mainlineLabel.hide()
|
||||
self.mainlineValue.hide()
|
||||
self.centerPlane.hide()
|
||||
|
||||
|
||||
def trimUi(self,title=translate("draft","Trim")):
|
||||
self.taskUi(title)
|
||||
self.radiusUi()
|
||||
@@ -1139,7 +1169,7 @@ class DraftToolBar:
|
||||
self.textline=0
|
||||
self.continueCmd.show()
|
||||
|
||||
def SSUi(self):
|
||||
def SSUi(self):
|
||||
''' set up ui for ShapeString text entry '''
|
||||
self.hideXYZ()
|
||||
self.labelSString.show()
|
||||
@@ -1166,7 +1196,7 @@ class DraftToolBar:
|
||||
self.STrackValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString)
|
||||
self.STrackValue.show()
|
||||
todo.delay(self.STrackValue.setFocus,None)
|
||||
|
||||
|
||||
def SFileUi(self):
|
||||
''' set up UI for ShapeString font file selection '''
|
||||
self.labelSTrack.hide()
|
||||
@@ -1177,7 +1207,7 @@ class DraftToolBar:
|
||||
self.FFileValue.show()
|
||||
self.chooserButton.show()
|
||||
todo.delay(self.FFileValue.setFocus,None)
|
||||
|
||||
|
||||
def switchUi(self,store=True):
|
||||
if store:
|
||||
self.state = []
|
||||
@@ -1323,7 +1353,7 @@ class DraftToolBar:
|
||||
self.relativeMode = bool(val)
|
||||
if (not self.taskmode) or self.isTaskOn:
|
||||
self.isRelative.show()
|
||||
|
||||
|
||||
def setCopymode(self,val=0):
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")
|
||||
p.SetBool("copymodeValue",bool(val))
|
||||
@@ -1350,7 +1380,7 @@ class DraftToolBar:
|
||||
FreeCADGui.Control.closeDialog()
|
||||
panel = TaskPanel(extra,callback)
|
||||
FreeCADGui.Control.showDialog(panel)
|
||||
|
||||
|
||||
def setGridSize(self,text):
|
||||
"sets the Draft grid to the given grid size"
|
||||
try:
|
||||
@@ -1361,14 +1391,14 @@ class DraftToolBar:
|
||||
Draft.setParam("gridSpacing",q.Value)
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
FreeCADGui.Snapper.setGrid()
|
||||
|
||||
|
||||
def setMainline(self,val):
|
||||
"sets the grid main lines"
|
||||
if val > 1:
|
||||
Draft.setParam("gridEvery",val)
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
FreeCADGui.Snapper.setGrid()
|
||||
|
||||
|
||||
def setCenterPlane(self,val):
|
||||
self.isCenterPlane = bool(val)
|
||||
|
||||
@@ -1438,7 +1468,7 @@ class DraftToolBar:
|
||||
|
||||
def setFill(self,val):
|
||||
self.fillmode = bool(val)
|
||||
|
||||
|
||||
def apply(self):
|
||||
for i in FreeCADGui.Selection.getSelection():
|
||||
Draft.formatObject(i)
|
||||
@@ -1458,7 +1488,7 @@ class DraftToolBar:
|
||||
self.updateSnapper()
|
||||
else:
|
||||
self.validatePoint()
|
||||
|
||||
|
||||
def checkangle(self):
|
||||
self.angleValue.setFocus()
|
||||
self.angleValue.selectAll()
|
||||
@@ -1522,12 +1552,12 @@ class DraftToolBar:
|
||||
|
||||
def validateSNumeric(self):
|
||||
''' send valid numeric parameters to ShapeString '''
|
||||
if self.sourceCmd:
|
||||
if self.sourceCmd:
|
||||
if (self.labelSSize.isVisible()):
|
||||
try:
|
||||
SSize=float(self.SSize)
|
||||
except ValueError:
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Invalid Size value. Using 200.0."))
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Invalid Size value. Using 200.0."))
|
||||
self.sourceCmd.numericSSize(200.0)
|
||||
else:
|
||||
self.sourceCmd.numericSSize(SSize)
|
||||
@@ -1535,39 +1565,39 @@ class DraftToolBar:
|
||||
try:
|
||||
track=int(self.STrack)
|
||||
except ValueError:
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Invalid Tracking value. Using 0."))
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Invalid Tracking value. Using 0."))
|
||||
self.sourceCmd.numericSTrack(0)
|
||||
else:
|
||||
self.sourceCmd.numericSTrack(track)
|
||||
|
||||
def validateSString(self):
|
||||
''' send a valid text string to ShapeString as unicode '''
|
||||
if self.sourceCmd:
|
||||
if self.sourceCmd:
|
||||
if (self.labelSString.isVisible()):
|
||||
if self.SStringValue.text():
|
||||
#print("debug: D_G DraftToolBar.validateSString type(SStringValue.text): " str(type(self.SStringValue.text)))
|
||||
#self.sourceCmd.validSString(str(self.SStringValue.text())) # QString to QByteArray to PyString
|
||||
self.sourceCmd.validSString(self.SStringValue.text()) # PySide returns Unicode from QString
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Please enter a text string."))
|
||||
|
||||
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Please enter a text string."))
|
||||
|
||||
|
||||
def pickFile(self):
|
||||
''' invoke a font file chooser dialog and send result to ShapeString to'''
|
||||
if self.sourceCmd:
|
||||
if self.sourceCmd:
|
||||
if (self.chooserButton.isVisible()):
|
||||
try:
|
||||
dialogCaption = translate("draft", "Select a Font file")
|
||||
dialogDir = os.path.dirname(Draft.getParam("FontFile",)) # reasonable default?
|
||||
dialogFilter = "Fonts (*.ttf *.pfb *.otf);;All files (*.*)"
|
||||
fname = QtGui.QFileDialog.getOpenFileName(self.baseWidget,
|
||||
dialogCaption,
|
||||
dialogCaption,
|
||||
dialogDir,
|
||||
dialogFilter)
|
||||
# fname = utf8_decode(fname[0]) # 1947: utf8_decode fails ('ascii' codec can't encode character)
|
||||
# when fname[0] contains accented chars
|
||||
fname = fname[0].encode('utf8') #TODO: this needs changing for Py3??
|
||||
# accented chars cause "UnicodeEncodeError" failure in DraftGui.todo without
|
||||
# accented chars cause "UnicodeEncodeError" failure in DraftGui.todo without
|
||||
# .encode('utf8')
|
||||
|
||||
except Exception as e:
|
||||
@@ -1577,18 +1607,18 @@ class DraftToolBar:
|
||||
else:
|
||||
if fname[0]:
|
||||
self.FFileValue.setText(fname)
|
||||
self.sourceCmd.validFFile(fname)
|
||||
self.sourceCmd.validFFile(fname)
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("DraftGui.pickFile: no file selected.") # can this happen?
|
||||
|
||||
|
||||
def validateFile(self):
|
||||
''' check and send font file parameter to ShapeString as unicode'''
|
||||
if self.sourceCmd:
|
||||
if self.sourceCmd:
|
||||
if (self.labelFFile.isVisible()):
|
||||
if self.FFileValue.text():
|
||||
self.sourceCmd.validFFile(utf8_decode(self.FFileValue.text())) #QString to PyString
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Please enter a font file."))
|
||||
FreeCAD.Console.PrintMessage(translate("draft", "Please enter a font file."))
|
||||
|
||||
|
||||
def finish(self):
|
||||
@@ -1754,7 +1784,7 @@ class DraftToolBar:
|
||||
k.setFocus()
|
||||
k.selectAll()
|
||||
self.updateSnapper()
|
||||
|
||||
|
||||
def updateSnapper(self):
|
||||
"updates the snapper track line if applicable"
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
@@ -1777,7 +1807,7 @@ class DraftToolBar:
|
||||
def setCurrentText(self,tstr):
|
||||
if (not self.taskmode) or (self.taskmode and self.isTaskOn):
|
||||
self.textValue.setText(tstr)
|
||||
|
||||
|
||||
def sendText(self):
|
||||
'''
|
||||
this function sends the entered text to the active draft command
|
||||
@@ -1843,7 +1873,7 @@ class DraftToolBar:
|
||||
self.zValue.setText(displayExternal(dp.z,None,'Length'))
|
||||
else:
|
||||
self.zValue.setText(displayExternal(dp.z,None,'Length'))
|
||||
|
||||
|
||||
# set length and angle
|
||||
if last and dp and plane:
|
||||
self.lengthValue.setText(displayExternal(dp.Length,None,'Length'))
|
||||
@@ -1856,7 +1886,7 @@ class DraftToolBar:
|
||||
mask = "x"
|
||||
elif a in [90,270,-90]:
|
||||
mask = "y"
|
||||
|
||||
|
||||
# set masks
|
||||
if (mask == "x") or (self.mask == "x"):
|
||||
self.xValue.setEnabled(True)
|
||||
@@ -1878,8 +1908,8 @@ class DraftToolBar:
|
||||
self.yValue.setEnabled(True)
|
||||
self.zValue.setEnabled(True)
|
||||
self.setFocus()
|
||||
|
||||
|
||||
|
||||
|
||||
def getDefaultColor(self,type,rgb=False):
|
||||
"gets color from the preferences or toolbar"
|
||||
r = 0
|
||||
@@ -1903,7 +1933,7 @@ class DraftToolBar:
|
||||
r = color.red()/255.0
|
||||
g = color.green()/255.0
|
||||
b = color.blue()/255.0
|
||||
else:
|
||||
else:
|
||||
print("draft: error: couldn't get a color for ",type," type.")
|
||||
if rgb:
|
||||
return("rgb("+str(int(r*255))+","+str(int(g*255))+","+str(int(b*255))+")")
|
||||
@@ -1913,7 +1943,7 @@ class DraftToolBar:
|
||||
def cross(self,on=True):
|
||||
"deprecated"
|
||||
pass
|
||||
|
||||
|
||||
def toggleConstrMode(self,checked):
|
||||
self.baseWidget.setStyleSheet("#constrButton:Checked {background-color: "+self.getDefaultColor("constr",rgb=True)+" }")
|
||||
self.constrMode = checked
|
||||
@@ -2011,7 +2041,7 @@ class DraftToolBar:
|
||||
|
||||
def setRadiusValue(self,val,unit=None):
|
||||
#print("DEBUG: setRadiusValue val: ", val, " unit: ", unit)
|
||||
if not isinstance(val, (int, float)): #??some code passes strings or ???
|
||||
if not isinstance(val, (int, float)): #??some code passes strings or ???
|
||||
t = val
|
||||
elif unit:
|
||||
t= displayExternal(val,None, unit)
|
||||
@@ -2020,10 +2050,10 @@ class DraftToolBar:
|
||||
t = displayExternal(val,None, None)
|
||||
self.radiusValue.setText(t)
|
||||
self.radiusValue.setFocus()
|
||||
|
||||
|
||||
def runAutoGroup(self):
|
||||
FreeCADGui.runCommand("Draft_AutoGroup")
|
||||
|
||||
|
||||
def setAutoGroup(self,value=None):
|
||||
if value == None:
|
||||
self.autogroup = None
|
||||
@@ -2110,7 +2140,7 @@ class DraftToolBar:
|
||||
|
||||
def changeSTrackValue(self,d):
|
||||
self.STrack = d
|
||||
|
||||
|
||||
def changeLengthValue(self,d):
|
||||
self.lvalue = d
|
||||
v = FreeCAD.Vector(self.x,self.y,self.z)
|
||||
@@ -2125,7 +2155,7 @@ class DraftToolBar:
|
||||
self.xValue.setText(displayExternal(v.x,None,'Length'))
|
||||
self.yValue.setText(displayExternal(v.y,None,'Length'))
|
||||
self.zValue.setText(displayExternal(v.z,None,'Length'))
|
||||
|
||||
|
||||
def changeAngleValue(self,d):
|
||||
self.avalue = d
|
||||
v = FreeCAD.Vector(self.x,self.y,self.z)
|
||||
@@ -2138,7 +2168,7 @@ class DraftToolBar:
|
||||
self.zValue.setText(displayExternal(v.z,None,'Length'))
|
||||
if self.angleLock.isChecked():
|
||||
FreeCADGui.Snapper.setAngle(self.angle)
|
||||
|
||||
|
||||
def toggleAngle(self,b):
|
||||
self.alock = self.angleLock.isChecked()
|
||||
if b:
|
||||
@@ -2175,7 +2205,7 @@ class DraftToolBar:
|
||||
def shouldShow(self):
|
||||
return (FreeCAD.ActiveDocument != None) and (FreeCADGui.Selection.getSelection() != [])
|
||||
|
||||
# OBSOLETE
|
||||
# OBSOLETE
|
||||
#class DraftTrayWatcher:
|
||||
# def __init__(self,traywidget):
|
||||
# self.form = traywidget
|
||||
@@ -2191,10 +2221,10 @@ class DraftToolBar:
|
||||
#self.tray.addLayout(self.bottomtray)
|
||||
#self.setupTray()
|
||||
#self.setupStyle()
|
||||
#w = DraftTrayWatcher(self.traywidget)
|
||||
#w = DraftTrayWatcher(self.traywidget)
|
||||
#FreeCADGui.Control.addTaskWatcher([w,DraftCreateWatcher(),DraftModifyWatcher()])
|
||||
FreeCADGui.Control.addTaskWatcher([DraftCreateWatcher(),DraftModifyWatcher()])
|
||||
|
||||
|
||||
def changeEvent(self, event):
|
||||
if event.type() == QtCore.QEvent.LanguageChange:
|
||||
#print("Language changed!")
|
||||
@@ -2221,12 +2251,12 @@ class DraftToolBar:
|
||||
else:
|
||||
self.draftWidget.setVisible(False)
|
||||
self.draftWidget.toggleViewAction().setVisible(False)
|
||||
|
||||
|
||||
|
||||
|
||||
class FacebinderTaskPanel:
|
||||
'''A TaskPanel for the facebinder'''
|
||||
def __init__(self):
|
||||
|
||||
|
||||
self.obj = None
|
||||
self.form = QtGui.QWidget()
|
||||
self.form.setObjectName("FacebinderTaskPanel")
|
||||
@@ -2275,7 +2305,7 @@ class FacebinderTaskPanel:
|
||||
item = QtGui.QTreeWidgetItem(self.tree)
|
||||
item.setText(0,f[0].Name)
|
||||
item.setIcon(0,QtGui.QIcon(":/icons/Tree_Part.svg"))
|
||||
item.setText(1,subf)
|
||||
item.setText(1,subf)
|
||||
else:
|
||||
item = QtGui.QTreeWidgetItem(self.tree)
|
||||
item.setText(0,f[0].Name)
|
||||
@@ -2385,7 +2415,7 @@ class ScaleTaskPanel:
|
||||
QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("valueChanged(double)"),self.setValue)
|
||||
QtCore.QObject.connect(self.pickrefButton,QtCore.SIGNAL("clicked()"),self.pickRef)
|
||||
self.retranslateUi()
|
||||
|
||||
|
||||
def setValue(self,val=None):
|
||||
if self.lock.isChecked():
|
||||
self.xValue.setValue(val)
|
||||
@@ -2393,7 +2423,7 @@ class ScaleTaskPanel:
|
||||
self.zValue.setValue(val)
|
||||
if self.sourceCmd:
|
||||
self.sourceCmd.scaleGhost(self.xValue.value(),self.yValue.value(),self.zValue.value(),self.relative.isChecked())
|
||||
|
||||
|
||||
def retranslateUi(self,widget=None):
|
||||
self.form.setWindowTitle(QtGui.QApplication.translate("Draft", "Scale", None))
|
||||
self.xLabel.setText(QtGui.QApplication.translate("Draft", "X factor", None))
|
||||
@@ -2469,7 +2499,7 @@ class ShapeStringTaskPanel:
|
||||
loader = FreeCADGui.UiLoader()
|
||||
self.task = loader.load(uiFile)
|
||||
layout.addWidget(self.task)
|
||||
|
||||
|
||||
qStart = FreeCAD.Units.Quantity(0.0, FreeCAD.Units.Length)
|
||||
self.task.sbX.setProperty('rawValue',qStart.Value)
|
||||
self.task.sbX.setProperty('unit',qStart.getUserPreferred()[2])
|
||||
@@ -2539,7 +2569,7 @@ class ShapeStringTaskPanel:
|
||||
z = FreeCAD.Units.Quantity(self.task.sbZ.text()).Value
|
||||
ssBase = FreeCAD.Vector(x,y,z)
|
||||
# this try block is almost identical to the one in DraftTools
|
||||
try:
|
||||
try:
|
||||
qr,sup,points,fil = self.sourceCmd.getStrings()
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.sourceCmd.commit(translate("draft","Create ShapeString"),
|
||||
@@ -2571,6 +2601,6 @@ class ShapeStringTaskPanel:
|
||||
if not hasattr(FreeCADGui,"draftToolBar"):
|
||||
FreeCADGui.draftToolBar = DraftToolBar()
|
||||
#----End of Python Features Definitions----#
|
||||
|
||||
|
||||
if not hasattr(FreeCADGui,"Snapper"):
|
||||
import DraftSnap
|
||||
|
||||
Reference in New Issue
Block a user