Fixed numeric input in Arch Walls coordinates

This commit is contained in:
Yorik van Havre 2012-02-02 17:53:26 -02:00
parent 8d01d70038
commit 26602b2aa3
3 changed files with 72 additions and 24 deletions

View File

@ -98,7 +98,7 @@ class _CommandWall:
import DraftTrackers import DraftTrackers
self.points = [] self.points = []
self.tracker = DraftTrackers.boxTracker() self.tracker = DraftTrackers.boxTracker()
FreeCADGui.Snapper.getPoint(callback=self.getPoint,extradlg=TaskArchWall()) FreeCADGui.Snapper.getPoint(callback=self.getPoint)
def getPoint(self,point,obj): def getPoint(self,point,obj):
"this function is called by the snapper when it has a 3D point" "this function is called by the snapper when it has a 3D point"

View File

@ -136,7 +136,7 @@ class DraftLineEdit(QtGui.QLineEdit):
QtGui.QLineEdit.keyPressEvent(self, event) QtGui.QLineEdit.keyPressEvent(self, event)
class DraftTaskPanel: class DraftTaskPanel:
def __init__(self,widget,extradlg=None): def __init__(self,widget):
self.form = widget self.form = widget
def getStandardButtons(self): def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Cancel) return int(QtGui.QDialogButtonBox.Cancel)
@ -155,6 +155,7 @@ class DraftToolBar:
self.tray = None self.tray = None
self.sourceCmd = None self.sourceCmd = None
self.cancel = None self.cancel = None
self.pointcallback = None
self.taskmode = Draft.getParam("UiMode") self.taskmode = Draft.getParam("UiMode")
self.paramcolor = Draft.getParam("color")>>8 self.paramcolor = Draft.getParam("color")>>8
self.color = QtGui.QColor(self.paramcolor) self.color = QtGui.QColor(self.paramcolor)
@ -171,7 +172,7 @@ class DraftToolBar:
self.fillmode = Draft.getParam("fillmode") self.fillmode = Draft.getParam("fillmode")
if self.taskmode: 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() self.baseWidget = QtGui.QWidget()
else: else:
# create the draft Toolbar # create the draft Toolbar
@ -250,6 +251,12 @@ class DraftToolBar:
if hide: chk.hide() if hide: chk.hide()
layout.addWidget(chk) layout.addWidget(chk)
return 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): def setupToolBar(self,task=False):
"sets the draft toolbar up" "sets the draft toolbar up"
@ -311,6 +318,21 @@ class DraftToolBar:
self.resetPlaneButton = self._pushbutton("none", self.layout) self.resetPlaneButton = self._pushbutton("none", self.layout)
self.isCopy = self._checkbox("isCopy",self.layout,checked=False) 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 # spacer
if not self.taskmode: if not self.taskmode:
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
@ -463,7 +485,7 @@ class DraftToolBar:
# Interface modes # Interface modes
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
def taskUi(self,title,extradlg=None): def taskUi(self,title,):
if self.taskmode: if self.taskmode:
self.isTaskOn = True self.isTaskOn = True
todo.delay(FreeCADGui.Control.closeDialog,None) todo.delay(FreeCADGui.Control.closeDialog,None)
@ -472,7 +494,7 @@ class DraftToolBar:
self.layout = QtGui.QVBoxLayout(self.baseWidget) self.layout = QtGui.QVBoxLayout(self.baseWidget)
self.setupToolBar(task=True) self.setupToolBar(task=True)
self.retranslateUi(self.baseWidget) self.retranslateUi(self.baseWidget)
self.panel = DraftTaskPanel(self.baseWidget,extradlg) self.panel = DraftTaskPanel(self.baseWidget)
todo.delay(FreeCADGui.Control.showDialog,self.panel) todo.delay(FreeCADGui.Control.showDialog,self.panel)
else: else:
self.setTitle(title) self.setTitle(title)
@ -510,9 +532,10 @@ class DraftToolBar:
self.labelx.setText(translate("draft", "Center X")) self.labelx.setText(translate("draft", "Center X"))
self.continueCmd.show() 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 if cancel: self.cancel = cancel
self.taskUi(title,extradlg) if getcoords: self.pointcallback = getcoords
self.taskUi(title)
self.xValue.setEnabled(True) self.xValue.setEnabled(True)
self.yValue.setEnabled(True) self.yValue.setEnabled(True)
self.labelx.setText(translate("draft", "X")) self.labelx.setText(translate("draft", "X"))
@ -522,9 +545,14 @@ class DraftToolBar:
self.xValue.show() self.xValue.show()
self.yValue.show() self.yValue.show()
self.zValue.show() self.zValue.show()
if rel: self.isRelative.show()
if extra: self.extraUi(extra)
self.xValue.setFocus() self.xValue.setFocus()
self.xValue.selectAll() self.xValue.selectAll()
def extraUi(self):
pass
def offsetUi(self): def offsetUi(self):
self.taskUi(translate("draft","Offset")) self.taskUi(translate("draft","Offset"))
self.radiusUi() self.radiusUi()
@ -537,6 +565,8 @@ class DraftToolBar:
def offUi(self): def offUi(self):
todo.delay(FreeCADGui.Control.closeDialog,None) todo.delay(FreeCADGui.Control.closeDialog,None)
self.cancel = None self.cancel = None
self.sourceCmd = None
self.pointcallback = None
if self.taskmode: if self.taskmode:
self.isTaskOn = False self.isTaskOn = False
self.baseWidget = QtGui.QWidget() self.baseWidget = QtGui.QWidget()
@ -571,7 +601,13 @@ class DraftToolBar:
self.textValue.hide() self.textValue.hide()
self.continueCmd.hide() self.continueCmd.hide()
self.occOffset.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")): def trimUi(self,title=translate("draft","Trim")):
self.taskUi(title) self.taskUi(title)
self.radiusUi() self.radiusUi()
@ -793,7 +829,7 @@ class DraftToolBar:
def validatePoint(self): def validatePoint(self):
"function for checking and sending numbers entered manually" "function for checking and sending numbers entered manually"
if self.sourceCmd != None: if self.sourceCmd or self.pointcallback:
if (self.labelRadius.isVisible()): if (self.labelRadius.isVisible()):
try: try:
rad=float(self.radiusValue.text()) rad=float(self.radiusValue.text())
@ -831,7 +867,10 @@ class DraftToolBar:
numx = v.x numx = v.x
numy = v.y numy = v.y
numz = v.z 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): def finish(self):
"finish button action" "finish button action"

View File

@ -675,23 +675,32 @@ class Snapper:
if movecallback: if movecallback:
movecallback(self.pt) 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): def click(event_cb):
event = event_cb.getEvent() event = event_cb.getEvent()
if event.getButton() == 1: if event.getButton() == 1:
if event.getState() == coin.SoMouseButtonEvent.DOWN: if event.getState() == coin.SoMouseButtonEvent.DOWN:
self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) accept()
self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove)
obj = FreeCADGui.Snapper.lastSnappedObject def accept():
FreeCADGui.Snapper.off() self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick)
self.ui.offUi() self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove)
if self.trackLine: obj = FreeCADGui.Snapper.lastSnappedObject
self.trackLine.off() FreeCADGui.Snapper.off()
if callback: self.ui.offUi()
if len(inspect.getargspec(callback).args) > 2: if self.trackLine:
callback(self.pt,obj) self.trackLine.off()
else: if callback:
callback(self.pt) if len(inspect.getargspec(callback).args) > 2:
self.pt = None callback(self.pt,obj)
else:
callback(self.pt)
self.pt = None
def cancel(): def cancel():
self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick)
@ -704,7 +713,7 @@ class Snapper:
callback(None) callback(None)
# adding 2 callback functions # 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.callbackClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),click)
self.callbackMove = self.view.addEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),move) self.callbackMove = self.view.addEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),move)