diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 6a4b996080..ff16ba437d 100755 --- a/cura/CuraApplication.py +++ b/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): diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index dc71fe9ca9..624bc12487 100755 --- a/cura/Settings/MachineManager.py +++ b/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()) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index fa32516862..e5a21ba407 100644 --- a/resources/qml/SidebarSimple.qml +++ b/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(); + } } }