From 3f903d2c76fd2540cfcdb81017b47d52af43f908 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 16 Sep 2017 10:05:45 +0200 Subject: [PATCH 1/7] Add menu item to reset the camera --- cura/CuraActions.py | 9 +++++++++ resources/qml/Actions.qml | 9 +++++++++ resources/qml/Menus/ViewMenu.qml | 3 +++ 3 files changed, 21 insertions(+) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index eeebd3b6b2..d46448dcec 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -36,6 +36,15 @@ class CuraActions(QObject): event = CallFunctionEvent(self._openUrl, [QUrl("http://github.com/Ultimaker/Cura/issues")], {}) Application.getInstance().functionEvent(event) + ## Reset camera position and direction to default + @pyqtSlot() + def homeCamera(self) -> None: + scene = Application.getInstance().getController().getScene() + camera = scene.getActiveCamera() + camera.setPosition(Vector(-80, 250, 700)) + camera.setPerspective(True) + camera.lookAt(Vector(0, 0, 0)) + ## Center all objects in the selection @pyqtSlot() def centerSelection(self) -> None: diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 3169f4f170..f028d22632 100755 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -17,6 +17,8 @@ Item property alias undo: undoAction; property alias redo: redoAction; + property alias homeCamera: homeCameraAction; + property alias deleteSelection: deleteSelectionAction; property alias centerSelection: centerSelectionAction; property alias multiplySelection: multiplySelectionAction; @@ -96,6 +98,13 @@ Item shortcut: StandardKey.Quit; } + Action + { + id: homeCameraAction; + text: catalog.i18nc("@action:inmenu menubar:view","&Reset camera position"); + onTriggered: CuraActions.homeCamera(); + } + Action { id: preferencesAction; diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index 859620692e..cf3108fdac 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -27,4 +27,7 @@ Menu onObjectRemoved: menu.removeItem(object) } ExclusiveGroup { id: group; } + + MenuSeparator {} + MenuItem { action: Cura.Actions.homeCamera; } } From e1ea8df84c76abdb7f42b21492532828d5f939ce Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 19 Sep 2017 09:32:13 +0200 Subject: [PATCH 2/7] Added flush to splash screen This greatly reduces the issues with it CURA-4343 --- cura/CuraSplashScreen.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/CuraSplashScreen.py b/cura/CuraSplashScreen.py index 4e4b2ba3a3..d61b7294af 100644 --- a/cura/CuraSplashScreen.py +++ b/cura/CuraSplashScreen.py @@ -3,7 +3,7 @@ from threading import Thread, Event -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QCoreApplication from PyQt5.QtGui import QPixmap, QColor, QFont, QPen, QPainter from PyQt5.QtWidgets import QSplashScreen @@ -91,6 +91,7 @@ class CuraSplashScreen(QSplashScreen): self._current_message = message self.messageChanged.emit(message) + QCoreApplication.flush() def close(self): # set stop flags @@ -105,7 +106,7 @@ class LoadingTickThread(Thread): super().__init__(daemon = True) self._splash = splash self._to_stop = False - self._time_interval = 0.05 + self._time_interval = 0.1 self._event = Event() def setToStop(self): From e0480528a07d340728315cc0644f905110a13ec8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 19 Sep 2017 09:38:08 +0200 Subject: [PATCH 3/7] Setting message now also forces repaint CURA-4343 --- cura/CuraSplashScreen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cura/CuraSplashScreen.py b/cura/CuraSplashScreen.py index d61b7294af..a100cee9c3 100644 --- a/cura/CuraSplashScreen.py +++ b/cura/CuraSplashScreen.py @@ -92,6 +92,7 @@ class CuraSplashScreen(QSplashScreen): self._current_message = message self.messageChanged.emit(message) QCoreApplication.flush() + self.repaint() def close(self): # set stop flags From 847cd1b29344ba06047b18f698cc6fb845dbe3db Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 19 Sep 2017 09:43:35 +0200 Subject: [PATCH 4/7] Removed spinner as it caused the crash We might want to consider getting the spinner back, but for the moment it's best left out CURA-4343 --- cura/CuraSplashScreen.py | 40 +--------------------------------------- 1 file changed, 1 insertion(+), 39 deletions(-) diff --git a/cura/CuraSplashScreen.py b/cura/CuraSplashScreen.py index a100cee9c3..ac06d665d5 100644 --- a/cura/CuraSplashScreen.py +++ b/cura/CuraSplashScreen.py @@ -24,18 +24,10 @@ class CuraSplashScreen(QSplashScreen): self._loading_image_rotation_angle = 0 self._to_stop = False - self._loading_tick_thread = LoadingTickThread(self) def show(self): super().show() - self._loading_tick_thread.start() - - def updateLoadingImage(self): - if self._to_stop: - return - - self._loading_image_rotation_angle -= 10 - self.repaint() + self._to_stop = False def drawContents(self, painter): if self._to_stop: @@ -63,13 +55,6 @@ class CuraSplashScreen(QSplashScreen): painter.drawText(252, 105, 330 * self._scale, 255 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[1]) painter.setPen(QColor(255, 255, 255, 255)) - # draw the loading image - pen = QPen() - pen.setWidth(6 * self._scale) - pen.setColor(QColor(32, 166, 219, 255)) - painter.setPen(pen) - painter.drawArc(60, 150, 32 * self._scale, 32 * self._scale, self._loading_image_rotation_angle * 16, 300 * 16) - # draw message text if self._current_message: font = QFont() # Using system-default font here @@ -97,27 +82,4 @@ class CuraSplashScreen(QSplashScreen): def close(self): # set stop flags self._to_stop = True - self._loading_tick_thread.setToStop() super().close() - - -class LoadingTickThread(Thread): - - def __init__(self, splash): - super().__init__(daemon = True) - self._splash = splash - self._to_stop = False - self._time_interval = 0.1 - self._event = Event() - - def setToStop(self): - self._to_stop = True - self._event.set() - - def run(self): - while not self._to_stop: - self._event.wait(self._time_interval) - if self._event.is_set(): - break - - self._splash.updateLoadingImage() From db072eae8e34572a9e9a939233b45cae551ded8f Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 19 Sep 2017 10:11:41 +0200 Subject: [PATCH 5/7] Add some margin for the helper boxes, not perfect yet CURA-4303 --- resources/qml/SidebarSimple.qml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index f65b436acc..be4fe65adf 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -403,8 +403,8 @@ Item { id: infillCellLeft - anchors.top: speedLabel.top - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 1.2 // FIXME better margin value + anchors.top: speedLabel.bottom + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.left: parent.left width: UM.Theme.getSize("sidebar").width * .45 - UM.Theme.getSize("sidebar_margin").width @@ -658,8 +658,8 @@ Item id: enableSupportLabel visible: enableSupportCheckBox.visible - anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.top: enableSupportCheckBox.top + anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width anchors.verticalCenter: enableSupportCheckBox.verticalCenter @@ -675,7 +675,7 @@ Item property alias _hovered: enableSupportMouseArea.containsMouse anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 anchors.left: infillCellRight.left style: UM.Theme.styles.checkbox; From bd6bb872b7cf8c7aac8e53ca14cd8da715e0f7e7 Mon Sep 17 00:00:00 2001 From: alekseisasin Date: Thu, 21 Sep 2017 15:24:40 +0200 Subject: [PATCH 6/7] Changed Quality slider CURA-4182 --- resources/qml/SidebarSimple.qml | 589 ++++++++++++++------------------ 1 file changed, 260 insertions(+), 329 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 9bd5c7590a..072b6d2ee7 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -40,74 +40,20 @@ Item // // Quality profile // - Text + Rectangle { - id: resolutionLabel - anchors.top: resolutionSlider.top - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - text: catalog.i18nc("@label", "Layer Height") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - } - - Text - { - id: speedLabel - anchors.bottom: resolutionSlider.bottom - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - - text: catalog.i18nc("@label", "Print Speed") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - } - - Text - { - id: speedLabelSlower - anchors.bottom: speedLabel.bottom - anchors.left: resolutionSlider.left - - text: catalog.i18nc("@label", "Slower") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - horizontalAlignment: Text.AlignLeft - } - - Text - { - id: speedLabelFaster - anchors.bottom: speedLabel.bottom - anchors.right: resolutionSlider.right - - text: catalog.i18nc("@label", "Faster") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - horizontalAlignment: Text.AlignRight - } - - Item - { - id: resolutionSlider - anchors.top: parent.top - anchors.left: infillCellRight.left - anchors.right: infillCellRight.right - - width: UM.Theme.getSize("sidebar").width * .55 - height: UM.Theme.getSize("quality_slider_bar").height * 25 - - property var model: Cura.ProfilesModel - - Connections - { - target: Cura.ProfilesModel - onItemsChanged: - { - resolutionSlider.updateCurrentQualityIndex(); - resolutionSlider.updateBar(); + Timer { + id: qualitySliderChangeTimer + interval: 50 + running: false + repeat: false + onTriggered: Cura.MachineManager.setActiveQuality(Cura.ProfilesModel.getItem(qualityRowSlider.value).id) } + + Component.onCompleted: + { + qualityRow.updateAvailableTotalTicks() } Connections @@ -115,287 +61,271 @@ Item target: Cura.MachineManager onActiveQualityChanged: { - resolutionSlider.updateCurrentQualityIndex(); - resolutionSlider.updateBar(); + qualityRow.updateAvailableTotalTicks() } } + /* Component.onCompleted: { updateCurrentQualityIndex(); updateBar(); } + */ - function updateCurrentQualityIndex() + id: qualityRow + + property var totalTicks: 0 + property var availableTotalTicks: 0 + property var qualitySliderStep: qualityRow.totalTicks != 0 ? (base.width * 0.55) / (qualityRow.totalTicks) : 0 + property var qualitySliderSelectedValue: 0 + + property var sliderAvailableMin : 0 + property var sliderAvailableMax : 0 + property var sliderMarginRight : 0 + + function updateAvailableTotalTicks() { - for (var i = 0; i < resolutionSlider.model.rowCount(); ++i) + qualityRow.totalTicks = Cura.ProfilesModel.rowCount() - 1 // minus one, because slider starts from 0 + + var availableMin = -1 + var availableMax = -1 + + for (var i = 0; i <= Cura.ProfilesModel.rowCount(); i++) { - if (Cura.MachineManager.activeQualityId == resolutionSlider.model.getItem(i).id) + //Find slider range, min and max value + if (availableMin == -1 && Cura.ProfilesModel.getItem(i).available) { - if (resolutionSlider.currentQualityIndex != i) + availableMin = i + availableMax = i + } + else if(Cura.ProfilesModel.getItem(i).available) + { + availableMax = i + } + + //Find selected value + if(Cura.MachineManager.activeQualityId == Cura.ProfilesModel.getItem(i).id) + { + qualitySliderSelectedValue = i + } + } + + if(availableMin !=-1) + { + availableTotalTicks = availableMax - availableMin + } + else + { + availableTotalTicks = -1 + } + + qualitySliderStep = qualityRow.totalTicks != 0 ? (base.width * 0.55) / (qualityRow.totalTicks) : 0 + + if(availableMin == -1) + { + sliderMarginRight = base.width * 0.55 + } + else if (availableMin == 0 && availableMax == 0) + { + sliderMarginRight = base.width * 0.55 + } + else if(availableMin == availableMax) + { + sliderMarginRight = (qualityRow.totalTicks - availableMin) * qualitySliderStep + } + else if(availableMin != availableMax) + { + sliderMarginRight = (qualityRow.totalTicks - availableMax) * qualitySliderStep + } + + + qualityRow.sliderAvailableMin = availableMin + qualityRow.sliderAvailableMax = availableMax + + //console.log("==>>FIND.availableMin: " + availableMin) + //console.log("==>>FIND.availableMax: " + availableMax) + //console.log("==>>FIND.qualitySliderSelectedValue: " + qualitySliderSelectedValue) + //console.log("==>>FIND.sliderMarginRightVALUE: "+ sliderMarginRight) + + } + + height: UM.Theme.getSize("sidebar_margin").height + + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.right: parent.right + + Text + { + id: qualityRowTitle + text: catalog.i18nc("@label", "Layer Height") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } + + //Show titles for the each quality slider ticks + Item + { + y: -5; + anchors.left: speedSlider.left + Repeater + { + model: qualityRow.totalTicks + 1 + Text + { + anchors.verticalCenter: parent.verticalCenter + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height / 2 + color: UM.Theme.getColor("text") + text: { - resolutionSlider.currentQualityIndex = i; + return Cura.ProfilesModel.getItem(index).layer_height_without_unit } - return; - } - } - resolutionSlider.currentQualityIndex = undefined; - backgroundBarUpdateTimer.start(); - } - - function updateBar() - { - fullRangeMax = Cura.ProfilesModel.rowCount(); - - // set avaiableMin - var foundAvaiableMin = false; - for (var i = 0; i < Cura.ProfilesModel.rowCount(); ++i) - { - if (Cura.ProfilesModel.getItem(i).available) - { - avaiableMin = i; - foundAvaiableMin = true; - break; - } - } - if (!foundAvaiableMin) - { - avaiableMin = undefined; - } - - var foundAvaiableMax = false; - for (var i = Cura.ProfilesModel.rowCount() - 1; i >= 0; --i) - { - if (Cura.ProfilesModel.getItem(i).available) - { - avaiableMax = i; - foundAvaiableMax = true; - break; - } - } - if (!foundAvaiableMax) - { - avaiableMax = undefined; - } - - currentHover = undefined; - backgroundBar.requestPaint(); - } - - property var fullRangeMin: 0 - property var fullRangeMax: model.rowCount() - - property var avaiableMin - property var avaiableMax - property var currentQualityIndex - property var currentHover - - //TODO: get from theme - property var barLeftRightMargin: 5 - property var tickLeftRightMargin: 2 - property var tickMargin: 15 - property var tickThickness: 1 - property var tickWidth: 1 - property var tickHeight: 5 - property var tickTextHeight: 8 - property var totalTickCount: fullRangeMax - fullRangeMin - property var selectedCircleDiameter: 10 - - property var showQualityText: false - - property var tickStepSize: (width - (barLeftRightMargin + tickLeftRightMargin) * 2) / (totalTickCount > 1 ? totalTickCount - 1 : 1) - property var tickAreaList: - { - var area_list = []; - if (avaiableMin != undefined && avaiableMax != undefined) - { - for (var i = avaiableMin; i <= avaiableMax; ++i) - { - var start_x = (barLeftRightMargin + tickLeftRightMargin) + tickStepSize * (i - fullRangeMin); - var diameter = tickStepSize * 0.9; - start_x = start_x + tickWidth / 2 - (diameter / 2); - var end_x = start_x + diameter; - var start_y = height / 2 - diameter / 2; - var end_y = start_y + diameter; - - var area = {"id": i, - "start_x": start_x, "end_x": end_x, - "start_y": start_y, "end_y": end_y, - }; - area_list.push(area); - } - } - return area_list; - } - - onCurrentHoverChanged: - { - backgroundBar.requestPaint(); - } - onCurrentQualityIndex: - { - backgroundBar.requestPaint(); - } - - // background bar - Canvas - { - id: backgroundBar - anchors.fill: parent - - Timer { - id: backgroundBarUpdateTimer - interval: 10 - running: false - repeat: false - onTriggered: backgroundBar.requestPaint() - } - - onPaint: - { - var ctx = getContext("2d"); - ctx.reset(); - ctx.fillStyle = UM.Theme.getColor("quality_slider_unavailable"); - - const bar_left_right_margin = resolutionSlider.barLeftRightMargin; - const tick_left_right_margin = resolutionSlider.tickLeftRightMargin; - const tick_margin = resolutionSlider.tickMargin; - const bar_thickness = resolutionSlider.tickThickness; - const tick_width = resolutionSlider.tickWidth; - const tick_height = resolutionSlider.tickHeight; - const tick_text_height = resolutionSlider.tickTextHeight; - const selected_circle_diameter = resolutionSlider.selectedCircleDiameter; - - // draw unavailable bar - const bar_top = parent.height / 2 - bar_thickness / 2; - ctx.fillRect(bar_left_right_margin, bar_top, width - bar_left_right_margin * 2, bar_thickness); - - // draw unavailable ticks - var total_tick_count = resolutionSlider.totalTickCount; - const step_size = resolutionSlider.tickStepSize; - var current_start_x = bar_left_right_margin + tick_left_right_margin; - - const tick_top = parent.height / 2 - tick_height / 2; - - for (var i = 0; i < total_tick_count; ++i) - { - ctx.fillRect(current_start_x, tick_top, tick_width, tick_height); - current_start_x += step_size; - } - - // draw available bar and ticks - if (resolutionSlider.avaiableMin != undefined && resolutionSlider.avaiableMax != undefined) - { - current_start_x = (bar_left_right_margin + tick_left_right_margin) + step_size * (resolutionSlider.avaiableMin - resolutionSlider.fullRangeMin); - ctx.fillStyle = UM.Theme.getColor("quality_slider_available"); - total_tick_count = resolutionSlider.avaiableMax - resolutionSlider.avaiableMin + 1; - - const available_bar_width = step_size * (total_tick_count - 1); - ctx.fillRect(current_start_x, bar_top, available_bar_width, bar_thickness); - - for (var i = 0; i < total_tick_count; ++i) + width: 1 + x: { - ctx.fillRect(current_start_x, tick_top, tick_width, tick_height); - current_start_x += step_size; + if(index != qualityRow.totalTicks) + return (base.width * 0.55 / qualityRow.totalTicks) * index; + else + return (base.width * 0.55 / qualityRow.totalTicks) * index - 15; } } + } + } - // print the selected circle - if (resolutionSlider.currentQualityIndex != undefined) - { - var circle_start_x = (bar_left_right_margin + tick_left_right_margin) + step_size * (resolutionSlider.currentQualityIndex - resolutionSlider.fullRangeMin); - circle_start_x = circle_start_x + tick_width / 2 - selected_circle_diameter / 2; - var circle_start_y = height / 2 - selected_circle_diameter / 2; - ctx.fillStyle = UM.Theme.getColor("quality_slider_handle"); - ctx.beginPath(); - ctx.ellipse(circle_start_x, circle_start_y, selected_circle_diameter, selected_circle_diameter); - ctx.fill(); - ctx.closePath(); - } + //Print speed slider + Item + { + id: speedSlider + width: base.width * 0.55 + height: UM.Theme.getSize("sidebar_margin").height + anchors.right: parent.right + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - // print the hovered circle - if (resolutionSlider.currentHover != undefined && resolutionSlider.currentHover != resolutionSlider.currentQualityIndex) - { - var circle_start_x = (bar_left_right_margin + tick_left_right_margin) + step_size * (resolutionSlider.currentHover - resolutionSlider.fullRangeMin); - circle_start_x = circle_start_x + tick_width / 2 - selected_circle_diameter / 2; - var circle_start_y = height / 2 - selected_circle_diameter / 2; - ctx.fillStyle = UM.Theme.getColor("quality_slider_handle_hover"); - ctx.beginPath(); - ctx.ellipse(circle_start_x, circle_start_y, selected_circle_diameter, selected_circle_diameter); - ctx.fill(); - ctx.closePath(); - } + // Draw Unavailable line + Rectangle + { + id: groovechildrect + width: base.width * 0.55 + height: 2 + color: UM.Theme.getColor("quality_slider_unavailable") + //radius: parent.radius + y: 9 + x: 0 + } - // print layer height texts - total_tick_count = resolutionSlider.totalTickCount; - const step_size = resolutionSlider.tickStepSize; - current_start_x = bar_left_right_margin + tick_left_right_margin; - for (var i = 0; i < total_tick_count; ++i) - { - const text_top = parent.height / 2 - tick_height - tick_text_height; - ctx.fillStyle = UM.Theme.getColor("quality_slider_text"); - - ctx.font = "12px sans-serif"; - const string_length = resolutionSlider.model.getItem(i).layer_height_without_unit.length; - const offset = string_length / 2 * 4; - - var start_x = current_start_x - offset; - if (i == 0) - { - start_x = 0; - } - else if (i == total_tick_count - 1) - { - start_x = current_start_x - offset * 2.5; - } - - ctx.fillText(resolutionSlider.model.getItem(i).layer_height_without_unit, start_x, text_top); - current_start_x += step_size; + // Draw ticks + Repeater + { + id: qualityRepeater + model: qualityRow.totalTicks + 1 + Rectangle { + anchors.verticalCenter: parent.verticalCenter + color: qualityRow.availableTotalTicks != 0 ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + width: 1 + height: 6 + y: 0 + x: qualityRow.qualitySliderStep * index } } - MouseArea + + Slider { - anchors.fill: parent - hoverEnabled: true - onClicked: + id: qualityRowSlider + height: UM.Theme.getSize("sidebar_margin").height + anchors.bottom: speedSlider.bottom + enabled: qualityRow.availableTotalTicks != 0 + updateValueWhileDragging : false + + minimumValue: qualityRow.sliderAvailableMin + maximumValue: qualityRow.sliderAvailableMax + stepSize: 1 + + value: qualityRow.qualitySliderSelectedValue + + width:{ + return qualityRow.qualitySliderStep * (qualityRow.availableTotalTicks) + } + + anchors.right: parent.right + anchors.rightMargin:{ + return qualityRow.sliderMarginRight + } + + style: SliderStyle { - for (var i = 0; i < resolutionSlider.tickAreaList.length; ++i) - { - var area = resolutionSlider.tickAreaList[i]; - if (area.start_x <= mouseX && mouseX <= area.end_x && area.start_y <= mouseY && mouseY <= area.end_y) - { - resolutionSlider.currentHover = undefined; - resolutionSlider.currentQualityIndex = area.id; - - Cura.MachineManager.setActiveQuality(resolutionSlider.model.getItem(resolutionSlider.currentQualityIndex).id); - return; + //Draw Available line + groove: Rectangle { + implicitHeight: 2 + color: UM.Theme.getColor("quality_slider_available") + radius: 1 + } + handle: Item { + Rectangle { + id: qualityhandleButton + anchors.centerIn: parent + color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: 10 + implicitHeight: 10 + radius: 10 } } - resolutionSlider.currentHover = undefined; } - onPositionChanged: - { - for (var i = 0; i < resolutionSlider.tickAreaList.length; ++i) + + onValueChanged: { + + //Prevent updating during view initializing. Trigger only if the value changed by user + if(qualityRowSlider.value != qualityRow.qualitySliderSelectedValue) { - var area = resolutionSlider.tickAreaList[i]; - if (area.start_x <= mouseX && mouseX <= area.end_x && area.start_y <= mouseY && mouseY <= area.end_y) - { - resolutionSlider.currentHover = area.id; - return; - } + //start updating with short delay + qualitySliderChangeTimer.start(); } - resolutionSlider.currentHover = undefined; - } - onExited: - { - resolutionSlider.currentHover = undefined; } } } + + Text + { + id: speedLabel + anchors.top: speedSlider.bottom + + anchors.left: parent.left + + text: catalog.i18nc("@label", "Print Speed") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } + + Text + { + anchors.bottom: speedLabel.bottom + anchors.left: speedSlider.left + + text: catalog.i18nc("@label", "Slower") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + horizontalAlignment: Text.AlignLeft + } + + Text + { + anchors.bottom: speedLabel.bottom + anchors.right: speedSlider.right + + text: catalog.i18nc("@label", "Faster") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + horizontalAlignment: Text.AlignRight + } } + + // // Infill // @@ -403,12 +333,11 @@ Item { id: infillCellLeft - anchors.top: speedLabel.bottom + anchors.top: qualityRow.bottom anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.left: parent.left width: UM.Theme.getSize("sidebar").width * .45 - UM.Theme.getSize("sidebar_margin").width - height: UM.Theme.getSize("sidebar_margin").height Text { @@ -418,12 +347,14 @@ Item color: UM.Theme.getColor("text") anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 1.7 anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width } } + + Item { id: infillCellRight @@ -438,7 +369,7 @@ Item Text { id: selectedInfillRateText - anchors.top: parent.top + //anchors.top: parent.top anchors.left: infillSlider.left anchors.leftMargin: (infillSlider.value / infillSlider.stepSize) * (infillSlider.width / (infillSlider.maximumValue / infillSlider.stepSize)) - 10 anchors.right: parent.right @@ -455,10 +386,9 @@ Item anchors.top: selectedInfillRateText.bottom anchors.left: parent.left - anchors.right: infillIcon.left - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width height: UM.Theme.getSize("sidebar_margin").height + width: infillCellRight.width - UM.Theme.getSize("sidebar_margin").width - style.handleWidth minimumValue: 0 maximumValue: 100 @@ -477,6 +407,7 @@ Item style: SliderStyle { + groove: Rectangle { id: groove implicitWidth: 200 @@ -485,13 +416,15 @@ Item radius: 1 } - handle: Rectangle { - id: handleButton - anchors.centerIn: parent - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - implicitWidth: 10 - implicitHeight: 10 - radius: 10 + handle: Item { + Rectangle { + id: handleButton + anchors.centerIn: parent + color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: 10 + implicitHeight: 10 + radius: 10 + } } tickmarks: Repeater { @@ -511,8 +444,6 @@ Item Item { - id: infillIcon - width: (infillCellRight.width / 5) - (UM.Theme.getSize("sidebar_margin").width) height: width @@ -549,6 +480,7 @@ Item visible: infillIconList.activeIndex == index UM.RecolorImage { + id: infillIcon anchors.fill: parent sourceSize.width: width sourceSize.height: width @@ -602,7 +534,6 @@ Item text: catalog.i18nc("@label", "Enable gradual") font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") - elide: Text.ElideRight } } @@ -659,8 +590,8 @@ Item id: enableSupportLabel visible: enableSupportCheckBox.visible - anchors.top: enableSupportCheckBox.top - + anchors.top: infillCellRight.bottom + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width anchors.verticalCenter: enableSupportCheckBox.verticalCenter @@ -676,7 +607,7 @@ Item property alias _hovered: enableSupportMouseArea.containsMouse anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.left: infillCellRight.left style: UM.Theme.styles.checkbox; From ecafa248884cf27399f0bd82720def2c4bd633c6 Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Thu, 21 Sep 2017 17:35:12 +0200 Subject: [PATCH 7/7] code cleanup --- cura/Settings/ProfilesModel.py | 1 + resources/qml/SidebarSimple.qml | 21 +++++++++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 4df362cdef..e39ed949b0 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -75,6 +75,7 @@ class ProfilesModel(InstanceContainersModel): # The actual list of quality profiles come from the first extruder in the extruder list. result = QualityManager.getInstance().findAllQualitiesForMachineAndMaterials(global_stack_definition, materials) + for quality in QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders( global_container_stack, extruder_stacks): if quality not in result: diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 76bfe6a8c2..ff2339371c 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -179,10 +179,8 @@ Item anchors.top: parent.top anchors.topMargin: UM.Theme.getSize("sidebar_margin").height / 2 color: UM.Theme.getColor("text") - text: - { - return Cura.ProfilesModel.getItem(index).layer_height_without_unit - } + text: Cura.ProfilesModel.getItem(index).layer_height_without_unit + width: 1 x: { @@ -213,7 +211,7 @@ Item height: 2 color: UM.Theme.getColor("quality_slider_unavailable") //radius: parent.radius - y: 9 + y: 8.5 x: 0 } @@ -248,14 +246,10 @@ Item value: qualityRow.qualitySliderSelectedValue - width:{ - return qualityRow.qualitySliderStep * (qualityRow.availableTotalTicks) - } + width: qualityRow.qualitySliderStep * (qualityRow.availableTotalTicks) anchors.right: parent.right - anchors.rightMargin:{ - return qualityRow.sliderMarginRight - } + anchors.rightMargin: qualityRow.sliderMarginRight style: SliderStyle { @@ -265,6 +259,7 @@ Item color: UM.Theme.getColor("quality_slider_available") radius: 1 } + handle: Item { Rectangle { id: qualityhandleButton @@ -334,7 +329,7 @@ Item id: infillCellLeft anchors.top: qualityRow.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 anchors.left: parent.left width: UM.Theme.getSize("sidebar").width * .45 - UM.Theme.getSize("sidebar_margin").width @@ -386,6 +381,8 @@ Item anchors.top: selectedInfillRateText.bottom anchors.left: parent.left + anchors.right: infillIcon.left + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width height: UM.Theme.getSize("sidebar_margin").height width: infillCellRight.width - UM.Theme.getSize("sidebar_margin").width - style.handleWidth