ToolController Translation cleanup
This commit is contained in:
@@ -22,21 +22,21 @@
|
||||
|
||||
"""Tool Controller defines tool, spindle speed and feed rates for Path Operations"""
|
||||
|
||||
from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
import FreeCAD
|
||||
import Path
|
||||
import PathScripts.PathLog as PathLog
|
||||
import PathScripts.PathPreferences as PathPreferences
|
||||
import PathScripts.PathToolBit as PathToolBit
|
||||
|
||||
from PySide import QtCore
|
||||
|
||||
# PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
|
||||
# PathLog.trackModule(PathLog.thisModule())
|
||||
if False:
|
||||
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
|
||||
PathLog.trackModule(PathLog.thisModule())
|
||||
else:
|
||||
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
|
||||
|
||||
|
||||
# Qt translation handling
|
||||
def translate(context, text, disambig=None):
|
||||
return QtCore.QCoreApplication.translate(context, text, disambig)
|
||||
translate = FreeCAD.Qt.translate
|
||||
|
||||
|
||||
class ToolControllerTemplate:
|
||||
@@ -66,63 +66,88 @@ class ToolController:
|
||||
"App::PropertyIntegerConstraint",
|
||||
"ToolNumber",
|
||||
"Tool",
|
||||
QtCore.QT_TRANSLATE_NOOP("PathToolController", "The active tool"),
|
||||
QT_TRANSLATE_NOOP("App::Property", "The active tool"),
|
||||
)
|
||||
obj.ToolNumber = (0, 0, 10000, 1)
|
||||
obj.addProperty(
|
||||
"App::PropertyFloat",
|
||||
"SpindleSpeed",
|
||||
"Tool",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "The speed of the cutting spindle in RPM"
|
||||
QT_TRANSLATE_NOOP(
|
||||
"App::Property", "The speed of the cutting spindle in RPM"
|
||||
),
|
||||
)
|
||||
obj.addProperty(
|
||||
"App::PropertyEnumeration",
|
||||
"SpindleDir",
|
||||
"Tool",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "Direction of spindle rotation"
|
||||
),
|
||||
QT_TRANSLATE_NOOP("App::Property", "Direction of spindle rotation"),
|
||||
)
|
||||
obj.SpindleDir = ["Forward", "Reverse"]
|
||||
obj.addProperty(
|
||||
"App::PropertySpeed",
|
||||
"VertFeed",
|
||||
"Feed",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "Feed rate for vertical moves in Z"
|
||||
),
|
||||
QT_TRANSLATE_NOOP("App::Property", "Feed rate for vertical moves in Z"),
|
||||
)
|
||||
obj.addProperty(
|
||||
"App::PropertySpeed",
|
||||
"HorizFeed",
|
||||
"Feed",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "Feed rate for horizontal moves"
|
||||
),
|
||||
QT_TRANSLATE_NOOP("App::Property", "Feed rate for horizontal moves"),
|
||||
)
|
||||
obj.addProperty(
|
||||
"App::PropertySpeed",
|
||||
"VertRapid",
|
||||
"Rapid",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "Rapid rate for vertical moves in Z"
|
||||
),
|
||||
QT_TRANSLATE_NOOP("App::Property", "Rapid rate for vertical moves in Z"),
|
||||
)
|
||||
obj.addProperty(
|
||||
"App::PropertySpeed",
|
||||
"HorizRapid",
|
||||
"Rapid",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "Rapid rate for horizontal moves"
|
||||
),
|
||||
QT_TRANSLATE_NOOP("App::Property", "Rapid rate for horizontal moves"),
|
||||
)
|
||||
obj.setEditorMode("Placement", 2)
|
||||
|
||||
for n in self.propertyEnumerations():
|
||||
setattr(obj, n[0], n[1])
|
||||
|
||||
if createTool:
|
||||
self.ensureUseLegacyTool(obj, legacyTool)
|
||||
|
||||
@classmethod
|
||||
def propertyEnumerations(self, dataType="data"):
|
||||
"""helixOpPropertyEnumerations(dataType="data")... return property enumeration lists of specified dataType.
|
||||
Args:
|
||||
dataType = 'data', 'raw', 'translated'
|
||||
Notes:
|
||||
'data' is list of internal string literals used in code
|
||||
'raw' is list of (translated_text, data_string) tuples
|
||||
'translated' is list of translated string literals
|
||||
"""
|
||||
|
||||
# Enumeration lists for App::PropertyEnumeration properties
|
||||
enums = {
|
||||
"SpindleDir": [
|
||||
(translate("Path_ToolController", "Forward"), "Forward"),
|
||||
(translate("Path_ToolController", "Reverse"), "Reverse"),
|
||||
], # this is the direction that the profile runs
|
||||
}
|
||||
|
||||
if dataType == "raw":
|
||||
return enums
|
||||
|
||||
data = list()
|
||||
idx = 0 if dataType == "translated" else 1
|
||||
|
||||
PathLog.debug(enums)
|
||||
|
||||
for k, v in enumerate(enums):
|
||||
data.append((v, [tup[idx] for tup in enums[v]]))
|
||||
PathLog.debug(data)
|
||||
|
||||
return data
|
||||
|
||||
def onDocumentRestored(self, obj):
|
||||
obj.setEditorMode("Placement", 2)
|
||||
|
||||
@@ -192,18 +217,13 @@ class ToolController:
|
||||
)
|
||||
else:
|
||||
PathLog.error(
|
||||
translate(
|
||||
"PathToolController",
|
||||
"Unsupported PathToolController template version %s",
|
||||
"Unsupported PathToolController template version {}".format(
|
||||
template.get(ToolControllerTemplate.Version)
|
||||
)
|
||||
% template.get(ToolControllerTemplate.Version)
|
||||
)
|
||||
else:
|
||||
PathLog.error(
|
||||
translate(
|
||||
"PathToolController",
|
||||
"PathToolController template has no version - corrupted template file?",
|
||||
)
|
||||
"PathToolController template has no version - corrupted template file?"
|
||||
)
|
||||
|
||||
def templateAttrs(self, obj):
|
||||
@@ -290,8 +310,8 @@ class ToolController:
|
||||
"Path::PropertyTool",
|
||||
"Tool",
|
||||
"Base",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "The tool used by this controller"
|
||||
QT_TRANSLATE_NOOP(
|
||||
"App::Property", "The tool used by this controller"
|
||||
),
|
||||
)
|
||||
else:
|
||||
@@ -299,8 +319,8 @@ class ToolController:
|
||||
"App::PropertyLink",
|
||||
"Tool",
|
||||
"Base",
|
||||
QtCore.QT_TRANSLATE_NOOP(
|
||||
"PathToolController", "The tool used by this controller"
|
||||
QT_TRANSLATE_NOOP(
|
||||
"App::Property", "The tool used by this controller"
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
from PySide import QtCore, QtGui
|
||||
from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
import PathGui as PGui # ensure Path/Gui/Resources are loaded
|
||||
@@ -29,8 +31,7 @@ import PathScripts.PathLog as PathLog
|
||||
import PathScripts.PathToolBitGui as PathToolBitGui
|
||||
import PathScripts.PathToolEdit as PathToolEdit
|
||||
import PathScripts.PathUtil as PathUtil
|
||||
|
||||
from PySide import QtCore, QtGui
|
||||
import PathScripts.PathToolController as PathToolController
|
||||
|
||||
# lazily loaded modules
|
||||
from lazy_loader.lazy_loader import LazyLoader
|
||||
@@ -38,9 +39,13 @@ from lazy_loader.lazy_loader import LazyLoader
|
||||
Part = LazyLoader("Part", globals(), "Part")
|
||||
|
||||
|
||||
# Qt translation handling
|
||||
def translate(context, text, disambig=None):
|
||||
return QtCore.QCoreApplication.translate(context, text, disambig)
|
||||
if False:
|
||||
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
|
||||
PathLog.trackModule(PathLog.thisModule())
|
||||
else:
|
||||
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
|
||||
|
||||
translate = FreeCAD.Qt.translate
|
||||
|
||||
|
||||
class ViewProvider:
|
||||
@@ -144,12 +149,10 @@ class CommandPathToolController(object):
|
||||
def GetResources(self):
|
||||
return {
|
||||
"Pixmap": "Path_LengthOffset",
|
||||
"MenuText": QtCore.QT_TRANSLATE_NOOP(
|
||||
"MenuText": QT_TRANSLATE_NOOP(
|
||||
"Path_ToolController", "Add Tool Controller to the Job"
|
||||
),
|
||||
"ToolTip": QtCore.QT_TRANSLATE_NOOP(
|
||||
"Path_ToolController", "Add Tool Controller"
|
||||
),
|
||||
"ToolTip": QT_TRANSLATE_NOOP("Path_ToolController", "Add Tool Controller"),
|
||||
}
|
||||
|
||||
def selectedJob(self):
|
||||
@@ -190,6 +193,12 @@ class ToolControllerEditor(object):
|
||||
self.form.buttonBox.hide()
|
||||
self.obj = obj
|
||||
|
||||
comboToPropertyMap = [("spindleDirection", "SpindleDir")]
|
||||
enumTups = PathToolController.ToolController.propertyEnumerations(
|
||||
dataType="raw"
|
||||
)
|
||||
|
||||
self.populateCombobox(self.form, enumTups, comboToPropertyMap)
|
||||
self.vertFeed = PathGui.QuantitySpinBox(self.form.vertFeed, obj, "VertFeed")
|
||||
self.horizFeed = PathGui.QuantitySpinBox(self.form.horizFeed, obj, "HorizFeed")
|
||||
self.vertRapid = PathGui.QuantitySpinBox(self.form.vertRapid, obj, "VertRapid")
|
||||
@@ -204,6 +213,43 @@ class ToolControllerEditor(object):
|
||||
self.form.toolBox.widget(1).hide()
|
||||
self.form.toolBox.removeItem(1)
|
||||
|
||||
def selectInComboBox(self, name, combo):
|
||||
"""selectInComboBox(name, combo) ...
|
||||
helper function to select a specific value in a combo box."""
|
||||
blocker = QtCore.QSignalBlocker(combo)
|
||||
index = combo.currentIndex() # Save initial index
|
||||
|
||||
# Search using currentData and return if found
|
||||
newindex = combo.findData(name)
|
||||
if newindex >= 0:
|
||||
combo.setCurrentIndex(newindex)
|
||||
return
|
||||
|
||||
# if not found, search using current text
|
||||
newindex = combo.findText(name, QtCore.Qt.MatchFixedString)
|
||||
if newindex >= 0:
|
||||
combo.setCurrentIndex(newindex)
|
||||
return
|
||||
|
||||
# not found, return unchanged
|
||||
combo.setCurrentIndex(index)
|
||||
return
|
||||
|
||||
def populateCombobox(self, form, enumTups, comboBoxesPropertyMap):
|
||||
"""fillComboboxes(form, comboBoxesPropertyMap) ... populate comboboxes with translated enumerations
|
||||
** comboBoxesPropertyMap will be unnecessary if UI files use strict combobox naming protocol.
|
||||
Args:
|
||||
form = UI form
|
||||
enumTups = list of (translated_text, data_string) tuples
|
||||
comboBoxesPropertyMap = list of (translated_text, data_string) tuples
|
||||
"""
|
||||
# Load appropriate enumerations in each combobox
|
||||
for cb, prop in comboBoxesPropertyMap:
|
||||
box = getattr(form, cb) # Get the combobox
|
||||
box.clear() # clear the combobox
|
||||
for text, data in enumTups[prop]: # load enumerations
|
||||
box.addItem(text, data)
|
||||
|
||||
def updateUi(self):
|
||||
tc = self.obj
|
||||
self.form.tcName.setText(tc.Label)
|
||||
@@ -213,11 +259,14 @@ class ToolControllerEditor(object):
|
||||
self.vertFeed.updateSpinBox()
|
||||
self.vertRapid.updateSpinBox()
|
||||
self.form.spindleSpeed.setValue(tc.SpindleSpeed)
|
||||
index = self.form.spindleDirection.findText(
|
||||
tc.SpindleDir, QtCore.Qt.MatchFixedString
|
||||
)
|
||||
if index >= 0:
|
||||
self.form.spindleDirection.setCurrentIndex(index)
|
||||
|
||||
self.selectInComboBox(tc.SpindleDir, self.form.spindleDirection)
|
||||
|
||||
# index = self.form.spindleDirection.findText(
|
||||
# tc.SpindleDir, QtCore.Qt.MatchFixedString
|
||||
# )
|
||||
# if index >= 0:
|
||||
# self.form.spindleDirection.setCurrentIndex(index)
|
||||
|
||||
if self.editor:
|
||||
self.editor.updateUI()
|
||||
@@ -232,14 +281,14 @@ class ToolControllerEditor(object):
|
||||
self.horizRapid.updateProperty()
|
||||
self.vertRapid.updateProperty()
|
||||
tc.SpindleSpeed = self.form.spindleSpeed.value()
|
||||
tc.SpindleDir = self.form.spindleDirection.currentText()
|
||||
tc.SpindleDir = self.form.spindleDirection.currentData()
|
||||
|
||||
if self.editor:
|
||||
self.editor.updateTool()
|
||||
tc.Tool = self.editor.tool
|
||||
|
||||
except Exception as e:
|
||||
PathLog.error(translate("PathToolController", "Error updating TC: %s") % e)
|
||||
PathLog.error("Error updating TC: {}".format(e))
|
||||
|
||||
def refresh(self):
|
||||
self.form.blockSignals(True)
|
||||
|
||||
Reference in New Issue
Block a user