+ fixed bugs when entering manual coords in Draft Taskview mode

git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5146 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
yorikvanhavre 2011-11-17 17:39:03 +00:00
parent 5f3a22073f
commit 3784de7c76
2 changed files with 76 additions and 37 deletions

View File

@ -64,7 +64,10 @@ class todo:
for f, arg in todo.itinerary:
try:
# print "debug: executing",f
f(arg)
if arg:
f(arg)
else:
f()
except:
wrn = "[Draft.todo] Unexpected error:" + sys.exc_info()[0]
FreeCAD.Console.PrintWarning (wrn)
@ -72,10 +75,14 @@ class todo:
if todo.commitlist:
for name,func in todo.commitlist:
# print "debug: committing ",str(name)
name = str(name)
FreeCAD.ActiveDocument.openTransaction(name)
func()
FreeCAD.ActiveDocument.commitTransaction()
try:
name = str(name)
FreeCAD.ActiveDocument.openTransaction(name)
func()
FreeCAD.ActiveDocument.commitTransaction()
except:
wrn = "[Draft.todo] Unexpected error:" + sys.exc_info()[0]
FreeCAD.Console.PrintWarning (wrn)
todo.commitlist = []
@staticmethod
@ -160,6 +167,7 @@ class DraftToolBar:
self.textbuffer = []
self.crossedViews = []
self.isTaskOn = False
self.fillmode = Draft.getParam("fillmode")
if self.taskmode:
# only a dummy widget, since widgets are created on demand
@ -289,7 +297,7 @@ class DraftToolBar:
self.radiusValue = self._lineedit("radiusValue", self.layout, width=60)
self.radiusValue.setText("0.00")
self.isRelative = self._checkbox("isRelative",self.layout,checked=True)
self.hasFill = self._checkbox("hasFill",self.layout,checked=Draft.getParam("fillmode"))
self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode)
self.continueCmd = self._checkbox("continueCmd",self.layout,checked=False)
self.occOffset = self._checkbox("occOffset",self.layout,checked=False)
self.undoButton = self._pushbutton("undoButton", self.layout, icon='Draft_Rotate')
@ -339,6 +347,7 @@ class DraftToolBar:
QtCore.QObject.connect(self.xzButton,QtCore.SIGNAL("clicked()"),self.selectXZ)
QtCore.QObject.connect(self.yzButton,QtCore.SIGNAL("clicked()"),self.selectYZ)
QtCore.QObject.connect(self.continueCmd,QtCore.SIGNAL("stateChanged(int)"),self.setContinue)
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.xValue,QtCore.SIGNAL("escaped()"),self.finish)
@ -527,7 +536,7 @@ class DraftToolBar:
def offUi(self):
if self.taskmode:
self.isTaskOn = False
FreeCADGui.Control.closeDialog()
todo.delay(FreeCADGui.Control.closeDialog,None)
self.baseWidget = QtGui.QWidget()
# print "UI turned off"
else:
@ -662,12 +671,36 @@ class DraftToolBar:
self.addButton.setEnabled(mode)
self.delButton.setEnabled(mode)
def setNextFocus(self):
def isThere(widget):
if widget.isEnabled() and widget.isVisible():
return True
else:
return False
if (not self.taskmode) or self.isTaskOn:
if isThere(self.xValue):
self.xValue.setFocus()
self.xValue.selectAll()
elif isThere(self.yValue):
self.yValue.setFocus()
self.yValue.selectAll()
elif isThere(self.zValue):
self.zValue.setFocus()
self.zValue.selectAll()
elif isThere(self.radiusValue):
self.radiusValue.setFocus()
self.radiusValue.selectAll()
def setRelative(self):
if (not self.taskmode) or self.isTaskOn:
self.isRelative.show()
def relocate(self):
"relocates the right-aligned buttons depending on the toolbar size"
if self.baseWidget.geometry().width() < 400:
self.layout.setDirection(QtGui.QBoxLayout.TopToBottom)
else:
self.layout.setDirection(QtGui.QBoxLayout.LeftToRight)
self.layout.setDirection(QtGui.QBoxLayout.LeftToRight)
#---------------------------------------------------------------------------
@ -726,6 +759,9 @@ class DraftToolBar:
def setContinue(self,val):
self.continueMode = bool(val)
def setFill(self,val):
self.fillmode = bool(val)
def apply(self):
for i in FreeCADGui.Selection.getSelection():
Draft.formatObject(i)

View File

@ -1308,7 +1308,7 @@ class Line(Creator):
if (len(self.node) > 1):
self.commit(translate("draft","Create Wire"),
partial(Draft.makeWire,self.node,closed,
face=self.ui.hasFill.isChecked(),support=self.support))
face=self.ui.fillmode,support=self.support))
if self.ui:
self.linetrack.finalize()
self.constraintrack.finalize()
@ -1416,16 +1416,7 @@ class Line(Creator):
self.drawSegment(point)
if (not self.isWire and len(self.node) == 2):
self.finish(False,cont=True)
if self.ui.xValue.isEnabled():
self.ui.xValue.setFocus()
self.ui.xValue.selectAll()
elif self.ui.yValue.isEnabled():
self.ui.yValue.setFocus()
self.ui.yValue.selectAll()
else:
self.ui.zValue.setFocus()
self.ui.zValue.selectAll()
self.ui.setNextFocus()
class Wire(Line):
"a FreeCAD command for creating a wire"
@ -1520,9 +1511,12 @@ class BSpline(Line):
if (len(self.node) > 1):
old = self.obj.Name
self.doc.removeObject(old)
self.commit(translate("draft","Create BSpline"),
partial(Draft.makeBSpline,self.node,closed,
face=self.ui.hasFill.isChecked(),support=self.support))
try:
self.commit(translate("draft","Create BSpline"),
partial(Draft.makeBSpline,self.node,closed,
face=self.ui.fillmode,support=self.support))
except:
print "Draft: error delaying commit"
if self.ui:
self.bsplinetrack.finalize()
self.constraintrack.finalize()
@ -1632,10 +1626,14 @@ class Rectangle(Creator):
if abs(fcvec.angle(p2.sub(p1),plane.v,plane.axis)) > 1: height = -height
p = plane.getRotation()
p.move(p1)
self.commit(translate("draft","Create Rectangle"),
partial(Draft.makeRectangle,length,height,
p,self.ui.hasFill.isChecked(),support=self.support))
try:
self.commit(translate("draft","Create Rectangle"),
partial(Draft.makeRectangle,length,height,
p,self.ui.fillmode,support=self.support))
except:
print "Draft: error delaying commit"
self.finish(cont=True)
print "all done"
def action(self,arg):
"scene event handler"
@ -1667,7 +1665,7 @@ class Rectangle(Creator):
self.createObject()
else:
msg(translate("draft", "Pick opposite point:\n"))
self.ui.isRelative.show()
self.ui.setRelative()
self.rect.setorigin(point)
self.rect.on()
self.planetrack.set(point)
@ -1903,17 +1901,22 @@ class Arc(Creator):
p = plane.getRotation()
p.move(self.center)
if self.closedCircle:
self.commit(translate("draft","Create Circle"),
partial(Draft.makeCircle,self.rad,p,
self.ui.hasFill.isChecked(),support=self.support))
try:
self.commit(translate("draft","Create Circle"),
partial(Draft.makeCircle,self.rad,p,
self.ui.fillmode,support=self.support))
except:
print "Draft: error delaying commit"
else:
sta = math.degrees(self.firstangle)
end = math.degrees(self.firstangle+self.angle)
print "debug:",sta, end
if end < sta: sta,end = end,sta
self.commit(translate("draft","Create Arc"),
partial(Draft.makeCircle,self.rad,p,self.ui.hasFill.isChecked(),
sta,end,support=self.support))
try:
self.commit(translate("draft","Create Arc"),
partial(Draft.makeCircle,self.rad,p,self.ui.fillmode,
sta,end,support=self.support))
except:
print "Draft: error delaying commit"
self.finish(cont=True)
def numericInput(self,numx,numy,numz):
@ -1924,7 +1927,7 @@ class Arc(Creator):
self.arctrack.on()
self.ui.radiusUi()
self.step = 1
self.ui.radiusValue.setFocus()
self.ui.setNextFocus()
msg(translate("draft", "Pick radius:\n"))
def numericRadius(self,rad):
@ -1948,14 +1951,14 @@ class Arc(Creator):
else:
self.step = 2
self.arctrack.setCenter(self.center)
self.ui.labelRadius.setText("Start angle")
self.ui.labelRadius.setText(str(translate("draft", "Start Angle")))
self.linetrack.p1(self.center)
self.linetrack.on()
self.ui.radiusValue.setText("")
self.ui.radiusValue.setFocus()
msg(translate("draft", "Pick start angle:\n"))
elif (self.step == 2):
self.ui.labelRadius.setText("Aperture")
self.ui.labelRadius.setText(str(translate("draft", "Aperture")))
self.firstangle = math.radians(rad)
if fcvec.equals(plane.axis, Vector(1,0,0)): u = Vector(0,self.rad,0)
else: u = fcvec.scaleTo(Vector(1,0,0).cross(plane.axis), self.rad)
@ -2143,7 +2146,7 @@ class Polygon(Creator):
p.move(self.center)
self.commit(translate("draft","Create Polygon"),
partial(Draft.makePolygon,self.ui.numFaces.value(),self.rad,
True,p,face=self.ui.hasFill.isChecked(),support=self.support))
True,p,face=self.ui.fillmode,support=self.support))
self.finish(cont=True)
def numericInput(self,numx,numy,numz):