Browse Source

Resolvement strategy for bed adhesion and prime tower enable.
Contributes to CURA-2232 No resolvement strategy for prime_tower_enable and platform adhesion

Simon Edwards 8 years ago
parent
commit
0fdd9279bb

+ 2 - 0
resources/definitions/fdmprinter.def.json

@@ -2705,6 +2705,7 @@
                         "raft": "Raft"
                     },
                     "default_value": "brim",
+                    "resolve": "'raft' if 'raft' in extruderValues('adhesion_type') else ('brim' if 'brim' in extruderValues('adhesion_type') else 'skirt')",
                     "settable_per_mesh": false,
                     "settable_per_extruder": false
                 },
@@ -3296,6 +3297,7 @@
                     "type": "bool",
                     "enabled": "machine_extruder_count > 1",
                     "default_value": false,
+                    "resolve": "max(extruderValues('prime_tower_enable'))",
                     "settable_per_mesh": false,
                     "settable_per_extruder": false
                 },

+ 27 - 5
resources/qml/Settings/SettingCheckBox.qml

@@ -20,18 +20,40 @@ SettingItem
 
         property bool checked:
         {
-            switch(propertyProvider.properties.value)
+            // FIXME this needs to go away once 'resolve' is combined with 'value' in our data model.
+            // Stacklevels
+            // 0: user  -> unsaved change
+            // 1: quality changes  -> saved change
+            // 2: quality
+            // 3: material  -> user changed material in materials page
+            // 4: variant
+            // 5: machine
+            var value;
+            if ((propertyProvider.properties.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) {
+                // We have a resolve function. Indicates that the setting is not settable per extruder and that
+                // we have to choose between the resolved value (default) and the global value
+                // (if user has explicitly set this).
+                value = propertyProvider.properties.resolve;
+            } else {
+                value = propertyProvider.properties.value;
+            }
+
+            switch(value)
             {
                 case "True":
-                    return true
+                    return true;
                 case "False":
-                    return false
+                    return false;
                 default:
-                    return propertyProvider.properties.value
+                    return value;
             }
         }
 
-        onClicked: { forceActiveFocus(); propertyProvider.setPropertyValue("value", !checked) }
+        onClicked:
+        {
+            forceActiveFocus();
+            propertyProvider.setPropertyValue("value", !checked);
+        }
 
         Rectangle
         {

+ 12 - 1
resources/qml/Settings/SettingComboBox.qml

@@ -96,8 +96,19 @@ SettingItem
         }
 
         function updateCurrentIndex() {
+            // FIXME this needs to go away once 'resolve' is combined with 'value' in our data model.
+            var value;
+            if ((propertyProvider.properties.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) {
+                // We have a resolve function. Indicates that the setting is not settable per extruder and that
+                // we have to choose between the resolved value (default) and the global value
+                // (if user has explicitly set this).
+                value = propertyProvider.properties.resolve;
+            } else {
+                value = propertyProvider.properties.value;
+            }
+
             for(var i = 0; i < definition.options.length; ++i) {
-                if(definition.options[i].key == propertyProvider.properties.value) {
+                if(definition.options[i].key == value) {
                     currentIndex = i;
                     return;
                 }