From de361225315405f74c34cbd4c558da8bf43d9a5a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Jun 2016 13:31:01 +0200 Subject: [PATCH 1/8] Use the expanded categories from Cura to expand the proper categories on startup --- resources/qml/Settings/SettingView.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 4be2326b0a..39f0f833b8 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -29,8 +29,10 @@ ScrollView model: UM.SettingDefinitionsModel { id: definitionsModel; containerId: Cura.MachineManager.activeDefinitionId - exclude: ["machine_settings"] visibilityHandler: UM.SettingPreferenceVisibilityHandler { } + exclude: ["machine_settings"] + expanded: Printer.expandedCategories + onExpandedChanged: Printer.setExpandedCategories(expanded) filter: { From 10d572eae3c903516febe61567633a4e4dc36ed7 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Jun 2016 13:32:04 +0200 Subject: [PATCH 2/8] Fix expanded settings for Per Object settings tool --- plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index b237d60716..546b7086e6 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -153,6 +153,8 @@ Item { { id: addedSettingsModel; containerId: Cura.MachineManager.activeDefinitionId + expanded: [ "*" ] + visibilityHandler: Cura.PerObjectSettingVisibilityHandler { selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId") @@ -215,9 +217,8 @@ Item { style: ButtonStyle { - background: Rectangle + background: Item { - color: control.hovered ? control.parent.style.controlHighlightColor : control.parent.style.controlColor; UM.RecolorImage { anchors.verticalCenter: parent.verticalCenter @@ -340,6 +341,8 @@ Item { "settable_per_mesh": true } visibilityHandler: UM.SettingPreferenceVisibilityHandler {} + expanded: [ "*" ] + exclude: [ "machine_settings" ] } delegate:Loader { From cc027ddf418ca0b00ff5f686079232e266992634 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Jun 2016 13:32:20 +0200 Subject: [PATCH 3/8] Remove unused code --- resources/qml/Settings/SettingTextField.qml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index bf6fc34c93..18a55c7a50 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -19,11 +19,6 @@ SettingItem border.width: UM.Theme.getSize("default_lining").width border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border") - property variant parentValue: value //From parent loader - function notifyReset() { - input.text = format(parentValue) - } - color: { if (!enabled) { From 9f9de493f74df77ac1f31ac35ae4663f62bfea3c Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Jun 2016 13:32:31 +0200 Subject: [PATCH 4/8] Clean up indentation --- resources/qml/Settings/SettingItem.qml | 44 +++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index e98c06329d..2d5e9ffa7e 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -34,34 +34,34 @@ Item { property string tooltipText: { - var affects = settingDefinitionsModel.getRequiredBy(definition.key, "value") - var affected_by = settingDefinitionsModel.getRequires(definition.key, "value") + var affects = settingDefinitionsModel.getRequiredBy(definition.key, "value") + var affected_by = settingDefinitionsModel.getRequires(definition.key, "value") - var affected_by_list = "" - for(var i in affected_by) - { - affected_by_list += "
  • %1
  • \n".arg(affected_by[i].label) - } + var affected_by_list = "" + for(var i in affected_by) + { + affected_by_list += "
  • %1
  • \n".arg(affected_by[i].label) + } - var affects_list = "" - for(var i in affects) - { - affects_list += "
  • %1
  • \n".arg(affects[i].label) - } + var affects_list = "" + for(var i in affects) + { + affects_list += "
  • %1
  • \n".arg(affects[i].label) + } - var tooltip = "%1\n

    %2

    ".arg(definition.label).arg(definition.description) + var tooltip = "%1\n

    %2

    ".arg(definition.label).arg(definition.description) - if(affects_list != "") - { - tooltip += "
    %1\n
      \n%2
    ".arg(catalog.i18nc("@label", "Affects")).arg(affects_list) - } + if(affects_list != "") + { + tooltip += "
    %1\n
      \n%2
    ".arg(catalog.i18nc("@label", "Affects")).arg(affects_list) + } - if(affected_by_list != "") - { - tooltip += "
    %1\n
      \n%2
    ".arg(catalog.i18nc("@label", "Affected By")).arg(affected_by_list) - } + if(affected_by_list != "") + { + tooltip += "
    %1\n
      \n%2
    ".arg(catalog.i18nc("@label", "Affected By")).arg(affected_by_list) + } - return tooltip + return tooltip } MouseArea From 8c8caa2cac110273407763b9efaccd783e26927e Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Jun 2016 13:33:07 +0200 Subject: [PATCH 5/8] Use the right property for the property provider Otherwise we get a bunch of errors from the per object settings tool --- resources/qml/Settings/SettingItem.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 2d5e9ffa7e..1e69704995 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -236,7 +236,7 @@ Item { { id: controlContainer; - enabled: provider.isValueUsed + enabled: propertyProvider.isValueUsed anchors.right: parent.right; anchors.rightMargin: UM.Theme.getSize("default_margin").width From 38ce6cd4b859d249158d907918320b1655d207e0 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Jun 2016 13:33:51 +0200 Subject: [PATCH 6/8] Make PerObjectSettingVisiblityHandler inherit SettingVisiblityHandler and some other cleanup --- .../PerObjectSettingVisibilityHandler.py | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py index 381d45b1c2..57bff4f0de 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py @@ -3,36 +3,44 @@ from UM.Application import Application from UM.Settings.SettingInstance import SettingInstance from UM.Logger import Logger +import UM.Settings.Models + from cura.SettingOverrideDecorator import SettingOverrideDecorator ## The per object setting visibility handler ensures that only setting defintions that have a matching instance Container # are returned as visible. -class PerObjectSettingVisibilityHandler(QObject): +class PerObjectSettingVisibilityHandler(UM.Settings.Models.SettingVisibilityHandler): def __init__(self, parent = None, *args, **kwargs): super().__init__(parent = parent, *args, **kwargs) - self._selected_object_id = None - visibilityChanged = pyqtSignal() + self._selected_object_id = None + self._node = None + self._stack = None def setSelectedObjectId(self, id): - self._selected_object_id = id - self.visibilityChanged.emit() + if id != self._selected_object_id: + self._selected_object_id = id + + self._node = Application.getInstance().getController().getScene().findObject(self._selected_object_id) + if self._node: + self._stack = self._node.callDecoration("getStack") + + self.visibilityChanged.emit() @pyqtProperty("quint64", fset = setSelectedObjectId) def selectedObjectId(self): - pass + return self._selected_object_id def setVisible(self, visible): - node = Application.getInstance().getController().getScene().findObject(self._selected_object_id) - if not node: + if not self._node: return - stack = node.callDecoration("getStack") - if not stack: - node.addDecorator(SettingOverrideDecorator()) - stack = node.callDecoration("getStack") - settings = stack.getTop() - all_instances = settings.findInstances(**{}) + if not self._stack: + self._node.addDecorator(SettingOverrideDecorator()) + self._stack = self._node.callDecoration("getStack") + + settings = self._stack.getTop() + all_instances = settings.findInstances() visibility_changed = False # Flag to check if at the end the signal needs to be emitted # Remove all instances that are not in visibility list @@ -41,13 +49,12 @@ class PerObjectSettingVisibilityHandler(QObject): settings.removeInstance(instance.definition.key) visibility_changed = True - # Add all instances that are not added, but are in visiblity list + # Add all instances that are not added, but are in visibility list for item in visible: if not settings.getInstance(item): - definition_container = Application.getInstance().getGlobalContainerStack().getBottom() - definitions = definition_container.findDefinitions(key = item) - if definitions: - settings.addInstance(SettingInstance(definitions[0], settings)) + definition = self._stack.getSettingDefinition(item) + if definition: + settings.addInstance(SettingInstance(definition, settings)) visibility_changed = True else: Logger.log("w", "Unable to add instance (%s) to perobject visibility because we couldn't find the matching definition", item) @@ -57,20 +64,16 @@ class PerObjectSettingVisibilityHandler(QObject): def getVisible(self): visible_settings = set() - node = Application.getInstance().getController().getScene().findObject(self._selected_object_id) - if not node: + if not self._node: return visible_settings - stack = node.callDecoration("getStack") - if not stack: + if not self._stack: return visible_settings - settings = stack.getTop() + settings = self._stack.getTop() if not settings: return visible_settings - all_instances = settings.findInstances(**{}) - for instance in all_instances: - visible_settings.add(instance.definition.key) + visible_settings = set(map(lambda i: i.definition.key, settings.findInstances())) return visible_settings From 3f7f6f8a2317957dc684c5fa43e43ee7f9dbd7dc Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 23 Jun 2016 14:08:38 +0200 Subject: [PATCH 7/8] Skip containers that can not be serialized CURA-1445 --- plugins/SliceInfoPlugin/SliceInfo.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index a9cfe2d83a..50b6275bf0 100644 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -92,7 +92,12 @@ class SliceInfo(Extension): } for container in global_container_stack.getContainers(): container_id = container.getId() - container_serialized = container.serialize() + try: + container_serialized = container.serialize() + except NotImplementedError: + Logger.log("w", "Container %s could not be serialized!", container_id) + continue + if container_serialized: submitted_data["settings_%s" %(container_id)] = container_serialized # This can be anything, eg. INI, JSON, etc. else: From 0faecf9b34a2b8a5955b05d5e9f7dca03d7e8482 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 23 Jun 2016 13:43:50 +0200 Subject: [PATCH 8/8] Rearrange MachineActions on Machines page CURA-1385 --- resources/qml/Preferences/MachinesPage.qml | 38 +++++++++++++++------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 8a0a7dc096..dd9a7b42a7 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -36,13 +36,27 @@ UM.ManagementPage renameEnabled: base.currentItem != null activateEnabled: base.currentItem != null && base.currentItem.id != Cura.MachineManager.activeMachineId - Flow + Item { - anchors.fill: parent; - spacing: UM.Theme.getSize("default_margin").height; + visible: base.currentItem != null + anchors.fill: parent + + Label + { + id: machineName + text: base.currentItem && base.currentItem.name ? base.currentItem.name : "" + font: UM.Theme.getFont("large") + width: parent.width + elide: Text.ElideRight + } Row { + id: machineActions + anchors.left: parent.left + anchors.top: machineName.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + Repeater { id: machineActionRepeater @@ -72,16 +86,18 @@ UM.ManagementPage } } - Label + Row { - text: base.currentItem && base.currentItem.name ? base.currentItem.name : "" - font: UM.Theme.getFont("large") - width: parent.width - elide: Text.ElideRight - } + anchors.top: machineActions.visible ? machineActions.bottom : machineActions.anchors.top + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.right: parent.right - Label { text: catalog.i18nc("@label", "Type"); width: parent.width * 0.2; } - Label { text: base.currentItem && base.currentItem.typeName ? base.currentItem.typeName : ""; width: parent.width * 0.7; } + spacing: UM.Theme.getSize("default_margin").height + + Label { text: catalog.i18nc("@label", "Type") } + Label { text: base.currentItem ? base.currentItem.metadata.definition_name : "" } + } UM.I18nCatalog { id: catalog; name: "uranium"; }