Browse Source

Fix custom profile handling for quality slider

CURA-4333
Lipu Fei 7 years ago
parent
commit
39891551e3
3 changed files with 33 additions and 30 deletions
  1. 3 3
      cura/CuraApplication.py
  2. 4 4
      cura/Settings/MachineManager.py
  3. 26 23
      resources/qml/SidebarSimple.qml

+ 3 - 3
cura/CuraApplication.py

@@ -413,9 +413,9 @@ class CuraApplication(QtApplication):
 
             global_stack.getTop().clear()
 
-            #event handler for SidebarSimple, which will update sliders view visibility (like:sliders..)
-            if Preferences.getInstance().getValue("cura/active_mode") == 0:
-                self.sidebarSimpleDiscardOrKeepProfileChanges.emit()
+        # event handler for SidebarSimple, which will update sliders view visibility (like:sliders..)
+        if Preferences.getInstance().getValue("cura/active_mode") == 0:
+            self.sidebarSimpleDiscardOrKeepProfileChanges.emit()
 
     @pyqtSlot(int)
     def messageBoxClosed(self, button):

+ 4 - 4
cura/Settings/MachineManager.py

@@ -417,16 +417,16 @@ class MachineManager(QObject):
     #   \param skip_keys \type{list} List of setting keys which will be not taken into account ("support_enable" , "infill_sparse_density"...)
     #   \return \type{boole} Return true if user containers have any of adjusted settings
     @pyqtSlot("QVariantList", result = bool)
-    def hasUserCustomSettings(self, skip_keys = []) -> bool:
+    def hasUserCustomSettings(self, skip_keys = None) -> bool:
+        if skip_keys is None:
+            skip_keys = []
 
         user_setting_keys = []
         try:
             if not self._global_container_stack:
                 return False
 
-            allContainers = self._global_container_stack.getContainers()
-
-            for container in allContainers:
+            for container in self._global_container_stack.getContainers():
                 meta = container.getMetaData()
                 if meta and meta["type"] and meta["type"] == "user":
                     user_setting_keys.extend(container.getAllKeys())

+ 26 - 23
resources/qml/SidebarSimple.qml

@@ -22,6 +22,13 @@ Item
     property bool settingsEnabled: ExtruderManager.activeExtruderStackId || machineExtruderCount.properties.value == 1
     property bool hasUserSettings;
 
+    property var profileChangedCheckSkipKeys: ["support_enable" ,
+                                               "infill_sparse_density",
+                                               "gradual_infill_steps",
+                                               "adhesion_type",
+                                               "support_extruder_nr"]
+    property var tickClickedViaProfileSlider: undefined
+
     Component.onCompleted: PrintInformation.enabled = true
     Component.onDestruction: PrintInformation.enabled = false
     UM.I18nCatalog { id: catalog; name: "cura" }
@@ -39,17 +46,17 @@ Item
         target: CuraApplication
         onSidebarSimpleDiscardOrKeepProfileChanges:
         {
-            base.hasUserSettings = false
+            base.checkUserSettings();
         }
     }
 
-    function checkUserSettings(){
-        var skip_keys = ["support_enable" ,
-                         "infill_sparse_density",
-                         "gradual_infill_steps",
-                         "adhesion_type",
-                         "support_extruder_nr"]
-        base.hasUserSettings = Cura.MachineManager.hasUserCustomSettings(skip_keys)
+    function checkUserSettings() {
+        hasUserSettings = Cura.MachineManager.hasUserCustomSettings(profileChangedCheckSkipKeys);
+        if (!hasUserSettings && tickClickedViaProfileSlider != undefined)
+        {
+            Cura.MachineManager.setActiveQuality(Cura.ProfilesModel.getItem(tickClickedViaProfileSlider).id);
+        }
+        tickClickedViaProfileSlider = undefined;
     }
 
     ScrollView
@@ -289,7 +296,7 @@ Item
                         anchors.bottom: speedSlider.bottom
                         enabled: qualityModel.availableTotalTicks > 0
                         visible: qualityModel.totalTicks > 0
-                        updateValueWhileDragging : false
+                        updateValueWhileDragging: false
 
                         minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0
                         maximumValue: qualityModel.qualitySliderAvailableMax >= 0 ? qualityModel.qualitySliderAvailableMax : 0
@@ -340,25 +347,21 @@ Item
 
                     //If any of settings were changed in custom mode then the Rectangle will
                     //overlap quality slider area. It is used to catch mouse click
-                    Rectangle {
-                        anchors.verticalCenter: parent.verticalCenter
-                        anchors.right: extrudersModelCheckBox.right
-                        anchors.rightMargin: UM.Theme.getSize("default_margin").width
-                        width: qualitySlider.width
-                        height: qualitySlider.height * 1.5
-
-                        color: "transparent"
+                    MouseArea {
+                        anchors.fill: qualitySlider
 
                         visible: hasUserSettings
                         enabled: hasUserSettings
 
-                        MouseArea {
-                            anchors.fill: parent
-                            onClicked: {
-                                discardOrKeepProfileChangesDialog.show()
-                            }
-                        }
+                        onClicked: {
+                            const offset = qualityModel.qualitySliderStepWidth / 2;
+                            const mousePosition = mouseX + offset;
+
+                            // save where it was clicked
+                            base.tickClickedViaProfileSlider = Math.floor(mousePosition / qualityModel.qualitySliderStepWidth);
 
+                            discardOrKeepProfileChangesDialog.show();
+                        }
                     }
                 }