Draft: Show in-command shortcuts on buttons and in console

This commit is contained in:
Yorik van Havre
2018-05-14 18:57:28 -03:00
parent 891682a412
commit a711474552

View File

@@ -45,7 +45,6 @@ try:
from PySide import QtCore, QtGui, QtSvg
except ImportError:
FreeCAD.Console.PrintMessage("Error: Python-pyside package must be installed on your system to use the Draft module.")
try:
_encoding = QtGui.QApplication.UnicodeUTF8
@@ -91,6 +90,29 @@ def utf8_decode(text):
except AttributeError:
return text
# in-command shortcut definitions: Shortcut / Translation / related UI control
inCommandShortcuts = {
"Relative": ["R",translate("draft","Relative"), "isRelative"],
"Continue": ["T",translate("draft","Continue"), "continueCmd"],
"Close": ["O",translate("draft","Close"), "closeButton"],
"Copy": ["P",translate("draft","Copy"), "isCopy"],
"Fill": ["L",translate("draft","Fill"), "hasFill"],
"Exit": ["A",translate("draft","Exit"), "finishButton"],
"Snap": ["S",translate("draft","Snap On/Off"), None],
"Increase": ["[",translate("draft","Increase snap radius"), None],
"Decrease": ["]",translate("draft","Decrease snap radius"), None],
"RestrictX": ["X",translate("draft","Restrict X"), None],
"RestrictY": ["Y",translate("draft","Restrict Y"), None],
"RestrictZ": ["Z",translate("draft","Restrict Z"), None],
"SelectEdge": ["E",translate("draft","Select edge"), "selectButton"],
"AddHold": ["Q",translate("draft","Add custom snap point"),None],
"Length": ["H",translate("draft","Length mode"), "lengthValue"],
"Wipe": ["W",translate("draft","Wipe"), "wipeButton"],
"SetWP": ["U",translate("draft","Set Working Plane"), "orientWPButton"]
}
class todo:
''' static todo class, delays execution of functions. Use todo.delay
to schedule geometry manipulation that would crash coin if done in the
@@ -726,17 +748,17 @@ class DraftToolBar:
self.lengthValue.setToolTip(translate("draft", "Length of current segment"))
self.angleValue.setToolTip(translate("draft", "Angle of current segment"))
#self.angleLock.setText(translate("draft", "&Lock"))
self.angleLock.setToolTip(translate("draft", "Check this to lock the current angle (l)"))
self.angleLock.setToolTip(translate("draft", "Check this to lock the current angle")+" ("+inCommandShortcuts["Length"][0]+")")
self.labelRadius.setText(translate("draft", "Radius"))
self.radiusValue.setToolTip(translate("draft", "Radius of Circle"))
self.isRelative.setText(translate("draft", "&Relative"))
self.isRelative.setToolTip(translate("draft", "Coordinates relative to last point or absolute (SPACE)"))
self.hasFill.setText(translate("draft", "F&illed"))
self.hasFill.setToolTip(translate("draft", "Check this if the object should appear as filled, otherwise it will appear as wireframe (i)"))
self.finishButton.setText(translate("draft", "&Finish"))
self.finishButton.setToolTip(translate("draft", "Finishes the current drawing or editing operation (F)"))
self.isRelative.setText(translate("draft", "Relative")+" ("+inCommandShortcuts["Relative"][0]+")")
self.isRelative.setToolTip(translate("draft", "Coordinates relative to last point or absolute"))
self.hasFill.setText(translate("draft", "Filled")+" ("+inCommandShortcuts["Fill"][0]+")")
self.hasFill.setToolTip(translate("draft", "Check this if the object should appear as filled, otherwise it will appear as wireframe"))
self.finishButton.setText(translate("draft", "Finish")+" ("+inCommandShortcuts["Exit"][0]+")")
self.finishButton.setToolTip(translate("draft", "Finishes the current drawing or editing operation"))
self.continueCmd.setToolTip(translate("draft", "If checked, command will not finish until you press the command button again"))
self.continueCmd.setText(translate("draft", "Co&ntinue"))
self.continueCmd.setText(translate("draft", "Continue")+" ("+inCommandShortcuts["Continue"][0]+")")
self.occOffset.setToolTip(translate("draft", "If checked, an OCC-style offset will be performed instead of the classic offset"))
self.occOffset.setText(translate("draft", "&OCC-style offset"))
self.addButton.setToolTip(translate("draft", "Add points to the current object"))
@@ -744,16 +766,16 @@ class DraftToolBar:
self.sharpButton.setToolTip(translate("draft", "Make Bezier node sharp"))
self.tangentButton.setToolTip(translate("draft", "Make Bezier node tangent"))
self.symmetricButton.setToolTip(translate("draft", "Make Bezier node symmetric"))
self.undoButton.setText(translate("draft", "&Undo"))
self.undoButton.setToolTip(translate("draft", "Undo the last segment (CTRL+Z)"))
self.closeButton.setText(translate("draft", "Cl&ose"))
self.closeButton.setToolTip(translate("draft", "Finishes and closes the current line (C)"))
self.wipeButton.setText(translate("draft", "&Wipe"))
self.wipeButton.setToolTip(translate("draft", "Wipes the existing segments of this line and starts again from the last point (W)"))
self.orientWPButton.setText(translate("draft", "&Set WP"))
self.orientWPButton.setToolTip(translate("draft", "Reorients the working plane on the last segment (S)"))
self.selectButton.setText(translate("draft", "&Select edge"))
self.selectButton.setToolTip(translate("draft", "Selects an existing edge to be measured by this dimension (E)"))
self.undoButton.setText(translate("draft", "&Undo (CTRL+Z)"))
self.undoButton.setToolTip(translate("draft", "Undo the last segment"))
self.closeButton.setText(translate("draft", "Close")+" ("+inCommandShortcuts["Close"][0]+")")
self.closeButton.setToolTip(translate("draft", "Finishes and closes the current line"))
self.wipeButton.setText(translate("draft", "Wipe")+" ("+inCommandShortcuts["Wipe"][0]+")")
self.wipeButton.setToolTip(translate("draft", "Wipes the existing segments of this line and starts again from the last point"))
self.orientWPButton.setText(translate("draft", "Set WP")+" ("+inCommandShortcuts["SetWP"][0]+")")
self.orientWPButton.setToolTip(translate("draft", "Reorients the working plane on the last segment"))
self.selectButton.setText(translate("draft", "Select edge")+" ("+inCommandShortcuts["SelectEdge"][0]+")")
self.selectButton.setToolTip(translate("draft", "Selects an existing edge to be measured by this dimension"))
self.numFacesLabel.setText(translate("draft", "Sides"))
self.numFaces.setToolTip(translate("draft", "Number of sides"))
self.offsetLabel.setText(translate("draft", "Offset"))
@@ -767,8 +789,8 @@ class DraftToolBar:
self.currentViewButton.setToolTip(translate("draft", "Select plane perpendicular to the current view"))
self.resetPlaneButton.setText(translate("draft", "Auto"))
self.resetPlaneButton.setToolTip(translate("draft", "Do not project points to a drawing plane"))
self.isCopy.setText(translate("draft", "C&opy"))
self.isCopy.setToolTip(translate("draft", "If checked, objects will be copied instead of moved (O)"))
self.isCopy.setText(translate("draft", "Copy")+" ("+inCommandShortcuts["Copy"][0]+")")
self.isCopy.setToolTip(translate("draft", "If checked, objects will be copied instead of moved"))
self.SStringValue.setToolTip(translate("draft", "Text string to draw"))
self.labelSString.setText(translate("draft", "String"))
self.SSizeValue.setToolTip(translate("draft", "Height of text"))
@@ -960,6 +982,7 @@ class DraftToolBar:
if rel: self.isRelative.show()
todo.delay(self.setFocus,None)
self.xValue.selectAll()
self.showCommandOptions(title)
def labelUi(self,title=translate("draft","Label"),callback=None):
w = QtGui.QWidget()
@@ -1173,7 +1196,26 @@ class DraftToolBar:
def vertUi(self,addmode=True):
self.addButton.setChecked(addmode)
self.delButton.setChecked(not(addmode))
def showCommandOptions(self,name):
cmdstr = "\n"+name+" "+translate("draft","options")+" : "
first = True
for k,v in inCommandShortcuts.items():
if v[2]:
if getattr(self,v[2]).isVisible():
if first:
first = False
else:
cmdstr += ", "
cmdstr += v[0] + ":" + v[1]
else:
if first:
first = False
else:
cmdstr += ", "
cmdstr += v[0] + ":" + v[1]
FreeCAD.Console.PrintMessage(cmdstr+"\n\n")
def checkLocal(self):
"checks if x,y,z coords must be displayed as local or global"
self.labelx.setText(translate("draft", "Global X"))
@@ -1269,7 +1311,7 @@ class DraftToolBar:
#---------------------------------------------------------------------------
# Processing functions
#---------------------------------------------------------------------------
def getcol(self):
"opens a color picker dialog"
self.color=QtGui.QColorDialog.getColor()
@@ -1302,7 +1344,7 @@ class DraftToolBar:
for i in FreeCADGui.Selection.getSelection():
if "ShapeColor" in i.ViewObject.PropertiesList:
i.ViewObject.ShapeColor = col
def setwidth(self,val):
self.linewidth = float(val)
if Draft.getParam("saveonexit",False):
@@ -1537,73 +1579,104 @@ class DraftToolBar:
checks for special characters in the entered coords that mut be
treated as shortcuts
'''
# in-command shortcut definitions
#Relative
#Continue
#Close
#Copy
#Fill
#Exit
#Snap
#Increase
#Decrease
#RestrictX
#RestrictY
#RestrictZ
#SelectEdge
#AddHold
#Length
#Wipe
#SetWP
spec = False
if txt.endswith("r"):
if txt.upper().endswith(inCommandShortcuts["Relative"][0]):
self.isRelative.setChecked(not self.isRelative.isChecked())
self.relativeMode = self.isRelative.isChecked()
spec = True
elif txt.endswith("I"):
elif txt.upper().endswith(inCommandShortcuts["Fill"][0]):
if self.hasFill.isVisible():
self.hasFill.setChecked(not self.hasFill.isChecked())
spec = True
elif txt.endswith("F"):
elif txt.upper().endswith(inCommandShortcuts["Exit"][0]):
if self.finishButton.isVisible():
self.finish()
spec = True
elif txt.endswith("T"):
elif txt.upper().endswith(inCommandShortcuts["Continue"][0]):
self.toggleContinue()
spec = True
elif txt.endswith("w"):
elif txt.upper().endswith(inCommandShortcuts["Wipe"][0]):
self.wipeLine()
spec = True
elif txt.endswith("e"):
elif txt.upper().endswith(inCommandShortcuts["SelectEdge"][0]):
self.selectEdge()
spec = True
elif txt.endswith("s"):
elif txt.upper().endswith(inCommandShortcuts["Snap"][0]):
self.togglesnap()
spec = True
elif txt.endswith("["):
elif txt.upper().endswith(inCommandShortcuts["Increase"][0]):
self.toggleradius(1)
spec = True
elif txt.endswith("]"):
elif txt.upper().endswith(inCommandShortcuts["Decrease"][0]):
self.toggleradius(-1)
spec = True
elif txt.endswith("q"):
elif txt.upper().endswith(inCommandShortcuts["AddHold"][0]):
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.addHoldPoint()
spec = True
elif txt.endswith("x"):
elif txt.upper().endswith(inCommandShortcuts["RestrictX"][0]):
self.constrain("x")
self.displayPoint()
spec = True
elif txt.endswith("y"):
elif txt.upper().endswith(inCommandShortcuts["RestrictY"][0]):
self.constrain("y")
self.displayPoint()
spec = True
elif txt.endswith("z"):
elif txt.upper().endswith(inCommandShortcuts["RestrictZ"][0]):
self.constrain("z")
self.displayPoint()
spec = True
elif txt.endswith("l"):
elif txt.upper().endswith(inCommandShortcuts["Length"][0]):
self.constrain("angle")
self.displayPoint()
spec = True
elif txt.endswith("o"):
elif txt.upper().endswith(inCommandShortcuts["Close"][0]):
if self.closeButton.isVisible():
self.closeLine()
elif self.isCopy.isVisible():
elif txt.upper().endswith(inCommandShortcuts["SetWP"][0]):
self.orientWP()
spec = True
elif txt.upper().endswith(inCommandShortcuts["Copy"][0]):
if self.isCopy.isVisible():
self.isCopy.setChecked(not self.isCopy.isChecked())
spec = True
elif txt.endswith("N"):
if self.continueCmd.isVisible():
self.continueCmd.setChecked(not self.continueCmd.isChecked())
spec = True
if spec:
for i in [self.xValue,self.yValue,self.zValue]:
if (i.property("text") == txt):
i.setProperty("text",txt[:-1])
i.setFocus()
i.selectAll()
for i,k in enumerate([self.xValue,self.yValue,self.zValue,self.lengthValue,self.angleValue]):
if (k.property("text") == txt):
#print "debug:matching:",k.property("text")
if i == 0:
v = FreeCAD.Units.Quantity(self.x,FreeCAD.Units.Length).getUserPreferred()[0]
elif i == 1:
v = FreeCAD.Units.Quantity(self.y,FreeCAD.Units.Length).getUserPreferred()[0]
elif i == 2:
v = FreeCAD.Units.Quantity(self.z,FreeCAD.Units.Length).getUserPreferred()[0]
elif i == 3:
v = FreeCAD.Units.Quantity(self.lvalue,FreeCAD.Units.Length).getUserPreferred()[0]
else:
v = FreeCAD.Units.Quantity(self.avalue,FreeCAD.Units.Angle).getUserPreferred()[0]
k.setProperty("text",v)
k.setFocus()
k.selectAll()
self.updateSnapper()
def updateSnapper(self):
@@ -1772,7 +1845,8 @@ class DraftToolBar:
self.continueMode = not self.continueMode
try:
if hasattr(self,"continueCmd"):
self.continueCmd.toggle()
if self.continueCmd.isVisible():
self.continueCmd.toggle()
if hasattr(self,"panel"):
if hasattr(self.panel,"form"):
if isinstance(self.panel.form,list):
@@ -1954,6 +2028,7 @@ class DraftToolBar:
self.STrack = d
def changeLengthValue(self,d):
self.lvalue = d
v = FreeCAD.Vector(self.x,self.y,self.z)
if not v.Length:
if self.angle: