Browse Source

Merge branch 'master' of github.com:Ultimaker/Cura

Jaime van Kessel 8 years ago
parent
commit
85942583b1

+ 30 - 27
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
 

+ 5 - 2
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
                 {

+ 6 - 1
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:

+ 27 - 11
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"; }
 

+ 23 - 23
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 += "<li>%1</li>\n".arg(affected_by[i].label)
-            }
+        var affected_by_list = ""
+        for(var i in affected_by)
+        {
+            affected_by_list += "<li>%1</li>\n".arg(affected_by[i].label)
+        }
 
-            var affects_list = ""
-            for(var i in affects)
-            {
-                affects_list += "<li>%1</li>\n".arg(affects[i].label)
-            }
+        var affects_list = ""
+        for(var i in affects)
+        {
+            affects_list += "<li>%1</li>\n".arg(affects[i].label)
+        }
 
-            var tooltip = "<b>%1</b>\n<p>%2</p>".arg(definition.label).arg(definition.description)
+        var tooltip = "<b>%1</b>\n<p>%2</p>".arg(definition.label).arg(definition.description)
 
-            if(affects_list != "")
-            {
-                tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affects")).arg(affects_list)
-            }
+        if(affects_list != "")
+        {
+            tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affects")).arg(affects_list)
+        }
 
-            if(affected_by_list != "")
-            {
-                tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affected By")).arg(affected_by_list)
-            }
+        if(affected_by_list != "")
+        {
+            tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affected By")).arg(affected_by_list)
+        }
 
-            return tooltip
+        return tooltip
     }
 
     MouseArea 
@@ -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

+ 0 - 5
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)
             {

+ 3 - 1
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:
             {