diff --git a/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py b/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py index 5f169d3df5..a162bb4e04 100644 --- a/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py +++ b/src/Mod/Path/PathScripts/PathSetupSheetOpPrototype.py @@ -143,7 +143,7 @@ class PropertyString(Property): return "String" class PropertyMap(Property): - def typeString(self) + def typeString(self): return "Map" def displayString(self, value): diff --git a/src/Mod/Path/PathScripts/PathToolBit.py b/src/Mod/Path/PathScripts/PathToolBit.py index 6f596e191b..5f40fc6219 100644 --- a/src/Mod/Path/PathScripts/PathToolBit.py +++ b/src/Mod/Path/PathScripts/PathToolBit.py @@ -41,8 +41,8 @@ __author__ = "sliptonic (Brad Collette)" __url__ = "http://www.freecadweb.org" __doc__ = "Class to deal with and represent a tool bit." -#PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) -#PathLog.trackModule() +# PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) +# PathLog.trackModule() def translate(context, text, disambig=None): return PySide.QtCore.QCoreApplication.translate(context, text, disambig) @@ -304,6 +304,7 @@ class ToolBit(object): return None def saveToFile(self, obj, path, setFile=True): + print('were saving now') try: with open(path, 'w') as fp: json.dump(self.shapeAttrs(obj), fp, indent=' ') @@ -329,7 +330,11 @@ class ToolBit(object): params = {} for name in self.propertyNamesAttribute(obj): print(f"shapeattr {name}") - params[name] = PathUtil.getPropertyValueString(obj, name) + if name == "UserAttributes": + for key, value in obj.UserAttributes.items(): + params[key] = value + else: + params[name] = PathUtil.getPropertyValueString(obj, name) attrs['attribute'] = params return attrs @@ -346,7 +351,7 @@ class AttributePrototype(PathSetupSheetOpPrototype.OpPrototype): self.addProperty('App::PropertyDistance', 'LengthOffset', PropertyGroupAttribute, translate('PathToolBit', 'Length offset in Z direction')) self.addProperty('App::PropertyInteger', 'Flutes', PropertyGroupAttribute, translate('PathToolBit', 'The number of flutes')) self.addProperty('App::PropertyDistance', 'ChipLoad', PropertyGroupAttribute, translate('PathToolBit', 'Chipload as per manufacturer')) - # self.addProperty('App::PropertyMap', 'UserAttributes', PropertyGroupAttribute, translate('PathTooolBit', 'User Defined Values')) + self.addProperty('App::PropertyMap', 'UserAttributes', PropertyGroupAttribute, translate('PathTooolBit', 'User Defined Values')) class ToolBitFactory(object): @@ -364,18 +369,22 @@ class ToolBitFactory(object): proto = AttributePrototype() uservals = {} for pname in params: + print(f"pname: {pname}") try: prop = proto.getProperty(pname) val = prop.valueFromString(params[pname]) prop.setupProperty(obj, pname, PropertyGroupAttribute, prop.valueFromString(params[pname])) except: - prop = obj.addProperty('App::PropertyString', pname, "Attribute", translate('PathTooolBit', 'User Defined Value')) - setattr(obj, pname, params[pname]) - #prop = proto.getProperty("UserAttributes") - #uservals.update({pname: params[pname]}) - #prop = .setupPropertyobj, pname, "UserAttributes", prop.valueFromString(params[pname])) + # prop = obj.addProperty('App::PropertyString', pname, "Attribute", translate('PathTooolBit', 'User Defined Value')) + # setattr(obj, pname, params[pname]) + prop = proto.getProperty("UserAttributes") + uservals.update({pname: params[pname]}) + #prop.setupProperty(obj, pname, "UserAttributes", prop.valueFromString(params[pname])) - print("prop[%s] = %s (%s)" % (pname, params[pname], type(val))) + if len(uservals.items()) > 0: + prop.setupProperty(obj, "UserAttributes", PropertyGroupAttribute, uservals) + + # print("prop[%s] = %s (%s)" % (pname, params[pname], type(val))) #prop.setupProperty(obj, pname, PropertyGroupAttribute, prop.valueFromString(params[pname])) return obj diff --git a/src/Mod/Path/PathScripts/PathToolBitEdit.py b/src/Mod/Path/PathScripts/PathToolBitEdit.py index 2f95d60216..d6928b8bf5 100644 --- a/src/Mod/Path/PathScripts/PathToolBitEdit.py +++ b/src/Mod/Path/PathScripts/PathToolBitEdit.py @@ -84,33 +84,59 @@ class ToolBitEditor(object): self.proto = PathToolBit.AttributePrototype() self.props = sorted(self.proto.properties) self.delegate = PathSetupSheetGui.Delegate(self.form) - self.model = QtGui.QStandardItemModel(len(self.props), 3, self.form) + self.model = QtGui.QStandardItemModel(len(self.props)-1, 3, self.form) self.model.setHorizontalHeaderLabels(['Set', 'Property', 'Value']) + for i, name in enumerate(self.props): print(f"propname: {name}") + prop = self.proto.getProperty(name) isset = hasattr(tool, name) + if isset: prop.setValue(getattr(tool, name)) - self.model.setData(self.model.index(i, 0), isset, QtCore.Qt.EditRole) - self.model.setData(self.model.index(i, 1), name, QtCore.Qt.EditRole) - self.model.setData(self.model.index(i, 2), prop, PathSetupSheetGui.Delegate.PropertyRole) - self.model.setData(self.model.index(i, 2), prop.displayString(), QtCore.Qt.DisplayRole) + if name == "UserAttributes": + continue - self.model.item(i, 0).setCheckable(True) - self.model.item(i, 0).setText('') - self.model.item(i, 1).setEditable(False) - self.model.item(i, 1).setToolTip(prop.info) - self.model.item(i, 2).setToolTip(prop.info) - - if isset: - self.model.item(i, 0).setCheckState(QtCore.Qt.Checked) else: - self.model.item(i, 0).setCheckState(QtCore.Qt.Unchecked) - self.model.item(i, 1).setEnabled(False) - self.model.item(i, 2).setEnabled(False) + + self.model.setData(self.model.index(i, 0), isset, QtCore.Qt.EditRole) + self.model.setData(self.model.index(i, 1), name, QtCore.Qt.EditRole) + self.model.setData(self.model.index(i, 2), prop, PathSetupSheetGui.Delegate.PropertyRole) + self.model.setData(self.model.index(i, 2), prop.displayString(), QtCore.Qt.DisplayRole) + + self.model.item(i, 0).setCheckable(True) + self.model.item(i, 0).setText('') + self.model.item(i, 1).setEditable(False) + self.model.item(i, 1).setToolTip(prop.info) + self.model.item(i, 2).setToolTip(prop.info) + + if isset: + self.model.item(i, 0).setCheckState(QtCore.Qt.Checked) + else: + self.model.item(i, 0).setCheckState(QtCore.Qt.Unchecked) + self.model.item(i, 1).setEnabled(False) + self.model.item(i, 2).setEnabled(False) + + if hasattr(tool, "UserAttributes"): + for key, value in tool.UserAttributes.items(): + print(key, value) + c1 = QtGui.QStandardItem() + c1.setCheckable(False) + c1.setEditable(False) + c1.setCheckState(QtCore.Qt.CheckState.Checked) + + c1.setText('') + c2 = QtGui.QStandardItem(key) + c2.setEditable(False) + c3 = QtGui.QStandardItem(value) + c3.setEditable(False) + + self.model.appendRow([c1, c2, c3]) + #QtGui.QStandardItem([True, key, value])) + self.form.attrTable.setModel(self.model) self.form.attrTable.setItemDelegateForColumn(2, self.delegate) diff --git a/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py b/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py index a000540516..ac9febbd0e 100644 --- a/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py +++ b/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py @@ -269,6 +269,7 @@ class ToolBitLibrary(object): self.model.clear() self.model.setHorizontalHeaderLabels(self.columnNames()) if path: + print(f"Path: {path}") with open(path) as fp: library = json.load(fp) for toolBit in library['tools']: