diff --git a/cura/SettingOverrideDecorator.py b/cura/SettingOverrideDecorator.py index ae06be8512..3e8815ec67 100644 --- a/cura/SettingOverrideDecorator.py +++ b/cura/SettingOverrideDecorator.py @@ -14,10 +14,12 @@ from UM.Application import Application class SettingOverrideDecorator(SceneNodeDecorator): def __init__(self): super().__init__() - self._stack = ContainerStack(stack_id = "SettingOverrideStack") + self._stack = ContainerStack(stack_id = id(self)) self._instance = InstanceContainer(container_id = "SettingOverrideInstanceContainer") self._stack.addContainer(self._instance) + ContainerRegistry.getInstance().addContainer(self._stack) + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) self._onGlobalContainerStackChanged() diff --git a/plugins/PerObjectSettingsTool/PerObjectItem.qml b/plugins/PerObjectSettingsTool/PerObjectItem.qml index e0d389443f..2dddf0b444 100644 --- a/plugins/PerObjectSettingsTool/PerObjectItem.qml +++ b/plugins/PerObjectSettingsTool/PerObjectItem.qml @@ -16,13 +16,18 @@ UM.TooltipArea width: childrenRect.width; height: childrenRect.height; - CheckBox + Button { id: check text: definition.label - onClicked: addedSettingsModel.setVisible(model.key, checked); + onClicked: + { + addedSettingsModel.setVisible(model.key, true); + settingPickDialog.visible = false + UM.ActiveTool.forceUpdate() + } } } diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py index e56ad520c6..9ef2515bed 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py @@ -53,7 +53,6 @@ class PerObjectSettingVisibilityHandler(QObject): if visibility_changed: self.visibilityChanged.emit() - #settings.addInstance(SettingInstance()) def getVisible(self): visible_settings = set() diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 5213c7ee58..8c9b63ac1b 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -10,16 +10,20 @@ import UM 1.2 as UM import Cura 1.0 as Cura import ".." - Item { id: base; - property int currentIndex: UM.ActiveTool.properties.getValue("SelectedIndex") UM.I18nCatalog { id: catalog; name: "cura"; } width: childrenRect.width; height: childrenRect.height; + + function updateContainerID() + { + console.log("containerid",UM.ActiveTool.properties.getValue("ContainerID")) + } + Column { id: items @@ -27,33 +31,69 @@ Item { anchors.left: parent.left; spacing: UM.Theme.getSize("default_margin").height; - height: childrenRect.height; - ListView + + Repeater { id: contents - spacing: UM.Theme.getSize("default_lining").height; height: childrenRect.height; - model: UM.SettingDefinitionsModel { + model: UM.SettingDefinitionsModel + { id: addedSettingsModel; containerId: Cura.MachineManager.activeDefinitionId - visibilityHandler: Cura.PerObjectSettingVisibilityHandler { - selectedObjectId: UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).id + visibilityHandler: Cura.PerObjectSettingVisibilityHandler + { + selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId") } } - delegate:Button + delegate: Loader { - anchors.left: parent.right; + width: UM.Theme.getSize("setting").width; + height: UM.Theme.getSize("setting").height; - width: 150 - height:50 + property var definition: model + property var settingDefinitionsModel: addedSettingsModel + property var propertyProvider: provider - text: model.label + //Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989 + //In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes, + //causing nasty issues when selecting differnt options. So disable asynchronous loading of enum type completely. + asynchronous: model.type != "enum" + + source: + { + switch(model.type) // TODO: This needs to be fixed properly. Got frustrated with it not working, so this is the patch job! + { + case "int": + return "../../resources/qml/Settings/SettingTextField.qml" + case "float": + return "../../resources/qml/Settings/SettingTextField.qml" + case "enum": + return "../../resources/qml/Settings/SettingComboBox.qml" + case "bool": + return "../../resources/qml/Settings/SettingCheckBox.qml" + case "str": + return "../../resources/qml/Settings/SettingTextField.qml" + case "category": + return "../../resources/qml/Settings/SettingCategory.qml" + default: + return "../../resources/qml/Settings/SettingUnknown.qml" + } + } + + UM.SettingPropertyProvider + { + id: provider + + containerStackId: UM.ActiveTool.properties.getValue("ContainerID") + key: model.key + watchedProperties: [ "value", "enabled", "state", "validationState" ] + storeIndex: 0 + } } } - Button { id: customise_settings_button; diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py index dc65725839..c74800e83d 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py @@ -13,23 +13,16 @@ class PerObjectSettingsTool(Tool): super().__init__() self._model = None - self.setExposedProperties("Model", "SelectedIndex") + self.setExposedProperties("SelectedObjectId","ContainerID") Preferences.getInstance().preferenceChanged.connect(self._onPreferenceChanged) + Selection.selectionChanged.connect(self.propertyChanged) self._onPreferenceChanged("cura/active_mode") def event(self, event): return False - def getModel(self): - if not self._model: - self._model = PerObjectSettingsModel.PerObjectSettingsModel() - - #For some reason, casting this model to itself causes the model to properly be cast to a QVariant, even though it ultimately inherits from QVariant. - #Yeah, we have no idea either... - return PerObjectSettingsModel.PerObjectSettingsModel(self._model) - - def getSelectedIndex(self): + def getSelectedObjectId(self): try: selected_object = Selection.getSelectedObject(0) if selected_object.getParent().callDecoration("isGroup"): @@ -37,8 +30,24 @@ class PerObjectSettingsTool(Tool): except: selected_object = None selected_object_id = id(selected_object) - index = self.getModel().find("id", selected_object_id) - return index + return selected_object_id + + def getContainerID(self): + try: + selected_object = Selection.getSelectedObject(0) + if selected_object.getParent().callDecoration("isGroup"): + selected_object = selected_object.getParent() + try: + return selected_object.callDecoration("getStack").getId() + except: + print(":(") + return + except: + print(":((") + return + + def setContainerID(self, value): + pass def _onPreferenceChanged(self, preference): if preference == "cura/active_mode":