From 396251908753275f3374fd44ec9df51fc1c43d7a Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Sat, 25 Aug 2018 17:57:12 -0700 Subject: [PATCH] Added support for property types required for PocketShape settings. --- src/Mod/Path/Gui/Resources/panels/SetupOp.ui | 3 + src/Mod/Path/PathScripts/PathSetupSheet.py | 8 +- src/Mod/Path/PathScripts/PathSetupSheetGui.py | 2 +- .../PathScripts/PathSetupSheetOpPrototype.py | 7 ++ .../PathSetupSheetOpPrototypeGui.py | 79 +++++++++++++++++-- 5 files changed, 90 insertions(+), 9 deletions(-) diff --git a/src/Mod/Path/Gui/Resources/panels/SetupOp.ui b/src/Mod/Path/Gui/Resources/panels/SetupOp.ui index 61c5b8e6f1..7ae33598da 100644 --- a/src/Mod/Path/Gui/Resources/panels/SetupOp.ui +++ b/src/Mod/Path/Gui/Resources/panels/SetupOp.ui @@ -16,6 +16,9 @@ + + QAbstractItemView::AllEditTriggers + true diff --git a/src/Mod/Path/PathScripts/PathSetupSheet.py b/src/Mod/Path/PathScripts/PathSetupSheet.py index e0c9e09cde..2eb8124317 100644 --- a/src/Mod/Path/PathScripts/PathSetupSheet.py +++ b/src/Mod/Path/PathScripts/PathSetupSheet.py @@ -38,7 +38,7 @@ __doc__ = "A container for all default values and job specific configuration val _RegisteredOps = {} -if True: +if False: PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) PathLog.trackModule() else: @@ -195,7 +195,11 @@ class SetupSheet: for propName in op.properties(): prop = OpPropertyName(opName, propName) if hasattr(self.obj, prop): - settings[propName] = getattr(self.obj, prop) + attr = getattr(self.obj, prop) + if hasattr(attr, 'UserString'): + settings[propName] = attr.UserString + else: + settings[propName] = attr attrs[opName] = settings return attrs diff --git a/src/Mod/Path/PathScripts/PathSetupSheetGui.py b/src/Mod/Path/PathScripts/PathSetupSheetGui.py index 78be36f091..5816a471b7 100644 --- a/src/Mod/Path/PathScripts/PathSetupSheetGui.py +++ b/src/Mod/Path/PathScripts/PathSetupSheetGui.py @@ -43,7 +43,7 @@ __doc__ = "Task panel editor for a SetupSheet" def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) -if True: +if False: PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) PathLog.trackModule(PathLog.thisModule()) else: diff --git a/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py b/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py index 05bce5c208..b121edd520 100644 --- a/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py +++ b/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py @@ -78,6 +78,8 @@ class Property(object): def initProperty(self, obj, name): pass + def setValueFromString(self, string): + self.setValue(self.valueFromString(string)) def valueFromString(self, string): return string @@ -102,6 +104,11 @@ class PropertyDistance(Property): def typeString(self): return "Distance" + def displayString(self): + if self.value is None: + return Property.displayString(self) + return self.value.getUserPreferred()[0] + class PropertyPercent(Property): def typeString(self): return "Percent" diff --git a/src/Mod/Path/PathScripts/PathSetupSheetOpPrototypeGui.py b/src/Mod/Path/PathScripts/PathSetupSheetOpPrototypeGui.py index 267c5f8066..10004ad376 100644 --- a/src/Mod/Path/PathScripts/PathSetupSheetOpPrototypeGui.py +++ b/src/Mod/Path/PathScripts/PathSetupSheetOpPrototypeGui.py @@ -42,7 +42,7 @@ __doc__ = "Task panel editor for a SetupSheet" def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) -if True: +if False: PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) PathLog.trackModule(PathLog.thisModule()) else: @@ -70,14 +70,81 @@ class _PropertyEnumEditor(_PropertyEditor): self.prop.setValue(widget.currentText()) +class _PropertyBoolEditor(_PropertyEditor): + def widget(self, parent): + return QtGui.QComboBox(parent) + + def setEditorData(self, widget): + widget.clear() + widget.addItems(['false', 'true']) + if not self.prop.getValue() is None: + index = 1 if self.prop.getValue() else 0 + widget.setCurrentIndex(index) + + def setModelData(self, widget): + self.prop.setValue(widget.currentText() == 'true') + +class _PropertyStringEditor(_PropertyEditor): + + def widget(self, parent): + return QtGui.QLineEdit(parent) + + def setEditorData(self, widget): + text = '' if self.prop.getValue() is None else self.prop.getValue() + widget.setText(text) + + def setModelData(self, widget): + self.prop.setValue(widget.text()) + +class _PropertyDistanceEditor(_PropertyEditor): + def widget(self, parent): + return QtGui.QLineEdit(parent) + + def setEditorData(self, widget): + quantity = self.prop.getValue() + if quantity is None: + quantity = FreeCAD.Units.Quantity(0, FreeCAD.Units.Length) + widget.setText(quantity.getUserPreferred()[0]) + + def setModelData(self, widget): + self.prop.setValue(FreeCAD.Units.Quantity(widget.text())) + +class _PropertyPercentEditor(_PropertyEditor): + def widget(self, parent): + return QtGui.QSpinBox(parent) + + def setEditorData(self, widget): + widget.setRange(0, 100) + value = self.prop.getValue() + if value is None: + value = 0 + widget.setValue(value) + + def setModelData(self, widget): + self.prop.setValue(widget.value()) + +class _PropertyFloatEditor(_PropertyEditor): + + def widget(self, parent): + return QtGui.QDoubleSpinBox(parent) + + def setEditorData(self, widget): + value = self.prop.getValue() + if value is None: + value = 0.0 + widget.setValue(value) + + def setModelData(self, widget): + self.prop.setValue(widget.value()) + _EditorFactory = { PathSetupSheetOpPrototype.Property: None, - PathSetupSheetOpPrototype.PropertyBool: None, - PathSetupSheetOpPrototype.PropertyDistance: None, + PathSetupSheetOpPrototype.PropertyBool: _PropertyBoolEditor, + PathSetupSheetOpPrototype.PropertyDistance: _PropertyDistanceEditor, PathSetupSheetOpPrototype.PropertyEnumeration: _PropertyEnumEditor, - PathSetupSheetOpPrototype.PropertyFloat: None, - PathSetupSheetOpPrototype.PropertyPercent: None, - PathSetupSheetOpPrototype.PropertyString: None, + PathSetupSheetOpPrototype.PropertyFloat: _PropertyFloatEditor, + PathSetupSheetOpPrototype.PropertyPercent: _PropertyPercentEditor, + PathSetupSheetOpPrototype.PropertyString: _PropertyStringEditor, } X = []