diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 30ef795880..d1a82a251c 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* 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