diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index c773dae998..fc9c6fd2e6 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -207,6 +207,8 @@ class CuraApplication(QtApplication):
self._container_manager = None
self._object_manager = None
+ self._extruders_model = None
+ self._extruders_model_with_optional = None
self._build_plate_model = None
self._multi_build_plate_model = None
self._setting_visibility_presets_model = None
@@ -864,6 +866,19 @@ class CuraApplication(QtApplication):
self._object_manager = ObjectsModel.createObjectsModel()
return self._object_manager
+ @pyqtSlot(result = QObject)
+ def getExtrudersModel(self, *args) -> "ExtrudersModel":
+ if self._extruders_model is None:
+ self._extruders_model = ExtrudersModel(self)
+ return self._extruders_model
+
+ @pyqtSlot(result = QObject)
+ def getExtrudersModelWithOptional(self, *args) -> "ExtrudersModel":
+ if self._extruders_model_with_optional is None:
+ self._extruders_model_with_optional = ExtrudersModel(self)
+ self._extruders_model_with_optional.setAddOptionalExtruder(True)
+ return self._extruders_model_with_optional
+
@pyqtSlot(result = QObject)
def getMultiBuildPlateModel(self, *args) -> MultiBuildPlateModel:
if self._multi_build_plate_model is None:
diff --git a/cura/Machines/Models/NozzleModel.py b/cura/Machines/Models/NozzleModel.py
index 9d97106d6b..785ff5b9b9 100644
--- a/cura/Machines/Models/NozzleModel.py
+++ b/cura/Machines/Models/NozzleModel.py
@@ -33,8 +33,6 @@ class NozzleModel(ListModel):
def _update(self):
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
- self.items.clear()
-
global_stack = self._machine_manager.activeMachine
if global_stack is None:
self.setItems([])
diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py
index e19617c8ef..076cebf60d 100644
--- a/cura/Settings/ExtrudersModel.py
+++ b/cura/Settings/ExtrudersModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot, pyqtProperty, QTimer
+from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer
from typing import Iterable
from UM.i18n import i18nCatalog
@@ -78,8 +78,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
self._update_extruder_timer.setSingleShot(True)
self._update_extruder_timer.timeout.connect(self.__updateExtruders)
- self._simple_names = False
-
self._active_machine_extruders = [] # type: Iterable[ExtruderStack]
self._add_optional_extruder = False
@@ -101,21 +99,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
def addOptionalExtruder(self):
return self._add_optional_extruder
- ## Set the simpleNames property.
- def setSimpleNames(self, simple_names):
- if simple_names != self._simple_names:
- self._simple_names = simple_names
- self.simpleNamesChanged.emit()
- self._updateExtruders()
-
- ## Emitted when the simpleNames property changes.
- simpleNamesChanged = pyqtSignal()
-
- ## Whether or not the model should show all definitions regardless of visibility.
- @pyqtProperty(bool, fset = setSimpleNames, notify = simpleNamesChanged)
- def simpleNames(self):
- return self._simple_names
-
## Links to the stack-changed signal of the new extruders when an extruder
# is swapped out or added in the current machine.
#
@@ -221,7 +204,12 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
"enabled": True,
"color": "#ffffff",
"index": -1,
- "definition": ""
+ "definition": "",
+ "material": "",
+ "variant": "",
+ "stack": None,
+ "material_brand": "",
+ "color_name": "",
}
items.append(item)
if self._items != items:
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index c51c26f1b9..dbdad1dee0 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -88,12 +88,14 @@ class MachineManager(QObject):
self._onGlobalContainerChanged()
- ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged)
+ extruder_manager = self._application.getExtruderManager()
+
+ extruder_manager.activeExtruderChanged.connect(self._onActiveExtruderStackChanged)
self._onActiveExtruderStackChanged()
- ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeMaterialChanged)
- ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeVariantChanged)
- ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeQualityChanged)
+ extruder_manager.activeExtruderChanged.connect(self.activeMaterialChanged)
+ extruder_manager.activeExtruderChanged.connect(self.activeVariantChanged)
+ extruder_manager.activeExtruderChanged.connect(self.activeQualityChanged)
self.globalContainerChanged.connect(self.activeStackChanged)
self.globalValueChanged.connect(self.activeStackValueChanged)
diff --git a/cura/Settings/SimpleModeSettingsManager.py b/cura/Settings/SimpleModeSettingsManager.py
index fce43243bd..b22aea15ea 100644
--- a/cura/Settings/SimpleModeSettingsManager.py
+++ b/cura/Settings/SimpleModeSettingsManager.py
@@ -1,7 +1,8 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from typing import Set
-from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty
+from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot
from UM.Application import Application
@@ -16,12 +17,12 @@ class SimpleModeSettingsManager(QObject):
self._is_profile_user_created = False # True when profile was custom created by user
self._machine_manager.activeStackValueChanged.connect(self._updateIsProfileCustomized)
- self._machine_manager.activeQualityGroupChanged.connect(self._updateIsProfileUserCreated)
- self._machine_manager.activeQualityChangesGroupChanged.connect(self._updateIsProfileUserCreated)
+ self._machine_manager.activeQualityGroupChanged.connect(self.updateIsProfileUserCreated)
+ self._machine_manager.activeQualityChangesGroupChanged.connect(self.updateIsProfileUserCreated)
# update on create as the activeQualityChanged signal is emitted before this manager is created when Cura starts
self._updateIsProfileCustomized()
- self._updateIsProfileUserCreated()
+ self.updateIsProfileUserCreated()
isProfileCustomizedChanged = pyqtSignal()
isProfileUserCreatedChanged = pyqtSignal()
@@ -61,11 +62,12 @@ class SimpleModeSettingsManager(QObject):
def isProfileUserCreated(self):
return self._is_profile_user_created
- def _updateIsProfileUserCreated(self):
- quality_changes_keys = set()
+ @pyqtSlot()
+ def updateIsProfileUserCreated(self) -> None:
+ quality_changes_keys = set() # type: Set[str]
if not self._machine_manager.activeMachine:
- return False
+ return
global_stack = self._machine_manager.activeMachine
diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml
index c88a721a84..d8efe6f8b8 100644
--- a/plugins/MachineSettingsAction/MachineSettingsAction.qml
+++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml
@@ -13,7 +13,7 @@ import Cura 1.0 as Cura
Cura.MachineAction
{
id: base
- property var extrudersModel: Cura.ExtrudersModel{}
+ property var extrudersModel: CuraApplication.getExtrudersModel()
property int extruderTabsCount: 0
property var activeMachineId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.id : ""
diff --git a/plugins/MonitorStage/MonitorMain.qml b/plugins/MonitorStage/MonitorMain.qml
index 1f287fc0fa..8f113735ee 100644
--- a/plugins/MonitorStage/MonitorMain.qml
+++ b/plugins/MonitorStage/MonitorMain.qml
@@ -35,6 +35,6 @@ Item
property real maximumWidth: parent.width
property real maximumHeight: parent.height
- sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem: null
+ sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem : null
}
}
diff --git a/plugins/PrepareStage/PrepareMenu.qml b/plugins/PrepareStage/PrepareMenu.qml
index b7980bc30b..b62d65254d 100644
--- a/plugins/PrepareStage/PrepareMenu.qml
+++ b/plugins/PrepareStage/PrepareMenu.qml
@@ -100,7 +100,7 @@ Item
source: UM.Theme.getIcon("load")
width: UM.Theme.getSize("button_icon").width
height: UM.Theme.getSize("button_icon").height
- color: UM.Theme.getColor("toolbar_button_text")
+ color: UM.Theme.getColor("icon")
sourceSize.height: height
}
diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml
index 9f43252126..eec254c0dd 100644
--- a/plugins/SimulationView/SimulationViewMenuComponent.qml
+++ b/plugins/SimulationView/SimulationViewMenuComponent.qml
@@ -163,7 +163,7 @@ Cura.ExpandableComponent
Repeater
{
- model: Cura.ExtrudersModel{}
+ model: CuraApplication.getExtrudersModel()
CheckBox
{
diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py
index b9ad5c8829..797d6dabec 100644
--- a/plugins/SolidView/SolidView.py
+++ b/plugins/SolidView/SolidView.py
@@ -12,7 +12,6 @@ from UM.Math.Color import Color
from UM.View.GL.OpenGL import OpenGL
from cura.Settings.ExtruderManager import ExtruderManager
-from cura.Settings.ExtrudersModel import ExtrudersModel
import math
@@ -29,13 +28,16 @@ class SolidView(View):
self._non_printing_shader = None
self._support_mesh_shader = None
- self._extruders_model = ExtrudersModel()
+ self._extruders_model = None
self._theme = None
def beginRendering(self):
scene = self.getController().getScene()
renderer = self.getRenderer()
+ if not self._extruders_model:
+ self._extruders_model = Application.getInstance().getExtrudersModel()
+
if not self._theme:
self._theme = Application.getInstance().getTheme()
diff --git a/plugins/Toolbox/resources/qml/RatingWidget.qml b/plugins/Toolbox/resources/qml/RatingWidget.qml
new file mode 100644
index 0000000000..441cf238f7
--- /dev/null
+++ b/plugins/Toolbox/resources/qml/RatingWidget.qml
@@ -0,0 +1,106 @@
+import QtQuick 2.7
+import QtQuick.Controls 2.1
+import UM 1.0 as UM
+import Cura 1.1 as Cura
+Item
+{
+ id: ratingWidget
+
+ property real rating: 0
+ property int indexHovered: -1
+ property string packageId: ""
+
+ property int userRating: 0
+ property bool canRate: false
+
+ signal rated(int rating)
+
+ width: contentRow.width
+ height: contentRow.height
+ MouseArea
+ {
+ id: mouseArea
+ anchors.fill: parent
+ hoverEnabled: ratingWidget.canRate
+ acceptedButtons: Qt.NoButton
+ onExited:
+ {
+ if(ratingWidget.canRate)
+ {
+ ratingWidget.indexHovered = -1
+ }
+ }
+
+ Row
+ {
+ id: contentRow
+ height: childrenRect.height
+ Repeater
+ {
+ model: 5 // We need to get 5 stars
+ Button
+ {
+ id: control
+ hoverEnabled: true
+ onHoveredChanged:
+ {
+ if(hovered && ratingWidget.canRate)
+ {
+ indexHovered = index
+ }
+ }
+
+ ToolTip.visible: control.hovered && !ratingWidget.canRate
+ ToolTip.text: !Cura.API.account.isLoggedIn ? catalog.i18nc("@label", "You need to login first before you can rate"): catalog.i18nc("@label", "You need to install the package before you can rate")
+
+ property bool isStarFilled:
+ {
+ // If the entire widget is hovered, override the actual rating.
+ if(ratingWidget.indexHovered >= 0)
+ {
+ return indexHovered >= index
+ }
+
+ if(ratingWidget.userRating > 0)
+ {
+ return userRating >= index +1
+ }
+
+ return rating >= index + 1
+ }
+
+ contentItem: Item {}
+ height: UM.Theme.getSize("rating_star").height
+ width: UM.Theme.getSize("rating_star").width
+ background: UM.RecolorImage
+ {
+ source: UM.Theme.getIcon(control.isStarFilled ? "star_filled" : "star_empty")
+ sourceSize.width: width
+ sourceSize.height: height
+
+ // Unfilled stars should always have the default color. Only filled stars should change on hover
+ color:
+ {
+ if(!ratingWidget.canRate)
+ {
+ return UM.Theme.getColor("rating_star")
+ }
+ if((ratingWidget.indexHovered >= 0 || ratingWidget.userRating > 0) && isStarFilled)
+ {
+ return UM.Theme.getColor("primary")
+ }
+ return UM.Theme.getColor("rating_star")
+ }
+ }
+ onClicked:
+ {
+ if(ratingWidget.canRate)
+ {
+ rated(index + 1) // Notify anyone who cares about this.
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/Toolbox/resources/qml/SmallRatingWidget.qml b/plugins/Toolbox/resources/qml/SmallRatingWidget.qml
new file mode 100644
index 0000000000..4950ea9242
--- /dev/null
+++ b/plugins/Toolbox/resources/qml/SmallRatingWidget.qml
@@ -0,0 +1,36 @@
+import QtQuick 2.3
+import QtQuick.Controls 1.4
+import UM 1.1 as UM
+import Cura 1.1 as Cura
+
+Row
+{
+ id: rating
+ height: UM.Theme.getSize("rating_star").height
+ visible: model.average_rating > 0 //Has a rating at all.
+ spacing: UM.Theme.getSize("thick_lining").width
+ width: starIcon.width + spacing + numRatingsLabel.width
+ UM.RecolorImage
+ {
+ id: starIcon
+ source: UM.Theme.getIcon("star_filled")
+ color: model.user_rating == 0 ? UM.Theme.getColor("rating_star") : UM.Theme.getColor("primary")
+ height: UM.Theme.getSize("rating_star").height
+ width: UM.Theme.getSize("rating_star").width
+ sourceSize.height: height
+ sourceSize.width: width
+ }
+
+ Label
+ {
+ id: numRatingsLabel
+ text: model.average_rating != undefined ? model.average_rating.toFixed(1) + " (" + model.num_ratings + " " + catalog.i18nc("@label", "ratings") + ")": ""
+ verticalAlignment: Text.AlignVCenter
+ height: starIcon.height
+ width: contentWidth
+ anchors.verticalCenter: starIcon.verticalCenter
+ color: starIcon.color
+ font: UM.Theme.getFont("small")
+ renderType: Text.NativeRendering
+ }
+}
\ No newline at end of file
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
index 7983be8aef..b9b36cd878 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
@@ -6,6 +6,8 @@ import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import UM 1.1 as UM
+import Cura 1.1 as Cura
+
Item
{
id: page
@@ -24,7 +26,7 @@ Item
right: parent.right
rightMargin: UM.Theme.getSize("wide_margin").width
}
- height: UM.Theme.getSize("toolbox_detail_header").height
+ height: childrenRect.height + 3 * UM.Theme.getSize("default_margin").width
Rectangle
{
id: thumbnail
@@ -37,7 +39,7 @@ Item
leftMargin: UM.Theme.getSize("wide_margin").width
topMargin: UM.Theme.getSize("wide_margin").height
}
- color: "white" //Always a white background for image (regardless of theme).
+ color: UM.Theme.getColor("main_background")
Image
{
anchors.fill: parent
@@ -55,19 +57,23 @@ Item
top: thumbnail.top
left: thumbnail.right
leftMargin: UM.Theme.getSize("default_margin").width
- right: parent.right
- rightMargin: UM.Theme.getSize("wide_margin").width
- bottomMargin: UM.Theme.getSize("default_margin").height
}
text: details === null ? "" : (details.name || "")
font: UM.Theme.getFont("large")
color: UM.Theme.getColor("text")
- wrapMode: Text.WordWrap
- width: parent.width
- height: UM.Theme.getSize("toolbox_property_label").height
+ width: contentWidth
+ height: contentHeight
renderType: Text.NativeRendering
}
+ SmallRatingWidget
+ {
+ anchors.left: title.right
+ anchors.leftMargin: UM.Theme.getSize("default_margin").width
+ anchors.verticalCenter: title.verticalCenter
+ property var model: details
+ }
+
Column
{
id: properties
@@ -81,6 +87,13 @@ Item
width: childrenRect.width
height: childrenRect.height
Label
+ {
+ text: catalog.i18nc("@label", "Your rating") + ":"
+ font: UM.Theme.getFont("default")
+ color: UM.Theme.getColor("text_medium")
+ renderType: Text.NativeRendering
+ }
+ Label
{
text: catalog.i18nc("@label", "Version") + ":"
font: UM.Theme.getFont("default")
@@ -121,6 +134,48 @@ Item
}
spacing: Math.floor(UM.Theme.getSize("narrow_margin").height)
height: childrenRect.height
+ RatingWidget
+ {
+ id: rating
+ visible: details.type == "plugin"
+ packageId: details.id != undefined ? details.id: ""
+ userRating: details.user_rating != undefined ? details.user_rating: 0
+ canRate: toolbox.isInstalled(details.id) && Cura.API.account.isLoggedIn
+
+ onRated:
+ {
+ toolbox.ratePackage(details.id, rating)
+ // HACK: This is a far from optimal solution, but without major refactoring, this is the best we can
+ // do. Since a rework of this is scheduled, it shouldn't live that long...
+ var index = toolbox.pluginsAvailableModel.find("id", details.id)
+ if(index != -1)
+ {
+ if(details.user_rating == 0) // User never rated before.
+ {
+ toolbox.pluginsAvailableModel.setProperty(index, "num_ratings", details.num_ratings + 1)
+ }
+
+ toolbox.pluginsAvailableModel.setProperty(index, "user_rating", rating)
+
+
+ // Hack; This is because the current selection is an outdated copy, so we need to re-copy it.
+ base.selection = toolbox.pluginsAvailableModel.getItem(index)
+ return
+ }
+ index = toolbox.pluginsShowcaseModel.find("id", details.id)
+ if(index != -1)
+ {
+ if(details.user_rating == 0) // User never rated before.
+ {
+ toolbox.pluginsShowcaseModel.setProperty(index, "user_rating", rating)
+ }
+ toolbox.pluginsShowcaseModel.setProperty(index, "num_ratings", details.num_ratings + 1)
+
+ // Hack; This is because the current selection is an outdated copy, so we need to re-copy it.
+ base.selection = toolbox.pluginsShowcaseModel.getItem(index)
+ }
+ }
+ }
Label
{
text: details === null ? "" : (details.version || catalog.i18nc("@label", "Unknown"))
@@ -170,13 +225,6 @@ Item
renderType: Text.NativeRendering
}
}
- Rectangle
- {
- color: UM.Theme.getColor("lining")
- width: parent.width
- height: UM.Theme.getSize("default_lining").height
- anchors.bottom: parent.bottom
- }
}
ToolboxDetailList
{
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
index 357e9e9a72..58e4f070e0 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
@@ -6,6 +6,7 @@ import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3
import UM 1.1 as UM
+import Cura 1.1 as Cura
Item
{
@@ -14,94 +15,13 @@ Item
property int installedPackages: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0)
height: childrenRect.height
Layout.alignment: Qt.AlignTop | Qt.AlignLeft
- Rectangle
- {
- id: highlight
- anchors.fill: parent
- opacity: 0.0
- color: UM.Theme.getColor("primary")
- }
- Row
- {
- width: parent.width
- height: childrenRect.height
- spacing: Math.floor(UM.Theme.getSize("narrow_margin").width)
- Rectangle
- {
- id: thumbnail
- width: UM.Theme.getSize("toolbox_thumbnail_small").width
- height: UM.Theme.getSize("toolbox_thumbnail_small").height
- color: "white"
- border.width: UM.Theme.getSize("default_lining").width
- border.color: UM.Theme.getColor("lining")
- Image
- {
- anchors.centerIn: parent
- width: UM.Theme.getSize("toolbox_thumbnail_small").width - UM.Theme.getSize("wide_margin").width
- height: UM.Theme.getSize("toolbox_thumbnail_small").height - UM.Theme.getSize("wide_margin").width
- fillMode: Image.PreserveAspectFit
- source: model.icon_url || "../images/logobot.svg"
- mipmap: true
- }
- UM.RecolorImage
- {
- width: (parent.width * 0.4) | 0
- height: (parent.height * 0.4) | 0
- anchors
- {
- bottom: parent.bottom
- right: parent.right
- }
- sourceSize.height: height
- visible: installedPackages != 0
- color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border")
- source: "../images/installed_check.svg"
- }
- }
- Column
- {
- width: parent.width - thumbnail.width - parent.spacing
- spacing: Math.floor(UM.Theme.getSize("narrow_margin").width)
- anchors.top: parent.top
- anchors.topMargin: UM.Theme.getSize("default_margin").height
- Label
- {
- id: name
- text: model.name
- width: parent.width
- wrapMode: Text.WordWrap
- color: UM.Theme.getColor("text")
- font: UM.Theme.getFont("default_bold")
- renderType: Text.NativeRendering
- }
- Label
- {
- id: info
- text: model.description
- maximumLineCount: 2
- elide: Text.ElideRight
- width: parent.width
- wrapMode: Text.WordWrap
- color: UM.Theme.getColor("text_medium")
- font: UM.Theme.getFont("default")
- renderType: Text.NativeRendering
- }
- }
- }
+
MouseArea
{
anchors.fill: parent
hoverEnabled: true
- onEntered:
- {
- thumbnail.border.color = UM.Theme.getColor("primary")
- highlight.opacity = 0.1
- }
- onExited:
- {
- thumbnail.border.color = UM.Theme.getColor("lining")
- highlight.opacity = 0.0
- }
+ onEntered: thumbnail.border.color = UM.Theme.getColor("primary")
+ onExited: thumbnail.border.color = UM.Theme.getColor("lining")
onClicked:
{
base.selection = model
@@ -131,4 +51,83 @@ Item
}
}
}
+
+ Rectangle
+ {
+ id: thumbnail
+ width: UM.Theme.getSize("toolbox_thumbnail_small").width
+ height: UM.Theme.getSize("toolbox_thumbnail_small").height
+ color: UM.Theme.getColor("main_background")
+ border.width: UM.Theme.getSize("default_lining").width
+ border.color: UM.Theme.getColor("lining")
+
+ Image
+ {
+ anchors.centerIn: parent
+ width: UM.Theme.getSize("toolbox_thumbnail_small").width - UM.Theme.getSize("wide_margin").width
+ height: UM.Theme.getSize("toolbox_thumbnail_small").height - UM.Theme.getSize("wide_margin").width
+ fillMode: Image.PreserveAspectFit
+ source: model.icon_url || "../images/logobot.svg"
+ mipmap: true
+ }
+ UM.RecolorImage
+ {
+ width: (parent.width * 0.4) | 0
+ height: (parent.height * 0.4) | 0
+ anchors
+ {
+ bottom: parent.bottom
+ right: parent.right
+ }
+ sourceSize.height: height
+ visible: installedPackages != 0
+ color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border")
+ source: "../images/installed_check.svg"
+ }
+ }
+ Item
+ {
+ anchors
+ {
+ left: thumbnail.right
+ leftMargin: Math.floor(UM.Theme.getSize("narrow_margin").width)
+ right: parent.right
+ top: parent.top
+ bottom: parent.bottom
+ }
+
+ Label
+ {
+ id: name
+ text: model.name
+ width: parent.width
+ elide: Text.ElideRight
+ color: UM.Theme.getColor("text")
+ font: UM.Theme.getFont("default_bold")
+ }
+ Label
+ {
+ id: info
+ text: model.description
+ elide: Text.ElideRight
+ width: parent.width
+ wrapMode: Text.WordWrap
+ color: UM.Theme.getColor("text_medium")
+ font: UM.Theme.getFont("default")
+ anchors.top: name.bottom
+ anchors.bottom: rating.top
+ verticalAlignment: Text.AlignVCenter
+ maximumLineCount: 2
+ }
+ SmallRatingWidget
+ {
+ id: rating
+ anchors
+ {
+ bottom: parent.bottom
+ left: parent.left
+ right: parent.right
+ }
+ }
+ }
}
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml
index d1130cf63f..bb4f34163d 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml
@@ -13,91 +13,78 @@ Rectangle
property int installedPackages: toolbox.viewCategory == "material" ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0)
id: tileBase
width: UM.Theme.getSize("toolbox_thumbnail_large").width + (2 * UM.Theme.getSize("default_lining").width)
- height: thumbnail.height + packageNameBackground.height + (2 * UM.Theme.getSize("default_lining").width)
+ height: thumbnail.height + packageName.height + rating.height + UM.Theme.getSize("default_margin").width
border.width: UM.Theme.getSize("default_lining").width
border.color: UM.Theme.getColor("lining")
- color: "transparent"
- Rectangle
+ color: UM.Theme.getColor("main_background")
+ Image
{
id: thumbnail
- color: "white"
- width: UM.Theme.getSize("toolbox_thumbnail_large").width
- height: UM.Theme.getSize("toolbox_thumbnail_large").height
+ height: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height
+ width: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height
+ fillMode: Image.PreserveAspectFit
+ source: model.icon_url || "../images/logobot.svg"
+ mipmap: true
anchors
{
top: parent.top
+ topMargin: UM.Theme.getSize("default_margin").height
horizontalCenter: parent.horizontalCenter
- topMargin: UM.Theme.getSize("default_lining").width
}
- Image
+ }
+ Label
+ {
+ id: packageName
+ text: model.name
+ anchors
{
- anchors.centerIn: parent
- width: UM.Theme.getSize("toolbox_thumbnail_large").width - 2 * UM.Theme.getSize("default_margin").width
- height: UM.Theme.getSize("toolbox_thumbnail_large").height - 2 * UM.Theme.getSize("default_margin").height
- fillMode: Image.PreserveAspectFit
- source: model.icon_url || "../images/logobot.svg"
- mipmap: true
+ horizontalCenter: parent.horizontalCenter
+ top: thumbnail.bottom
}
- UM.RecolorImage
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ renderType: Text.NativeRendering
+ height: UM.Theme.getSize("toolbox_heading_label").height
+ width: parent.width - UM.Theme.getSize("default_margin").width
+ wrapMode: Text.WordWrap
+ font: UM.Theme.getFont("medium_bold")
+ }
+ UM.RecolorImage
+ {
+ width: (parent.width * 0.20) | 0
+ height: width
+ anchors
{
- width: (parent.width * 0.3) | 0
- height: (parent.height * 0.3) | 0
- anchors
- {
- bottom: parent.bottom
- right: parent.right
- bottomMargin: UM.Theme.getSize("default_lining").width
- }
- visible: installedPackages != 0
- color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border")
- source: "../images/installed_check.svg"
+ bottom: bottomBorder.top
+ right: parent.right
}
+ visible: installedPackages != 0
+ color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border")
+ source: "../images/installed_check.svg"
+ }
+
+ SmallRatingWidget
+ {
+ id: rating
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: UM.Theme.getSize("narrow_margin").height
+ anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle
{
- id: packageNameBackground
+ id: bottomBorder
color: UM.Theme.getColor("primary")
- anchors
- {
- top: thumbnail.bottom
- horizontalCenter: parent.horizontalCenter
- }
- height: UM.Theme.getSize("toolbox_heading_label").height
+ anchors.bottom: parent.bottom
width: parent.width
- Label
- {
- id: packageName
- text: model.name
- anchors
- {
- horizontalCenter: parent.horizontalCenter
- }
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- height: UM.Theme.getSize("toolbox_heading_label").height
- width: parent.width
- wrapMode: Text.WordWrap
- color: UM.Theme.getColor("button_text")
- font: UM.Theme.getFont("medium_bold")
- renderType: Text.NativeRendering
- }
+ height: UM.Theme.getSize("toolbox_header_highlight").height
}
+
MouseArea
{
anchors.fill: parent
hoverEnabled: true
- onEntered:
- {
- packageName.color = UM.Theme.getColor("button_text_hover")
- packageNameBackground.color = UM.Theme.getColor("primary_hover")
- tileBase.border.color = UM.Theme.getColor("primary_hover")
- }
- onExited:
- {
- packageName.color = UM.Theme.getColor("button_text")
- packageNameBackground.color = UM.Theme.getColor("primary")
- tileBase.border.color = UM.Theme.getColor("lining")
- }
+ onEntered: tileBase.border.color = UM.Theme.getColor("primary")
+ onExited: tileBase.border.color = UM.Theme.getColor("lining")
onClicked:
{
base.selection = model
diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py
index bcc02955a2..d94fdf6bb7 100644
--- a/plugins/Toolbox/src/PackagesModel.py
+++ b/plugins/Toolbox/src/PackagesModel.py
@@ -41,6 +41,9 @@ class PackagesModel(ListModel):
self.addRoleName(Qt.UserRole + 20, "links")
self.addRoleName(Qt.UserRole + 21, "website")
self.addRoleName(Qt.UserRole + 22, "login_required")
+ self.addRoleName(Qt.UserRole + 23, "average_rating")
+ self.addRoleName(Qt.UserRole + 24, "num_ratings")
+ self.addRoleName(Qt.UserRole + 25, "user_rating")
# List of filters for queries. The result is the union of the each list of results.
self._filter = {} # type: Dict[str, str]
@@ -101,7 +104,10 @@ class PackagesModel(ListModel):
"tags": package["tags"] if "tags" in package else [],
"links": links_dict,
"website": package["website"] if "website" in package else None,
- "login_required": "login-required" in package.get("tags", [])
+ "login_required": "login-required" in package.get("tags", []),
+ "average_rating": float(package.get("rating", {}).get("average", 0)),
+ "num_ratings": package.get("rating", {}).get("count", 0),
+ "user_rating": package.get("rating", {}).get("user_rating", 0)
})
# Filter on all the key-word arguments.
diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py
index d957b7aae1..05669e55d8 100644
--- a/plugins/Toolbox/src/Toolbox.py
+++ b/plugins/Toolbox/src/Toolbox.py
@@ -13,7 +13,6 @@ from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkRepl
from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry
from UM.Extension import Extension
-from UM.Qt.ListModel import ListModel
from UM.i18n import i18nCatalog
from UM.Version import Version
@@ -50,17 +49,10 @@ class Toolbox(QObject, Extension):
self._download_progress = 0 # type: float
self._is_downloading = False # type: bool
self._network_manager = None # type: Optional[QNetworkAccessManager]
- self._request_header = [
- b"User-Agent",
- str.encode(
- "%s/%s (%s %s)" % (
- self._application.getApplicationName(),
- self._application.getVersion(),
- platform.system(),
- platform.machine(),
- )
- )
- ]
+ self._request_headers = [] # type: List[Tuple[bytes, bytes]]
+ self._updateRequestHeader()
+
+
self._request_urls = {} # type: Dict[str, QUrl]
self._to_update = [] # type: List[str] # Package_ids that are waiting to be updated
self._old_plugin_ids = set() # type: Set[str]
@@ -115,6 +107,7 @@ class Toolbox(QObject, Extension):
self._restart_dialog_message = "" # type: str
self._application.initializationFinished.connect(self._onAppInitialized)
+ self._application.getCuraAPI().account.loginStateChanged.connect(self._updateRequestHeader)
# Signals:
# --------------------------------------------------------------------------
@@ -134,12 +127,38 @@ class Toolbox(QObject, Extension):
showLicenseDialog = pyqtSignal()
uninstallVariablesChanged = pyqtSignal()
+ def _updateRequestHeader(self):
+ self._request_headers = [
+ (b"User-Agent",
+ str.encode(
+ "%s/%s (%s %s)" % (
+ self._application.getApplicationName(),
+ self._application.getVersion(),
+ platform.system(),
+ platform.machine(),
+ )
+ ))
+ ]
+ access_token = self._application.getCuraAPI().account.accessToken
+ if access_token:
+ self._request_headers.append((b"Authorization", "Bearer {}".format(access_token).encode()))
+
def _resetUninstallVariables(self) -> None:
self._package_id_to_uninstall = None # type: Optional[str]
self._package_name_to_uninstall = ""
self._package_used_materials = [] # type: List[Tuple[GlobalStack, str, str]]
self._package_used_qualities = [] # type: List[Tuple[GlobalStack, str, str]]
+ @pyqtSlot(str, int)
+ def ratePackage(self, package_id: str, rating: int) -> None:
+ url = QUrl("{base_url}/packages/{package_id}/ratings".format(base_url=self._api_url, package_id = package_id))
+
+ self._rate_request = QNetworkRequest(url)
+ for header_name, header_value in self._request_headers:
+ cast(QNetworkRequest, self._rate_request).setRawHeader(header_name, header_value)
+ data = "{\"data\": {\"cura_version\": \"%s\", \"rating\": %i}}" % (Version(self._application.getVersion()), rating)
+ self._rate_reply = cast(QNetworkAccessManager, self._network_manager).put(self._rate_request, data.encode())
+
@pyqtSlot(result = str)
def getLicenseDialogPluginName(self) -> str:
return self._license_dialog_plugin_name
@@ -563,7 +582,8 @@ class Toolbox(QObject, Extension):
def _makeRequestByType(self, request_type: str) -> None:
Logger.log("i", "Requesting %s metadata from server.", request_type)
request = QNetworkRequest(self._request_urls[request_type])
- request.setRawHeader(*self._request_header)
+ for header_name, header_value in self._request_headers:
+ request.setRawHeader(header_name, header_value)
if self._network_manager:
self._network_manager.get(request)
@@ -578,7 +598,8 @@ class Toolbox(QObject, Extension):
if hasattr(QNetworkRequest, "RedirectPolicyAttribute"):
# Patch for Qt 5.9+
cast(QNetworkRequest, self._download_request).setAttribute(QNetworkRequest.RedirectPolicyAttribute, True)
- cast(QNetworkRequest, self._download_request).setRawHeader(*self._request_header)
+ for header_name, header_value in self._request_headers:
+ cast(QNetworkRequest, self._download_request).setRawHeader(header_name, header_value)
self._download_reply = cast(QNetworkAccessManager, self._network_manager).get(self._download_request)
self.setDownloadProgress(0)
self.setIsDownloading(True)
@@ -660,7 +681,7 @@ class Toolbox(QObject, Extension):
else:
self.setViewPage("errored")
self.resetDownload()
- else:
+ elif reply.operation() == QNetworkAccessManager.PutOperation:
# Ignore any operation that is not a get operation
pass
diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml
index 5eaeff2e84..d8c5d1ec28 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml
@@ -97,6 +97,7 @@ Item
return ""
}
visible: printJob
+ width: 120 * screenScaleFactor // TODO: Theme!
// FIXED-LINE-HEIGHT:
height: 18 * screenScaleFactor // TODO: Theme!
diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml
index cd78f1b11f..80a089cc2a 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml
@@ -12,7 +12,19 @@ import UM 1.2 as UM
Item
{
// The printer name
- property alias text: printerNameLabel.text;
+ property var text: ""
+ property var tagText: {
+ switch(text) {
+ case "Ultimaker 3":
+ return "UM 3"
+ case "Ultimaker 3 Extended":
+ return "UM 3 EXT"
+ case "Ultimaker S5":
+ return "UM S5"
+ default:
+ return text
+ }
+ }
implicitHeight: 18 * screenScaleFactor // TODO: Theme!
implicitWidth: printerNameLabel.contentWidth + 12 // TODO: Theme!
@@ -28,7 +40,7 @@ Item
id: printerNameLabel
anchors.centerIn: parent
color: "#535369" // TODO: Theme!
- text: ""
+ text: tagText
font.pointSize: 10
}
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml
new file mode 100644
index 0000000000..884dbabc2f
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml
@@ -0,0 +1,167 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
+import QtQuick 2.2
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles 1.4
+import UM 1.3 as UM
+import Cura 1.0 as Cura
+
+/**
+ * This component contains the print job queue, extracted from the primary
+ * MonitorStage.qml file not for reusability but simply to keep it lean and more
+ * readable.
+ */
+Item
+{
+ Label
+ {
+ id: queuedLabel
+ anchors
+ {
+ left: queuedPrintJobs.left
+ top: parent.top
+ }
+ color: UM.Theme.getColor("text")
+ font: UM.Theme.getFont("large_nonbold")
+ text: catalog.i18nc("@label", "Queued")
+ }
+
+ Item
+ {
+ id: manageQueueLabel
+ anchors
+ {
+ right: queuedPrintJobs.right
+ verticalCenter: queuedLabel.verticalCenter
+ }
+ height: 18 * screenScaleFactor // TODO: Theme!
+ width: childrenRect.width
+
+ UM.RecolorImage
+ {
+ id: externalLinkIcon
+ anchors.verticalCenter: manageQueueLabel.verticalCenter
+ color: UM.Theme.getColor("primary")
+ source: "../svg/icons/external_link.svg"
+ width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
+ height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
+ }
+ Label
+ {
+ id: manageQueueText
+ anchors
+ {
+ left: externalLinkIcon.right
+ leftMargin: 6 * screenScaleFactor // TODO: Theme!
+ verticalCenter: externalLinkIcon.verticalCenter
+ }
+ color: UM.Theme.getColor("primary")
+ font: UM.Theme.getFont("default") // 12pt, regular
+ linkColor: UM.Theme.getColor("primary")
+ text: catalog.i18nc("@label link to connect manager", "Manage queue in Cura Connect")
+ }
+ }
+
+ MouseArea
+ {
+ anchors.fill: manageQueueLabel
+ hoverEnabled: true
+ onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel()
+ onEntered:
+ {
+ manageQueueText.font.underline = true
+ }
+ onExited:
+ {
+ manageQueueText.font.underline = false
+ }
+ }
+
+ Row
+ {
+ id: printJobQueueHeadings
+ anchors
+ {
+ left: queuedPrintJobs.left
+ leftMargin: 6 * screenScaleFactor // TODO: Theme!
+ top: queuedLabel.bottom
+ topMargin: 24 * screenScaleFactor // TODO: Theme!
+ }
+ spacing: 18 * screenScaleFactor // TODO: Theme!
+
+ Label
+ {
+ text: catalog.i18nc("@label", "Print jobs")
+ color: "#666666"
+ elide: Text.ElideRight
+ font: UM.Theme.getFont("medium") // 14pt, regular
+ anchors.verticalCenter: parent.verticalCenter
+ width: 284 * screenScaleFactor // TODO: Theme! (Should match column size)
+
+ // FIXED-LINE-HEIGHT:
+ height: 18 * screenScaleFactor // TODO: Theme!
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ Label
+ {
+ text: catalog.i18nc("@label", "Total print time")
+ color: "#666666"
+ elide: Text.ElideRight
+ font: UM.Theme.getFont("medium") // 14pt, regular
+ anchors.verticalCenter: parent.verticalCenter
+ width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
+
+ // FIXED-LINE-HEIGHT:
+ height: 18 * screenScaleFactor // TODO: Theme!
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ Label
+ {
+ text: catalog.i18nc("@label", "Waiting for")
+ color: "#666666"
+ elide: Text.ElideRight
+ font: UM.Theme.getFont("medium") // 14pt, regular
+ anchors.verticalCenter: parent.verticalCenter
+ width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
+
+ // FIXED-LINE-HEIGHT:
+ height: 18 * screenScaleFactor // TODO: Theme!
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ ScrollView
+ {
+ id: queuedPrintJobs
+ anchors
+ {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ top: printJobQueueHeadings.bottom
+ topMargin: 12 * screenScaleFactor // TODO: Theme!
+ }
+ style: UM.Theme.styles.scrollview
+ visible: OutputDevice.receivedPrintJobs
+ width: parent.width
+
+ ListView
+ {
+ id: printJobList
+ anchors.fill: parent
+ delegate: MonitorPrintJobCard
+ {
+ anchors
+ {
+ left: parent.left
+ right: parent.right
+ }
+ printJob: modelData
+ }
+ model: OutputDevice.queuedPrintJobs
+ spacing: 6 // TODO: Theme!
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml
index 4d59e0eb6b..0333e1447c 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml
@@ -8,16 +8,13 @@ import UM 1.3 as UM
import Cura 1.0 as Cura
import QtGraphicalEffects 1.0
-// Root component for the monitor tab (stage)
+// This is the root component for the monitor stage.
Component
{
Item
{
id: monitorFrame
- property var emphasisColor: UM.Theme.getColor("setting_control_border_highlight")
- property var cornerRadius: UM.Theme.getSize("monitor_corner_radius").width
-
height: maximumHeight
onVisibleChanged:
{
@@ -34,16 +31,20 @@ Component
name: "cura"
}
- LinearGradient {
+ LinearGradient
+ {
anchors.fill: parent
- gradient: Gradient {
- GradientStop {
+ gradient: Gradient
+ {
+ GradientStop
+ {
position: 0.0
- color: "#f6f6f6"
+ color: "#f6f6f6" // TODO: Theme!
}
- GradientStop {
+ GradientStop
+ {
position: 1.0
- color: "#ffffff"
+ color: "#ffffff" // TODO: Theme!
}
}
}
@@ -76,170 +77,21 @@ Component
}
}
- Item
+ MonitorQueue
{
id: queue
width: Math.min(834 * screenScaleFactor, maximumWidth)
-
- anchors {
+ anchors
+ {
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
top: printers.bottom
topMargin: 48 * screenScaleFactor // TODO: Theme!
}
-
- Label
- {
- id: queuedLabel
- anchors
- {
- left: queuedPrintJobs.left
- top: parent.top
- }
- color: UM.Theme.getColor("text")
- font: UM.Theme.getFont("large_nonbold")
- text: catalog.i18nc("@label", "Queued")
- }
-
- Item
- {
- id: manageQueueLabel
- anchors
- {
- right: queuedPrintJobs.right
- verticalCenter: queuedLabel.verticalCenter
- }
- height: 18 * screenScaleFactor // TODO: Theme!
- width: childrenRect.width
-
- UM.RecolorImage
- {
- id: externalLinkIcon
- anchors.verticalCenter: manageQueueLabel.verticalCenter
- color: UM.Theme.getColor("primary")
- source: "../svg/icons/external_link.svg"
- width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
- height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
- }
- Label
- {
- id: manageQueueText
- anchors
- {
- left: externalLinkIcon.right
- leftMargin: 6 * screenScaleFactor // TODO: Theme!
- verticalCenter: externalLinkIcon.verticalCenter
- }
- color: UM.Theme.getColor("primary")
- font: UM.Theme.getFont("default") // 12pt, regular
- linkColor: UM.Theme.getColor("primary")
- text: catalog.i18nc("@label link to connect manager", "Manage queue in Cura Connect")
- }
- }
-
- MouseArea
- {
- anchors.fill: manageQueueLabel
- hoverEnabled: true
- onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel()
- onEntered:
- {
- manageQueueText.font.underline = true
- }
- onExited:
- {
- manageQueueText.font.underline = false
- }
- }
-
- Row
- {
- id: printJobQueueHeadings
- anchors
- {
- left: queuedPrintJobs.left
- leftMargin: 6 * screenScaleFactor // TODO: Theme!
- top: queuedLabel.bottom
- topMargin: 24 * screenScaleFactor // TODO: Theme!
- }
- spacing: 18 * screenScaleFactor // TODO: Theme!
-
- Label
- {
- text: catalog.i18nc("@label", "Print jobs")
- color: "#666666"
- elide: Text.ElideRight
- font: UM.Theme.getFont("medium") // 14pt, regular
- anchors.verticalCenter: parent.verticalCenter
- width: 284 * screenScaleFactor // TODO: Theme! (Should match column size)
-
- // FIXED-LINE-HEIGHT:
- height: 18 * screenScaleFactor // TODO: Theme!
- verticalAlignment: Text.AlignVCenter
- }
-
- Label
- {
- text: catalog.i18nc("@label", "Total print time")
- color: "#666666"
- elide: Text.ElideRight
- font: UM.Theme.getFont("medium") // 14pt, regular
- anchors.verticalCenter: parent.verticalCenter
- width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
-
- // FIXED-LINE-HEIGHT:
- height: 18 * screenScaleFactor // TODO: Theme!
- verticalAlignment: Text.AlignVCenter
- }
-
- Label
- {
- text: catalog.i18nc("@label", "Waiting for")
- color: "#666666"
- elide: Text.ElideRight
- font: UM.Theme.getFont("medium") // 14pt, regular
- anchors.verticalCenter: parent.verticalCenter
- width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
-
- // FIXED-LINE-HEIGHT:
- height: 18 * screenScaleFactor // TODO: Theme!
- verticalAlignment: Text.AlignVCenter
- }
- }
-
- ScrollView
- {
- id: queuedPrintJobs
- anchors {
- bottom: parent.bottom
- horizontalCenter: parent.horizontalCenter
- top: printJobQueueHeadings.bottom
- topMargin: 12 * screenScaleFactor // TODO: Theme!
- }
- style: UM.Theme.styles.scrollview
- visible: OutputDevice.receivedPrintJobs
- width: parent.width
-
- ListView
- {
- id: printJobList
- anchors.fill: parent
- delegate: MonitorPrintJobCard
- {
- anchors
- {
- left: parent.left
- right: parent.right
- }
- printJob: modelData
- }
- model: OutputDevice.queuedPrintJobs
- spacing: 6
- }
- }
}
- PrinterVideoStream {
+ PrinterVideoStream
+ {
anchors.fill: parent
cameraUrl: OutputDevice.activeCameraUrl
visible: OutputDevice.activeCameraUrl != ""
diff --git a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
index 643c8164a7..320201e165 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
@@ -13,8 +13,40 @@ Item {
property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId;
property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null;
property bool printerConnected: Cura.MachineManager.printerConnected;
- property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands;
- property bool authenticationRequested: printerConnected && (Cura.MachineManager.printerOutputDevices[0].authenticationState == 2 || Cura.MachineManager.printerOutputDevices[0].authenticationState == 5); // AuthState.AuthenticationRequested or AuthenticationReceived.
+ property bool printerAcceptsCommands:
+ {
+ if (printerConnected && Cura.MachineManager.printerOutputDevices[0])
+ {
+ return Cura.MachineManager.printerOutputDevices[0].acceptsCommands
+ }
+ return false
+ }
+ property bool authenticationRequested:
+ {
+ if (printerConnected && Cura.MachineManager.printerOutputDevices[0])
+ {
+ var device = Cura.MachineManager.printerOutputDevices[0]
+ // AuthState.AuthenticationRequested or AuthState.AuthenticationReceived
+ return device.authenticationState == 2 || device.authenticationState == 5
+ }
+ return false
+ }
+ property var materialNames:
+ {
+ if (printerConnected && Cura.MachineManager.printerOutputDevices[0])
+ {
+ return Cura.MachineManager.printerOutputDevices[0].materialNames
+ }
+ return null
+ }
+ property var hotendIds:
+ {
+ if (printerConnected && Cura.MachineManager.printerOutputDevices[0])
+ {
+ return Cura.MachineManager.printerOutputDevices[0].hotendIds
+ }
+ return null
+ }
UM.I18nCatalog {
id: catalog;
@@ -83,9 +115,7 @@ Item {
Column {
Repeater {
- model: Cura.ExtrudersModel {
- simpleNames: true;
- }
+ model: CuraApplication.getExtrudersModel()
Label {
text: model.name;
@@ -96,7 +126,7 @@ Item {
Column {
Repeater {
id: nozzleColumn;
- model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].hotendIds : null;
+ model: hotendIds
Label {
text: nozzleColumn.model[index];
@@ -107,7 +137,7 @@ Item {
Column {
Repeater {
id: materialColumn;
- model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].materialNames : null;
+ model: materialNames
Label {
text: materialColumn.model[index];
diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml
index 7177120f35..3a9552cd9c 100644
--- a/resources/qml/ActionButton.qml
+++ b/resources/qml/ActionButton.qml
@@ -43,12 +43,13 @@ Button
contentItem: Row
{
+ spacing: UM.Theme.getSize("narrow_margin").width
//Left side icon. Only displayed if !isIconOnRightSide.
UM.RecolorImage
{
id: buttonIconLeft
source: ""
- height: buttonText.height
+ height: UM.Theme.getSize("action_button_icon").height
width: visible ? height : 0
sourceSize.width: width
sourceSize.height: height
@@ -62,7 +63,7 @@ Button
id: buttonText
text: button.text
color: button.enabled ? (button.hovered ? button.textHoverColor : button.textColor): button.textDisabledColor
- font: UM.Theme.getFont("action_button")
+ font: UM.Theme.getFont("medium")
visible: text != ""
renderType: Text.NativeRendering
anchors.verticalCenter: parent.verticalCenter
@@ -76,7 +77,7 @@ Button
{
id: buttonIconRight
source: buttonIconLeft.source
- height: buttonText.height
+ height: UM.Theme.getSize("action_button_icon").height
width: visible ? height : 0
sourceSize.width: width
sourceSize.height: height
diff --git a/resources/qml/ActionPanel/OutputProcessWidget.qml b/resources/qml/ActionPanel/OutputProcessWidget.qml
index 3f53abf28f..eb6dc5b417 100644
--- a/resources/qml/ActionPanel/OutputProcessWidget.qml
+++ b/resources/qml/ActionPanel/OutputProcessWidget.qml
@@ -41,7 +41,7 @@ Column
{
left: parent.left
right: printInformationPanel.left
- rightMargin: UM.Theme.getSize("thin_margin").height
+ rightMargin: printInformationPanel.visible ? UM.Theme.getSize("thin_margin").width : 0
}
Cura.IconWithText
@@ -119,9 +119,9 @@ Column
}
height: UM.Theme.getSize("action_button").height
- leftPadding: UM.Theme.getSize("default_margin").width
- rightPadding: UM.Theme.getSize("default_margin").width
text: catalog.i18nc("@button", "Preview")
+ tooltip: text
+ fixedWidthMode: true
onClicked: UM.Controller.setActiveStage("PreviewStage")
visible: UM.Controller.activeStage != null && UM.Controller.activeStage.stageId != "PreviewStage"
diff --git a/resources/qml/ActionPanel/PrintInformationWidget.qml b/resources/qml/ActionPanel/PrintInformationWidget.qml
index 554273a818..2e108b05d7 100644
--- a/resources/qml/ActionPanel/PrintInformationWidget.qml
+++ b/resources/qml/ActionPanel/PrintInformationWidget.qml
@@ -12,10 +12,10 @@ UM.RecolorImage
id: widget
source: UM.Theme.getIcon("info")
- width: UM.Theme.getSize("section_icon").width
+ width: visible ? UM.Theme.getSize("section_icon").width : 0
height: UM.Theme.getSize("section_icon").height
- color: popup.opened ? UM.Theme.getColor("primary") : UM.Theme.getColor("text_medium")
+ color: UM.Theme.getColor("icon")
MouseArea
{
diff --git a/resources/qml/ActionPanel/SliceProcessWidget.qml b/resources/qml/ActionPanel/SliceProcessWidget.qml
index 18caeafb40..3756d0d452 100644
--- a/resources/qml/ActionPanel/SliceProcessWidget.qml
+++ b/resources/qml/ActionPanel/SliceProcessWidget.qml
@@ -60,7 +60,7 @@ Column
text: catalog.i18nc("@label:PrintjobStatus", "Unable to Slice")
source: UM.Theme.getIcon("warning")
- color: UM.Theme.getColor("warning")
+ iconColor: UM.Theme.getColor("warning")
}
// Progress bar, only visible when the backend is in the process of slice the printjob
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index 2b6f989e0b..8ab943b93b 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -252,7 +252,7 @@ UM.MainWindow
anchors
{
// Align to the top of the stageMenu since the stageMenu may not exist
- top: parent.top
+ top: stageMenu.source ? stageMenu.verticalCenter : parent.top
left: parent.left
right: parent.right
bottom: parent.bottom
diff --git a/resources/qml/ExtruderIcon.qml b/resources/qml/ExtruderIcon.qml
index bb0b347b7e..fcc49c9040 100644
--- a/resources/qml/ExtruderIcon.qml
+++ b/resources/qml/ExtruderIcon.qml
@@ -49,6 +49,7 @@ Item
anchors.centerIn: parent
text: index + 1
font: UM.Theme.getFont("very_small")
+ color: UM.Theme.getColor("text")
width: contentWidth
height: contentHeight
visible: extruderEnabled
diff --git a/resources/qml/IconWithText.qml b/resources/qml/IconWithText.qml
index 5530740040..24b6dc7fe2 100644
--- a/resources/qml/IconWithText.qml
+++ b/resources/qml/IconWithText.qml
@@ -15,10 +15,10 @@ Item
{
property alias source: icon.source
property alias iconSize: icon.width
+ property alias iconColor: icon.color
property alias color: label.color
property alias text: label.text
property alias font: label.font
-
property real margin: UM.Theme.getSize("narrow_margin").width
// These properties can be used in combination with layouts.
@@ -37,9 +37,9 @@ Item
{
id: icon
width: UM.Theme.getSize("section_icon").width
- height: UM.Theme.getSize("section_icon").height
+ height: width
- color: label.color
+ color: UM.Theme.getColor("icon")
anchors
{
diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml
index 8f6957d9cd..eecf2a1e73 100644
--- a/resources/qml/MainWindow/MainWindowHeader.qml
+++ b/resources/qml/MainWindow/MainWindowHeader.qml
@@ -54,7 +54,7 @@ Item
{
text: model.name.toUpperCase()
checkable: true
- checked: UM.Controller.activeStage != null ? model.id == UM.Controller.activeStage.stageId : false
+ checked: UM.Controller.activeStage !== null && model.id == UM.Controller.activeStage.stageId
anchors.verticalCenter: parent.verticalCenter
exclusiveGroup: mainWindowHeaderMenuGroup
diff --git a/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml
index 68c56c7c4b..a3ed5040b7 100644
--- a/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml
+++ b/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml
@@ -16,8 +16,8 @@ Item
{
id: header
text: catalog.i18nc("@header", "Configurations")
- font: UM.Theme.getFont("large")
- color: UM.Theme.getColor("text")
+ font: UM.Theme.getFont("default")
+ color: UM.Theme.getColor("small_button_text")
height: contentHeight
renderType: Text.NativeRendering
diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml
index 728a0cbe9a..862e1475a9 100644
--- a/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml
+++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml
@@ -14,122 +14,117 @@ Button
property var configuration: null
hoverEnabled: true
- height: background.height
-
background: Rectangle
{
- height: childrenRect.height
color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
- border.color: (parent.checked || parent.hovered) ? UM.Theme.getColor("primary") : UM.Theme.getColor("lining")
- border.width: parent.checked ? UM.Theme.getSize("thick_lining").width : UM.Theme.getSize("default_lining").width
+ border.color: parent.checked ? UM.Theme.getColor("primary") : UM.Theme.getColor("lining")
+ border.width: UM.Theme.getSize("default_lining").width
radius: UM.Theme.getSize("default_radius").width
+ }
- Column
+ contentItem: Column
+ {
+ id: contentColumn
+ width: parent.width
+ padding: UM.Theme.getSize("default_margin").width
+ spacing: UM.Theme.getSize("narrow_margin").height
+
+ Row
{
- id: contentColumn
- width: parent.width
- padding: UM.Theme.getSize("wide_margin").width
- spacing: UM.Theme.getSize("narrow_margin").height
+ id: extruderRow
- Row
+ anchors
{
- id: extruderRow
-
- anchors
- {
- left: parent.left
- leftMargin: parent.padding
- right: parent.right
- rightMargin: parent.padding
- }
- height: childrenRect.height
-
- spacing: UM.Theme.getSize("default_margin").width
-
- Repeater
- {
- id: repeater
- height: childrenRect.height
- model: configuration.extruderConfigurations
- delegate: PrintCoreConfiguration
- {
- width: Math.round(parent.width / 2)
- printCoreConfiguration: modelData
- }
- }
+ left: parent.left
+ leftMargin: UM.Theme.getSize("wide_margin").width
+ right: parent.right
+ rightMargin: UM.Theme.getSize("wide_margin").width
}
- //Buildplate row separator
- Rectangle
+ spacing: UM.Theme.getSize("default_margin").width
+
+ Repeater
{
- id: separator
-
- visible: buildplateInformation.visible
- anchors
+ id: repeater
+ model: configuration.extruderConfigurations
+ delegate: PrintCoreConfiguration
{
- left: parent.left
- leftMargin: parent.padding
- right: parent.right
- rightMargin: parent.padding
- }
- height: visible ? Math.round(UM.Theme.getSize("default_lining").height / 2) : 0
- color: UM.Theme.getColor("lining")
- }
-
- Item
- {
- id: buildplateInformation
-
- anchors
- {
- left: parent.left
- leftMargin: parent.padding
- right: parent.right
- rightMargin: parent.padding
- }
- height: childrenRect.height
- visible: configuration.buildplateConfiguration != ""
-
- UM.RecolorImage
- {
- id: buildplateIcon
- anchors.left: parent.left
- width: UM.Theme.getSize("main_window_header_button_icon").width
- height: UM.Theme.getSize("main_window_header_button_icon").height
- source: UM.Theme.getIcon("buildplate")
- color: UM.Theme.getColor("text")
- }
-
- Label
- {
- id: buildplateLabel
- anchors.left: buildplateIcon.right
- anchors.verticalCenter: buildplateIcon.verticalCenter
- anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").height / 2)
- text: configuration.buildplateConfiguration
- renderType: Text.NativeRendering
- color: UM.Theme.getColor("text")
+ width: Math.round(parent.width / 2)
+ printCoreConfiguration: modelData
}
}
}
- Connections
+ //Buildplate row separator
+ Rectangle
{
- target: Cura.MachineManager
- onCurrentConfigurationChanged:
+ id: separator
+
+ visible: buildplateInformation.visible
+ anchors
{
- configurationItem.checked = Cura.MachineManager.matchesConfiguration(configuration)
+ left: parent.left
+ leftMargin: UM.Theme.getSize("wide_margin").width
+ right: parent.right
+ rightMargin: UM.Theme.getSize("wide_margin").width
}
+ height: visible ? Math.round(UM.Theme.getSize("default_lining").height / 2) : 0
+ color: UM.Theme.getColor("lining")
}
- Component.onCompleted:
+ Item
+ {
+ id: buildplateInformation
+
+ anchors
+ {
+ left: parent.left
+ leftMargin: UM.Theme.getSize("wide_margin").width
+ right: parent.right
+ rightMargin: UM.Theme.getSize("wide_margin").width
+ }
+ height: childrenRect.height
+ visible: configuration.buildplateConfiguration != ""
+
+ UM.RecolorImage
+ {
+ id: buildplateIcon
+ anchors.left: parent.left
+ width: UM.Theme.getSize("main_window_header_button_icon").width
+ height: UM.Theme.getSize("main_window_header_button_icon").height
+ source: UM.Theme.getIcon("buildplate")
+ color: UM.Theme.getColor("text")
+ }
+
+ Label
+ {
+ id: buildplateLabel
+ anchors.left: buildplateIcon.right
+ anchors.verticalCenter: buildplateIcon.verticalCenter
+ anchors.leftMargin: UM.Theme.getSize("narrow_margin").height
+ text: configuration.buildplateConfiguration
+ renderType: Text.NativeRendering
+ color: UM.Theme.getColor("text")
+ }
+ }
+ }
+
+ Connections
+ {
+ target: Cura.MachineManager
+ onCurrentConfigurationChanged:
{
configurationItem.checked = Cura.MachineManager.matchesConfiguration(configuration)
}
}
+ Component.onCompleted:
+ {
+ configurationItem.checked = Cura.MachineManager.matchesConfiguration(configuration)
+ }
+
onClicked:
{
Cura.MachineManager.applyRemoteConfiguration(configuration)
}
-}
\ No newline at end of file
+}
diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml
index 3cc0754284..684e575bfd 100644
--- a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml
+++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml
@@ -7,16 +7,15 @@ import QtQuick.Controls 2.3
import UM 1.2 as UM
import Cura 1.0 as Cura
-Column
+Item
{
id: base
property var outputDevice: null
- height: childrenRect.height + 2 * padding
- spacing: UM.Theme.getSize("narrow_margin").height
+ height: childrenRect.height
function forceModelUpdate()
{
- // FIXME For now the model should be removed and then created again, otherwise changes in the printer don't automatically update the UI
+ // FIXME For now the model has to be removed and then created again, otherwise changes in the printer don't automatically update the UI
configurationList.model = []
if (outputDevice)
{
@@ -24,6 +23,42 @@ Column
}
}
+ // This component will appear when there is no configurations (e.g. when losing connection)
+ Item
+ {
+ width: parent.width
+ visible: configurationList.model.length == 0
+ height: label.height + UM.Theme.getSize("wide_margin").height
+ anchors.top: parent.top
+ anchors.topMargin: UM.Theme.getSize("default_margin").height
+
+ UM.RecolorImage
+ {
+ id: icon
+
+ anchors.left: parent.left
+ anchors.verticalCenter: label.verticalCenter
+
+ source: UM.Theme.getIcon("warning")
+ color: UM.Theme.getColor("warning")
+ width: UM.Theme.getSize("section_icon").width
+ height: width
+ }
+
+ Label
+ {
+ id: label
+ anchors.left: icon.right
+ anchors.right: parent.right
+ anchors.leftMargin: UM.Theme.getSize("default_margin").width
+ text: catalog.i18nc("@label", "The configurations are not available because the printer is disconnected.")
+ color: UM.Theme.getColor("text")
+ font: UM.Theme.getFont("default")
+ renderType: Text.NativeRendering
+ wrapMode: Text.WordWrap
+ }
+ }
+
ScrollView
{
id: container
@@ -57,7 +92,6 @@ Column
id: configurationList
spacing: UM.Theme.getSize("narrow_margin").height
width: container.width - ((height > container.maximumHeight) ? container.ScrollBar.vertical.background.width : 0) //Make room for scroll bar if there is any.
- contentHeight: childrenRect.height
height: childrenRect.height
section.property: "modelData.printerType"
@@ -100,4 +134,4 @@ Column
forceModelUpdate()
}
}
-}
\ No newline at end of file
+}
diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml
index 8e9c276c0d..207b65afc7 100644
--- a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml
+++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml
@@ -17,10 +17,7 @@ Cura.ExpandablePopup
{
id: base
- Cura.ExtrudersModel
- {
- id: extrudersModel
- }
+ property var extrudersModel: CuraApplication.getExtrudersModel()
UM.I18nCatalog
{
@@ -34,6 +31,7 @@ Cura.ExpandablePopup
Custom
}
+ contentPadding: UM.Theme.getSize("default_lining").width
enabled: Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants || Cura.MachineManager.hasVariantBuildplates; //Only let it drop down if there is any configuration that you could change.
headerItem: Item
@@ -127,34 +125,41 @@ Cura.ExpandablePopup
contentItem: Column
{
id: popupItem
- width: base.width - 2 * UM.Theme.getSize("default_margin").width
- height: implicitHeight //Required because ExpandableComponent will try to use this to determine the size of the background of the pop-up.
+ width: UM.Theme.getSize("configuration_selector").width
+ height: implicitHeight // Required because ExpandableComponent will try to use this to determine the size of the background of the pop-up.
+ padding: UM.Theme.getSize("default_margin").height
spacing: UM.Theme.getSize("default_margin").height
- property bool is_connected: false //If current machine is connected to a printer. Only evaluated upon making popup visible.
+ property bool is_connected: false // If current machine is connected to a printer. Only evaluated upon making popup visible.
+ property int configuration_method: ConfigurationMenu.ConfigurationMethod.Custom // Type of configuration being used. Only evaluated upon making popup visible.
+ property int manual_selected_method: -1 // It stores the configuration method selected by the user. By default the selected method is
+
onVisibleChanged:
{
is_connected = Cura.MachineManager.activeMachineHasRemoteConnection && Cura.MachineManager.printerConnected //Re-evaluate.
- }
- property int configuration_method: is_connected ? ConfigurationMenu.ConfigurationMethod.Auto : ConfigurationMenu.ConfigurationMethod.Custom //Auto if connected to a printer at start-up, or Custom if not.
+ // If the printer is not connected, we switch always to the custom mode. If is connected instead, the auto mode
+ // or the previous state is selected
+ configuration_method = is_connected ? (manual_selected_method == -1 ? ConfigurationMenu.ConfigurationMethod.Auto : manual_selected_method) : ConfigurationMenu.ConfigurationMethod.Custom
+ }
Item
{
- width: parent.width
+ width: parent.width - 2 * parent.padding
height:
{
- var height = 0;
- if(autoConfiguration.visible)
+ var height = 0
+ if (autoConfiguration.visible)
{
- height += autoConfiguration.height;
+ height += autoConfiguration.height
}
- if(customConfiguration.visible)
+ if (customConfiguration.visible)
{
- height += customConfiguration.height;
+ height += customConfiguration.height
}
- return height;
+ return height
}
+
AutoConfiguration
{
id: autoConfiguration
@@ -172,9 +177,9 @@ Cura.ExpandablePopup
{
id: separator
visible: buttonBar.visible
- x: -contentPadding
+ x: -parent.padding
- width: base.width
+ width: parent.width
height: UM.Theme.getSize("default_lining").height
color: UM.Theme.getColor("lining")
@@ -186,7 +191,7 @@ Cura.ExpandablePopup
id: buttonBar
visible: popupItem.is_connected //Switching only makes sense if the "auto" part is possible.
- width: parent.width
+ width: parent.width - 2 * parent.padding
height: childrenRect.height
Cura.SecondaryButton
@@ -200,7 +205,11 @@ Cura.ExpandablePopup
iconSource: UM.Theme.getIcon("arrow_right")
isIconOnRightSide: true
- onClicked: popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Custom
+ onClicked:
+ {
+ popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Custom
+ popupItem.manual_selected_method = popupItem.configuration_method
+ }
}
Cura.SecondaryButton
@@ -211,8 +220,18 @@ Cura.ExpandablePopup
iconSource: UM.Theme.getIcon("arrow_left")
- onClicked: popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Auto
+ onClicked:
+ {
+ popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Auto
+ popupItem.manual_selected_method = popupItem.configuration_method
+ }
}
}
}
+
+ Connections
+ {
+ target: Cura.MachineManager
+ onGlobalContainerChanged: popupItem.manual_selected_method = -1 // When switching printers, reset the value of the manual selected method
+ }
}
diff --git a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml
index 8429e2c093..4d6d80c1b4 100644
--- a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml
+++ b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml
@@ -23,8 +23,8 @@ Item
{
id: header
text: catalog.i18nc("@header", "Custom")
- font: UM.Theme.getFont("large")
- color: UM.Theme.getColor("text")
+ font: UM.Theme.getFont("default")
+ color: UM.Theme.getColor("small_button_text")
height: contentHeight
renderType: Text.NativeRendering
@@ -51,9 +51,7 @@ Item
anchors
{
left: parent.left
- leftMargin: UM.Theme.getSize("default_margin").width
right: parent.right
- rightMargin: UM.Theme.getSize("default_margin").width
top: header.bottom
topMargin: visible ? UM.Theme.getSize("default_margin").height : 0
}
@@ -74,7 +72,7 @@ Item
id: printerTypeSelector
text: Cura.MachineManager.activeMachineDefinitionName
tooltip: Cura.MachineManager.activeMachineDefinitionName
- height: UM.Theme.getSize("setting_control").height
+ height: UM.Theme.getSize("print_setup_big_item").height
width: Math.round(parent.width * 0.7) + UM.Theme.getSize("default_margin").width
anchors.right: parent.right
style: UM.Theme.styles.print_setup_header_button
@@ -224,7 +222,7 @@ Item
Row
{
- height: UM.Theme.getSize("print_setup_item").height
+ height: UM.Theme.getSize("print_setup_big_item").height
visible: Cura.MachineManager.hasMaterials
Label
@@ -248,7 +246,7 @@ Item
text: Cura.MachineManager.activeStack != null ? Cura.MachineManager.activeStack.material.name : ""
tooltip: text
- height: UM.Theme.getSize("setting_control").height
+ height: UM.Theme.getSize("print_setup_big_item").height
width: selectors.controlWidth
style: UM.Theme.styles.print_setup_header_button
@@ -262,7 +260,7 @@ Item
Row
{
- height: UM.Theme.getSize("print_setup_item").height
+ height: UM.Theme.getSize("print_setup_big_item").height
visible: Cura.MachineManager.hasVariants
Label
@@ -282,7 +280,7 @@ Item
text: Cura.MachineManager.activeVariantName
tooltip: Cura.MachineManager.activeVariantName
- height: UM.Theme.getSize("setting_control").height
+ height: UM.Theme.getSize("print_setup_big_item").height
width: selectors.controlWidth
style: UM.Theme.styles.print_setup_header_button
activeFocusOnPress: true;
diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml
index 1ea402d815..cb10d50ce8 100644
--- a/resources/qml/Menus/ContextMenu.qml
+++ b/resources/qml/Menus/ContextMenu.qml
@@ -27,7 +27,7 @@ Menu
MenuItem { id: extruderHeader; text: catalog.i18ncp("@label", "Print Selected Model With:", "Print Selected Models With:", UM.Selection.selectionCount); enabled: false; visible: base.shouldShowExtruders }
Instantiator
{
- model: Cura.ExtrudersModel { id: extrudersModel }
+ model: CuraApplication.getExtrudersModel()
MenuItem {
text: "%1: %2 - %3".arg(model.name).arg(model.material).arg(model.variant)
visible: base.shouldShowExtruders
diff --git a/resources/qml/MonitorSidebar.qml b/resources/qml/MonitorSidebar.qml
deleted file mode 100644
index 70ee60377d..0000000000
--- a/resources/qml/MonitorSidebar.qml
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright (c) 2018 Ultimaker B.V.
-// Cura is released under the terms of the LGPLv3 or higher.
-
-import QtQuick 2.10
-import QtQuick.Controls 2.0
-import QtQuick.Layouts 1.3
-
-import UM 1.2 as UM
-import Cura 1.0 as Cura
-
-import "Menus"
-import "Menus/ConfigurationMenu"
-
-
-Rectangle
-{
- id: base
-
- property int currentModeIndex
- property bool hideSettings: PrintInformation.preSliced
- property bool hideView: Cura.MachineManager.activeMachineName == ""
-
- // Is there an output device for this printer?
- property bool isNetworkPrinter: Cura.MachineManager.activeMachineHasRemoteConnection
- property bool printerConnected: Cura.MachineManager.printerConnected
- property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
- property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
-
- property variant printDuration: PrintInformation.currentPrintTime
- property variant printMaterialLengths: PrintInformation.materialLengths
- property variant printMaterialWeights: PrintInformation.materialWeights
- property variant printMaterialCosts: PrintInformation.materialCosts
- property variant printMaterialNames: PrintInformation.materialNames
-
- color: UM.Theme.getColor("main_background")
- UM.I18nCatalog { id: catalog; name: "cura"}
-
- Timer {
- id: tooltipDelayTimer
- interval: 500
- repeat: false
- property var item
- property string text
-
- onTriggered:
- {
- base.showTooltip(base, {x: 0, y: item.y}, text);
- }
- }
-
- function showTooltip(item, position, text)
- {
- tooltip.text = text;
- position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y);
- tooltip.show(position);
- }
-
- function hideTooltip()
- {
- tooltip.hide();
- }
-
- function strPadLeft(string, pad, length) {
- return (new Array(length + 1).join(pad) + string).slice(-length);
- }
-
- function getPrettyTime(time)
- {
- var hours = Math.floor(time / 3600)
- time -= hours * 3600
- var minutes = Math.floor(time / 60);
- time -= minutes * 60
- var seconds = Math.floor(time);
-
- var finalTime = strPadLeft(hours, "0", 2) + ":" + strPadLeft(minutes, "0", 2) + ":" + strPadLeft(seconds, "0", 2);
- return finalTime;
- }
-
- MouseArea
- {
- anchors.fill: parent
- acceptedButtons: Qt.AllButtons
-
- onWheel:
- {
- wheel.accepted = true;
- }
- }
-
- MachineSelector
- {
- id: machineSelection
- width: base.width - configSelection.width - separator.width
- height: UM.Theme.getSize("stage_menu").height
- anchors.top: base.top
- anchors.left: parent.left
- }
-
- Rectangle
- {
- id: separator
- visible: configSelection.visible
- width: visible ? Math.round(UM.Theme.getSize("thick_lining").height / 2) : 0
- height: UM.Theme.getSize("stage_menu").height
- color: UM.Theme.getColor("thick_lining")
- anchors.left: machineSelection.right
- }
-
- CustomConfigurationSelector
- {
- id: configSelection
- visible: isNetworkPrinter && printerConnected
- width: visible ? Math.round(base.width * 0.15) : 0
- height: UM.Theme.getSize("stage_menu").height
- anchors.top: base.top
- anchors.right: parent.right
- }
-
- Loader
- {
- id: controlItem
- anchors.bottom: footerSeparator.top
- anchors.top: machineSelection.bottom
- anchors.left: base.left
- anchors.right: base.right
- sourceComponent:
- {
- if(connectedPrinter != null)
- {
- if(connectedPrinter.controlItem != null)
- {
- return connectedPrinter.controlItem
- }
- }
- return null
- }
- }
-
- Loader
- {
- anchors.bottom: footerSeparator.top
- anchors.top: machineSelection.bottom
- anchors.left: base.left
- anchors.right: base.right
- source:
- {
- if(controlItem.sourceComponent == null)
- {
- return "PrintMonitor.qml"
- }
- else
- {
- return ""
- }
- }
- }
-
- Rectangle
- {
- id: footerSeparator
- width: parent.width
- height: UM.Theme.getSize("wide_lining").height
- color: UM.Theme.getColor("wide_lining")
- anchors.bottom: monitorButton.top
- anchors.bottomMargin: UM.Theme.getSize("thick_margin").height
- }
-
- // MonitorButton is actually the bottom footer panel.
- MonitorButton
- {
- id: monitorButton
- implicitWidth: base.width
- anchors.bottom: parent.bottom
- }
-
- PrintSetupTooltip
- {
- id: tooltip
- }
-
- UM.SettingPropertyProvider
- {
- id: machineExtruderCount
-
- containerStack: Cura.MachineManager.activeMachine
- key: "machine_extruder_count"
- watchedProperties: [ "value" ]
- storeIndex: 0
- }
-
- UM.SettingPropertyProvider
- {
- id: machineHeatedBed
-
- containerStack: Cura.MachineManager.activeMachine
- key: "machine_heated_bed"
- watchedProperties: [ "value" ]
- storeIndex: 0
- }
-
- // Make the ConfigurationSelector react when the global container changes, otherwise if Cura is not connected to the printer,
- // switching printers make no reaction
- Connections
- {
- target: Cura.MachineManager
- onGlobalContainerChanged:
- {
- base.isNetworkPrinter = Cura.MachineManager.activeMachineHasRemoteConnection
- base.printerConnected = Cura.MachineManager.printerOutputDevices.length != 0
- }
- }
-}
diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml
index d7ffbb3152..7fb17b7aa1 100644
--- a/resources/qml/Preferences/ProfilesPage.qml
+++ b/resources/qml/Preferences/ProfilesPage.qml
@@ -16,7 +16,7 @@ Item
property QtObject qualityManager: CuraApplication.getQualityManager()
property var resetEnabled: false // Keep PreferencesDialog happy
- property var extrudersModel: Cura.ExtrudersModel {}
+ property var extrudersModel: CuraApplication.getExtrudersModel()
UM.I18nCatalog { id: catalog; name: "cura"; }
diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml
index 4ed8daa55c..6d8edf0deb 100644
--- a/resources/qml/PrintMonitor.qml
+++ b/resources/qml/PrintMonitor.qml
@@ -60,11 +60,7 @@ Rectangle
anchors.fill: parent
- Cura.ExtrudersModel
- {
- id: extrudersModel
- simpleNames: true
- }
+ property var extrudersModel: CuraApplication.getExtrudersModel()
OutputDeviceHeader
{
diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml
index b28c9ceb46..51eb14a441 100644
--- a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml
+++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml
@@ -16,10 +16,7 @@ Item
property real padding: UM.Theme.getSize("default_margin").width
property bool multipleExtruders: extrudersModel.count > 1
- Cura.ExtrudersModel
- {
- id: extrudersModel
- }
+ property var extrudersModel: CuraApplication.getExtrudersModel()
// Profile selector row
GlobalProfileSelector
@@ -113,9 +110,11 @@ Item
}
z: tabBar.z - 1
// Don't show the border when only one extruder
+
border.color: tabBar.visible ? UM.Theme.getColor("lining") : "transparent"
border.width: UM.Theme.getSize("default_lining").width
+ color: UM.Theme.getColor("main_background")
Cura.SettingView
{
anchors
diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelector.qml b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml
index 599eac957e..2d4d7f6cf1 100644
--- a/resources/qml/PrintSetupSelector/PrintSetupSelector.qml
+++ b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml
@@ -26,10 +26,7 @@ Cura.ExpandableComponent
headerItem: PrintSetupSelectorHeader {}
- Cura.ExtrudersModel
- {
- id: extrudersModel
- }
+ property var extrudersModel: CuraApplication.getExtrudersModel()
contentItem: PrintSetupSelectorContents {}
}
\ No newline at end of file
diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml
index 2971415948..0da53cc1c1 100644
--- a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml
+++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml
@@ -144,6 +144,7 @@ Item
anchors.horizontalCenter: parent.horizontalCenter
y: UM.Theme.getSize("thin_margin").height
renderType: Text.NativeRendering
+ color: UM.Theme.getColor("quality_slider_available")
}
}
}
diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml
index 349c6dbb57..e6b3f1b9eb 100644
--- a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml
+++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml
@@ -39,7 +39,17 @@ Item
{
target: Cura.QualityProfilesDropDownMenuModel
onItemsChanged: qualityModel.update()
- onDataChanged: qualityModel.update()
+ onDataChanged:
+ {
+ // If a custom profile is selected and then a user decides to change any of setting the slider should show
+ // the reset button. After clicking the reset button the QualityProfilesDropDownMenuModel(ListModel) is
+ // updated before the property isProfileCustomized is called to update.
+ if (Cura.SimpleModeSettingsManager.isProfileCustomized)
+ {
+ Cura.SimpleModeSettingsManager.updateIsProfileUserCreated()
+ }
+ qualityModel.update()
+ }
}
Connections {
diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml
index 57e0c8ce6b..87fb664713 100644
--- a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml
+++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml
@@ -156,9 +156,10 @@ Item
}
//: Model used to populate the extrudelModel
- Cura.ExtrudersModel
+ property var extruders: CuraApplication.getExtrudersModel()
+ Connections
{
- id: extruders
+ target: extruders
onModelChanged: populateExtruderModel()
}
diff --git a/resources/qml/PrinterOutput/ExtruderBox.qml b/resources/qml/PrinterOutput/ExtruderBox.qml
index 247bb3a27d..9ba78f778f 100644
--- a/resources/qml/PrinterOutput/ExtruderBox.qml
+++ b/resources/qml/PrinterOutput/ExtruderBox.qml
@@ -326,7 +326,7 @@ Item
return UM.Theme.getColor("action_button_text");
}
}
- font: UM.Theme.getFont("action_button")
+ font: UM.Theme.getFont("medium")
text:
{
if(extruderModel == null)
diff --git a/resources/qml/PrinterOutput/HeatedBedBox.qml b/resources/qml/PrinterOutput/HeatedBedBox.qml
index 33cf5cd1e2..ac541f707c 100644
--- a/resources/qml/PrinterOutput/HeatedBedBox.qml
+++ b/resources/qml/PrinterOutput/HeatedBedBox.qml
@@ -320,7 +320,7 @@ Item
return UM.Theme.getColor("action_button_text");
}
}
- font: UM.Theme.getFont("action_button")
+ font: UM.Theme.getFont("medium")
text:
{
if(printerModel == null)
diff --git a/resources/qml/PrinterOutput/MonitorSection.qml b/resources/qml/PrinterOutput/MonitorSection.qml
index 7ef89dabf7..1d9df777b6 100644
--- a/resources/qml/PrinterOutput/MonitorSection.qml
+++ b/resources/qml/PrinterOutput/MonitorSection.qml
@@ -27,7 +27,7 @@ Item
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("default_margin").width
text: label
- font: UM.Theme.getFont("setting_category")
+ font: UM.Theme.getFont("default")
color: UM.Theme.getColor("setting_category_text")
}
}
diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml
index 8a7b87f409..28e01c7ae9 100644
--- a/resources/qml/PrinterSelector/MachineSelector.qml
+++ b/resources/qml/PrinterSelector/MachineSelector.qml
@@ -24,49 +24,24 @@ Cura.ExpandablePopup
name: "cura"
}
- headerItem: Item
+ headerItem: Cura.IconWithText
{
- implicitHeight: icon.height
-
- UM.RecolorImage
+ text: isNetworkPrinter ? Cura.MachineManager.activeMachineNetworkGroupName : Cura.MachineManager.activeMachineName
+ source:
{
- id: icon
-
- anchors.left: parent.left
- anchors.verticalCenter: parent.verticalCenter
-
- source:
+ if (isNetworkPrinter)
{
- if (isNetworkPrinter)
+ if (machineSelector.outputDevice != null && machineSelector.outputDevice.clusterSize > 1)
{
- if (machineSelector.outputDevice != null && machineSelector.outputDevice.clusterSize > 1)
- {
- return UM.Theme.getIcon("printer_group")
- }
- return UM.Theme.getIcon("printer_single")
+ return UM.Theme.getIcon("printer_group")
}
- return ""
+ return UM.Theme.getIcon("printer_single")
}
- width: UM.Theme.getSize("machine_selector_icon").width
- height: width
-
- color: UM.Theme.getColor("machine_selector_printer_icon")
- visible: source != ""
- }
-
- Label
- {
- id: label
- anchors.left: icon.visible ? icon.right : parent.left
- anchors.right: parent.right
- anchors.leftMargin: UM.Theme.getSize("thin_margin").width
- anchors.verticalCenter: icon.verticalCenter
- text: isNetworkPrinter ? Cura.MachineManager.activeMachineNetworkGroupName : Cura.MachineManager.activeMachineName
- elide: Text.ElideRight
- color: UM.Theme.getColor("text")
- font: UM.Theme.getFont("medium")
- renderType: Text.NativeRendering
+ return ""
}
+ font: UM.Theme.getFont("medium")
+ iconColor: UM.Theme.getColor("machine_selector_printer_icon")
+ iconSize: source != "" ? UM.Theme.getSize("machine_selector_icon").width: 0
UM.RecolorImage
{
diff --git a/resources/qml/PrinterSelector/MachineSelectorButton.qml b/resources/qml/PrinterSelector/MachineSelectorButton.qml
index b88af35f82..39e63d27c3 100644
--- a/resources/qml/PrinterSelector/MachineSelectorButton.qml
+++ b/resources/qml/PrinterSelector/MachineSelectorButton.qml
@@ -42,7 +42,7 @@ Button
}
text: machineSelectorButton.text
color: UM.Theme.getColor("text")
- font: UM.Theme.getFont("action_button")
+ font: UM.Theme.getFont("medium")
visible: text != ""
renderType: Text.NativeRendering
verticalAlignment: Text.AlignVCenter
diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml
index 5676bcedf9..da731bcd55 100644
--- a/resources/qml/Settings/SettingCategory.qml
+++ b/resources/qml/Settings/SettingCategory.qml
@@ -73,7 +73,7 @@ Button
text: definition.label
textFormat: Text.PlainText
renderType: Text.NativeRendering
- font: UM.Theme.getFont("setting_category")
+ font: UM.Theme.getFont("default")
color:
{
if (!base.enabled)
@@ -106,26 +106,7 @@ Button
width: UM.Theme.getSize("standard_arrow").width
height: UM.Theme.getSize("standard_arrow").height
sourceSize.height: width
- color:
- {
- if (!base.enabled)
- {
- return UM.Theme.getColor("setting_category_disabled_text")
- }
- else if ((base.hovered || base.activeFocus) && base.checkable && base.checked)
- {
- return UM.Theme.getColor("setting_category_active_hover_text")
- }
- else if (base.pressed || (base.checkable && base.checked))
- {
- return UM.Theme.getColor("setting_category_active_text")
- }
- else if (base.hovered || base.activeFocus)
- {
- return UM.Theme.getColor("setting_category_hover_text")
- }
- return UM.Theme.getColor("setting_category_text")
- }
+ color: UM.Theme.getColor("setting_control_button")
source: base.checked ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left")
}
}
diff --git a/resources/qml/Settings/SettingComboBox.qml b/resources/qml/Settings/SettingComboBox.qml
index 13d2a0eb8f..a287e0c3ce 100644
--- a/resources/qml/Settings/SettingComboBox.qml
+++ b/resources/qml/Settings/SettingComboBox.qml
@@ -63,7 +63,7 @@ SettingItem
sourceSize.width: width + 5 * screenScaleFactor
sourceSize.height: width + 5 * screenScaleFactor
- color: UM.Theme.getColor("setting_control_text")
+ color: UM.Theme.getColor("setting_control_button")
}
contentItem: Label
diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml
index e1fedd9274..6d39192de7 100644
--- a/resources/qml/Settings/SettingExtruder.qml
+++ b/resources/qml/Settings/SettingExtruder.qml
@@ -17,11 +17,16 @@ SettingItem
id: control
anchors.fill: parent
- model: Cura.ExtrudersModel
+ property var extrudersModel: CuraApplication.getExtrudersModel()
+
+ model: extrudersModel
+
+ Connections
{
+ target: extrudersModel
onModelChanged:
{
- control.color = getItem(control.currentIndex).color
+ control.color = extrudersModel.getItem(control.currentIndex).color
}
}
@@ -105,7 +110,7 @@ SettingItem
sourceSize.width: width + 5 * screenScaleFactor
sourceSize.height: width + 5 * screenScaleFactor
- color: UM.Theme.getColor("setting_control_text");
+ color: UM.Theme.getColor("setting_control_button");
}
background: Rectangle
diff --git a/resources/qml/Settings/SettingOptionalExtruder.qml b/resources/qml/Settings/SettingOptionalExtruder.qml
index 200a3f64f1..b73c7498ae 100644
--- a/resources/qml/Settings/SettingOptionalExtruder.qml
+++ b/resources/qml/Settings/SettingOptionalExtruder.qml
@@ -12,15 +12,24 @@ SettingItem
id: base
property var focusItem: control
+ // Somehow if we directory set control.model to CuraApplication.getExtrudersModelWithOptional()
+ // and in the Connections.onModelChanged use control.model as a reference, it will complain about
+ // non-existing properties such as "onModelChanged" and "getItem". I guess if we access the model
+ // via "control.model", it gives back a generic/abstract model instance. To avoid this, we add
+ // this extra property to keep the ExtrudersModel and use this in the rest of the code.
+ property var extrudersWithOptionalModel: CuraApplication.getExtrudersModelWithOptional()
+
contents: ComboBox
{
id: control
anchors.fill: parent
- model: Cura.ExtrudersModel
+ model: base.extrudersWithOptionalModel
+
+ Connections
{
- onModelChanged: control.color = getItem(control.currentIndex).color
- addOptionalExtruder: true
+ target: base.extrudersWithOptionalModel
+ onModelChanged: control.color = base.extrudersWithOptionalModel.getItem(control.currentIndex).color
}
textRole: "name"
@@ -102,7 +111,7 @@ SettingItem
sourceSize.width: width + 5 * screenScaleFactor
sourceSize.height: width + 5 * screenScaleFactor
- color: UM.Theme.getColor("setting_control_text");
+ color: UM.Theme.getColor("setting_control_button");
}
background: Rectangle
diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml
index 1e335472d4..33481b9183 100644
--- a/resources/qml/Toolbar.qml
+++ b/resources/qml/Toolbar.qml
@@ -67,7 +67,7 @@ Item
toolItem: UM.RecolorImage
{
source: UM.Theme.getIcon(model.icon) != "" ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon
- color: UM.Theme.getColor("toolbar_button_text")
+ color: UM.Theme.getColor("icon")
sourceSize: UM.Theme.getSize("button_icon")
}
@@ -144,10 +144,7 @@ Item
}
}
- Cura.ExtrudersModel
- {
- id: extrudersModel
- }
+ property var extrudersModel: CuraApplication.getExtrudersModel()
UM.PointingRectangle
{
diff --git a/resources/qml/ViewOrientationButton.qml b/resources/qml/ViewOrientationButton.qml
index 5371f8549b..5d72de9a8d 100644
--- a/resources/qml/ViewOrientationButton.qml
+++ b/resources/qml/ViewOrientationButton.qml
@@ -11,5 +11,5 @@ UM.SimpleButton
height: UM.Theme.getSize("small_button").height
hoverColor: UM.Theme.getColor("small_button_text_hover")
color: UM.Theme.getColor("small_button_text")
- iconMargin: 0.5 * UM.Theme.getSize("wide_lining").width
+ iconMargin: UM.Theme.getSize("thick_lining").width
}
\ No newline at end of file
diff --git a/resources/qml/ViewsSelector.qml b/resources/qml/ViewsSelector.qml
index 06d2e662b5..1f5a0bbc85 100644
--- a/resources/qml/ViewsSelector.qml
+++ b/resources/qml/ViewsSelector.qml
@@ -78,8 +78,6 @@ Cura.ExpandablePopup
{
id: viewSelectorPopup
width: viewSelector.width - 2 * viewSelector.contentPadding
- leftPadding: UM.Theme.getSize("default_lining").width
- rightPadding: UM.Theme.getSize("default_lining").width
// For some reason the height/width of the column gets set to 0 if this is not set...
Component.onCompleted:
@@ -109,7 +107,7 @@ Cura.ExpandablePopup
id: buttonText
text: viewsSelectorButton.text
color: UM.Theme.getColor("text")
- font: UM.Theme.getFont("action_button")
+ font: UM.Theme.getFont("medium")
renderType: Text.NativeRendering
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json
index 8540abf61a..cade342488 100644
--- a/resources/themes/cura-dark/theme.json
+++ b/resources/themes/cura-dark/theme.json
@@ -17,6 +17,12 @@
"border": [127, 127, 127, 255],
"secondary": [95, 95, 95, 255],
+ "icon": [204, 204, 204, 255],
+ "toolbar_background": [39, 44, 48, 255],
+ "toolbar_button_active": [95, 95, 95, 255],
+ "toolbar_button_hover": [95, 95, 95, 255],
+ "toolbar_button_active_hover": [95, 95, 95, 255],
+
"main_window_header_button_text_inactive": [128, 128, 128, 255],
"main_window_header_button_text_hovered": [255, 255, 255, 255],
@@ -93,11 +99,11 @@
"scrollbar_handle_hover": [255, 255, 255, 255],
"scrollbar_handle_down": [255, 255, 255, 255],
- "setting_category": [39, 44, 48, 255],
- "setting_category_disabled": [39, 44, 48, 255],
- "setting_category_hover": [39, 44, 48, 255],
- "setting_category_active": [39, 44, 48, 255],
- "setting_category_active_hover": [39, 44, 48, 255],
+ "setting_category": [75, 80, 83, 255],
+ "setting_category_disabled": [75, 80, 83, 255],
+ "setting_category_hover": [75, 80, 83, 255],
+ "setting_category_active": [75, 80, 83, 255],
+ "setting_category_active_hover": [75, 80, 83, 255],
"setting_category_text": [255, 255, 255, 152],
"setting_category_disabled_text": [255, 255, 255, 101],
"setting_category_hover_text": [255, 255, 255, 204],
diff --git a/resources/themes/cura-light/icons/star_empty.svg b/resources/themes/cura-light/icons/star_empty.svg
new file mode 100644
index 0000000000..39b5791e91
--- /dev/null
+++ b/resources/themes/cura-light/icons/star_empty.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/resources/themes/cura-light/icons/star_filled.svg b/resources/themes/cura-light/icons/star_filled.svg
new file mode 100644
index 0000000000..d4e161f6c6
--- /dev/null
+++ b/resources/themes/cura-light/icons/star_filled.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/resources/themes/cura-light/icons/warning.svg b/resources/themes/cura-light/icons/warning.svg
index ae8a7a6430..14b7d797d0 100644
--- a/resources/themes/cura-light/icons/warning.svg
+++ b/resources/themes/cura-light/icons/warning.svg
@@ -1,4 +1,11 @@
-
-