diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index d03a91241..780c70ca3 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -98,7 +98,7 @@ class _CommandWall: import DraftTrackers self.points = [] self.tracker = DraftTrackers.boxTracker() - FreeCADGui.Snapper.getPoint(callback=self.getPoint,extradlg=TaskArchWall()) + FreeCADGui.Snapper.getPoint(callback=self.getPoint) def getPoint(self,point,obj): "this function is called by the snapper when it has a 3D point" diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 8b223c2fa..81f654afd 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -136,7 +136,7 @@ class DraftLineEdit(QtGui.QLineEdit): QtGui.QLineEdit.keyPressEvent(self, event) class DraftTaskPanel: - def __init__(self,widget,extradlg=None): + def __init__(self,widget): self.form = widget def getStandardButtons(self): return int(QtGui.QDialogButtonBox.Cancel) @@ -155,6 +155,7 @@ class DraftToolBar: self.tray = None self.sourceCmd = None self.cancel = None + self.pointcallback = None self.taskmode = Draft.getParam("UiMode") self.paramcolor = Draft.getParam("color")>>8 self.color = QtGui.QColor(self.paramcolor) @@ -171,7 +172,7 @@ class DraftToolBar: self.fillmode = Draft.getParam("fillmode") if self.taskmode: - # only a dummy widget, since widgets are created on demand + # add only a dummy widget, since widgets are created on demand self.baseWidget = QtGui.QWidget() else: # create the draft Toolbar @@ -250,6 +251,12 @@ class DraftToolBar: if hide: chk.hide() layout.addWidget(chk) return chk + + def _combo (self,name,layout,hide=True): + cb = QtGui.QComboBox(self.baseWidget) + cb.setObjectName(name) + if hide: cb.hide() + layout.addWidget(cb) def setupToolBar(self,task=False): "sets the draft toolbar up" @@ -311,6 +318,21 @@ class DraftToolBar: self.resetPlaneButton = self._pushbutton("none", self.layout) self.isCopy = self._checkbox("isCopy",self.layout,checked=False) + # options buttons for other workbenches + + op1 = QtGui.QHBoxLayout() + self.layout.addLayout(op1) + self.labelop1 = self._label("labelop1", op1) + self.valueop1 = self._lineedit("valueop1", op1) + op2 = QtGui.QHBoxLayout() + self.layout.addLayout(op2) + self.labelop2 = self._label("labelop2", op2) + self.valueop2 = self._lineedit("valueop2", op2) + op3 = QtGui.QHBoxLayout() + self.layout.addLayout(op3) + self.labelop3 = self._label("labelop3", op3) + self.valueop3 = self._combo("valueop3", op3) + # spacer if not self.taskmode: spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, @@ -463,7 +485,7 @@ class DraftToolBar: # Interface modes #--------------------------------------------------------------------------- - def taskUi(self,title,extradlg=None): + def taskUi(self,title,): if self.taskmode: self.isTaskOn = True todo.delay(FreeCADGui.Control.closeDialog,None) @@ -472,7 +494,7 @@ class DraftToolBar: self.layout = QtGui.QVBoxLayout(self.baseWidget) self.setupToolBar(task=True) self.retranslateUi(self.baseWidget) - self.panel = DraftTaskPanel(self.baseWidget,extradlg) + self.panel = DraftTaskPanel(self.baseWidget) todo.delay(FreeCADGui.Control.showDialog,self.panel) else: self.setTitle(title) @@ -510,9 +532,10 @@ class DraftToolBar: self.labelx.setText(translate("draft", "Center X")) self.continueCmd.show() - def pointUi(self,title=translate("draft","Point"),cancel=None,extradlg=None): + def pointUi(self,title=translate("draft","Point"),cancel=None,extra=None,getcoords=None,rel=False): if cancel: self.cancel = cancel - self.taskUi(title,extradlg) + if getcoords: self.pointcallback = getcoords + self.taskUi(title) self.xValue.setEnabled(True) self.yValue.setEnabled(True) self.labelx.setText(translate("draft", "X")) @@ -522,9 +545,14 @@ class DraftToolBar: self.xValue.show() self.yValue.show() self.zValue.show() + if rel: self.isRelative.show() + if extra: self.extraUi(extra) self.xValue.setFocus() self.xValue.selectAll() + def extraUi(self): + pass + def offsetUi(self): self.taskUi(translate("draft","Offset")) self.radiusUi() @@ -537,6 +565,8 @@ class DraftToolBar: def offUi(self): todo.delay(FreeCADGui.Control.closeDialog,None) self.cancel = None + self.sourceCmd = None + self.pointcallback = None if self.taskmode: self.isTaskOn = False self.baseWidget = QtGui.QWidget() @@ -571,7 +601,13 @@ class DraftToolBar: self.textValue.hide() self.continueCmd.hide() self.occOffset.hide() - + self.labelop1.hide() + self.valueop1.hide() + self.labelop2.hide() + self.valueop2.hide() + self.labelop3.hide() + self.valueop3.hide() + def trimUi(self,title=translate("draft","Trim")): self.taskUi(title) self.radiusUi() @@ -793,7 +829,7 @@ class DraftToolBar: def validatePoint(self): "function for checking and sending numbers entered manually" - if self.sourceCmd != None: + if self.sourceCmd or self.pointcallback: if (self.labelRadius.isVisible()): try: rad=float(self.radiusValue.text()) @@ -831,7 +867,10 @@ class DraftToolBar: numx = v.x numy = v.y numz = v.z - self.sourceCmd.numericInput(numx,numy,numz) + if self.pointcallback: + self.pointcallback(FreeCAD.Vector(numx,numy,numz),self.isRelative.isChecked()) + else: + self.sourceCmd.numericInput(numx,numy,numz) def finish(self): "finish button action" diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 7742926a4..6535312a5 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -675,23 +675,32 @@ class Snapper: if movecallback: movecallback(self.pt) + def getcoords(point,relative=False): + self.pt = point + if relative and last: + self.pt = last.add(point) + accept() + def click(event_cb): event = event_cb.getEvent() if event.getButton() == 1: if event.getState() == coin.SoMouseButtonEvent.DOWN: - self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) - self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove) - obj = FreeCADGui.Snapper.lastSnappedObject - FreeCADGui.Snapper.off() - self.ui.offUi() - if self.trackLine: - self.trackLine.off() - if callback: - if len(inspect.getargspec(callback).args) > 2: - callback(self.pt,obj) - else: - callback(self.pt) - self.pt = None + accept() + + def accept(): + self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) + self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove) + obj = FreeCADGui.Snapper.lastSnappedObject + FreeCADGui.Snapper.off() + self.ui.offUi() + if self.trackLine: + self.trackLine.off() + if callback: + if len(inspect.getargspec(callback).args) > 2: + callback(self.pt,obj) + else: + callback(self.pt) + self.pt = None def cancel(): self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) @@ -704,7 +713,7 @@ class Snapper: callback(None) # adding 2 callback functions - self.ui.pointUi(cancel=cancel,extradlg=extradlg) + self.ui.pointUi(cancel=cancel,getcoords=getcoords,rel=bool(last)) self.callbackClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),click) self.callbackMove = self.view.addEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),move)