mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 02:37:49 -06:00
Merge branch '4.0'
This commit is contained in:
commit
33abbd4c89
26 changed files with 762 additions and 431 deletions
|
@ -9,12 +9,14 @@ import Cura 1.0 as Cura
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: base
|
id: base
|
||||||
|
|
||||||
|
property var enabled: true
|
||||||
|
|
||||||
property var iconSource: null;
|
property var iconSource: null;
|
||||||
color: "#0a0850" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_icon_primary")
|
||||||
height: width;
|
height: width;
|
||||||
radius: Math.round(0.5 * width);
|
radius: Math.round(0.5 * width);
|
||||||
width: 24 * screenScaleFactor;
|
width: 24 * screenScaleFactor;
|
||||||
property var enabled: true
|
|
||||||
|
|
||||||
UM.RecolorImage {
|
UM.RecolorImage {
|
||||||
id: icon;
|
id: icon;
|
||||||
|
@ -22,7 +24,7 @@ Rectangle {
|
||||||
horizontalCenter: parent.horizontalCenter;
|
horizontalCenter: parent.horizontalCenter;
|
||||||
verticalCenter: parent.verticalCenter;
|
verticalCenter: parent.verticalCenter;
|
||||||
}
|
}
|
||||||
color: UM.Theme.getColor("primary_text");
|
color: UM.Theme.getColor("monitor_icon_accent");
|
||||||
height: width;
|
height: width;
|
||||||
source: iconSource;
|
source: iconSource;
|
||||||
width: Math.round(parent.width / 2);
|
width: Math.round(parent.width / 2);
|
||||||
|
|
|
@ -6,10 +6,11 @@ import QtQuick.Controls 2.0
|
||||||
import UM 1.3 as UM
|
import UM 1.3 as UM
|
||||||
import Cura 1.0 as Cura
|
import Cura 1.0 as Cura
|
||||||
|
|
||||||
// TODO: Theme & documentation!
|
/**
|
||||||
// The expandable component has 3 major sub components:
|
* The expandable component has 3 major sub components:
|
||||||
// * The headerItem Always visible and should hold some info about what happens if the component is expanded
|
* - The headerItem Always visible and should hold some info about what happens if the component is expanded
|
||||||
// * The popupItem The content that needs to be shown if the component is expanded.
|
* - The popupItem The content that needs to be shown if the component is expanded.
|
||||||
|
*/
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
id: base
|
id: base
|
||||||
|
@ -17,10 +18,10 @@ Item
|
||||||
property bool expanded: false
|
property bool expanded: false
|
||||||
property bool enabled: true
|
property bool enabled: true
|
||||||
property var borderWidth: 1
|
property var borderWidth: 1
|
||||||
property color borderColor: "#CCCCCC"
|
property color borderColor: UM.Theme.getColor("monitor_card_border")
|
||||||
property color headerBackgroundColor: "white"
|
property color headerBackgroundColor: UM.Theme.getColor("monitor_icon_accent")
|
||||||
property color headerHoverColor: "#e8f2fc"
|
property color headerHoverColor: UM.Theme.getColor("monitor_card_hover")
|
||||||
property color drawerBackgroundColor: "white"
|
property color drawerBackgroundColor: UM.Theme.getColor("monitor_icon_accent")
|
||||||
property alias headerItem: header.children
|
property alias headerItem: header.children
|
||||||
property alias drawerItem: drawer.children
|
property alias drawerItem: drawer.children
|
||||||
|
|
||||||
|
|
227
plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml
Normal file
227
plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml
Normal file
|
@ -0,0 +1,227 @@
|
||||||
|
// Copyright (c) 2018 Ultimaker B.V.
|
||||||
|
// Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Controls 2.0
|
||||||
|
import QtQuick.Controls.Styles 1.4
|
||||||
|
import QtQuick.Dialogs 1.1
|
||||||
|
import QtGraphicalEffects 1.0
|
||||||
|
import UM 1.3 as UM
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a generic pop-up element which can be supplied with a target and a content item. The
|
||||||
|
* content item will appear to the left, right, above, or below the target depending on the value of
|
||||||
|
* the direction property
|
||||||
|
*/
|
||||||
|
Popup
|
||||||
|
{
|
||||||
|
id: base
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The target item is what the pop-up is "tied" to, usually a button
|
||||||
|
*/
|
||||||
|
property var target
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Which direction should the pop-up "point"?
|
||||||
|
* Possible values include:
|
||||||
|
* - "up"
|
||||||
|
* - "down"
|
||||||
|
* - "left"
|
||||||
|
* - "right"
|
||||||
|
*/
|
||||||
|
property string direction: "down"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We save the default direction so that if a pop-up was flipped but later has space (i.e. it
|
||||||
|
* moved), we can unflip it back to the default direction.
|
||||||
|
*/
|
||||||
|
property string originalDirection: ""
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the popup close when you click outside it? For example, this is
|
||||||
|
* disabled by the InfoBlurb component since it's opened and closed using mouse
|
||||||
|
* hovers, not clicks.
|
||||||
|
*/
|
||||||
|
property bool closeOnClick: true
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use white for context menus, dark grey for info blurbs!
|
||||||
|
*/
|
||||||
|
property var color: "#ffffff" // TODO: Theme!
|
||||||
|
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
recalculatePosition()
|
||||||
|
|
||||||
|
// Set the direction here so it's only set once and never mutated
|
||||||
|
originalDirection = (' ' + direction).slice(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
background: Item
|
||||||
|
{
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
DropShadow
|
||||||
|
{
|
||||||
|
anchors.fill: pointedRectangle
|
||||||
|
color: UM.Theme.getColor("monitor_shadow")
|
||||||
|
radius: UM.Theme.getSize("monitor_shadow_radius").width
|
||||||
|
source: pointedRectangle
|
||||||
|
transparentBorder: true
|
||||||
|
verticalOffset: 2 * screenScaleFactor
|
||||||
|
}
|
||||||
|
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
id: pointedRectangle
|
||||||
|
anchors
|
||||||
|
{
|
||||||
|
horizontalCenter: parent.horizontalCenter
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
height: parent.height - 10 * screenScaleFactor // Because of the shadow
|
||||||
|
width: parent.width - 10 * screenScaleFactor // Because of the shadow
|
||||||
|
|
||||||
|
Rectangle
|
||||||
|
{
|
||||||
|
id: point
|
||||||
|
anchors
|
||||||
|
{
|
||||||
|
horizontalCenter:
|
||||||
|
{
|
||||||
|
switch(direction)
|
||||||
|
{
|
||||||
|
case "left":
|
||||||
|
return bloop.left
|
||||||
|
case "right":
|
||||||
|
return bloop.right
|
||||||
|
default:
|
||||||
|
return bloop.horizontalCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
verticalCenter:
|
||||||
|
{
|
||||||
|
switch(direction)
|
||||||
|
{
|
||||||
|
case "up":
|
||||||
|
return bloop.top
|
||||||
|
case "down":
|
||||||
|
return bloop.bottom
|
||||||
|
default:
|
||||||
|
return bloop.verticalCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
color: base.color
|
||||||
|
height: 12 * screenScaleFactor
|
||||||
|
transform: Rotation
|
||||||
|
{
|
||||||
|
angle: 45
|
||||||
|
origin.x: point.width / 2
|
||||||
|
origin.y: point.height / 2
|
||||||
|
}
|
||||||
|
width: height
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle
|
||||||
|
{
|
||||||
|
id: bloop
|
||||||
|
anchors
|
||||||
|
{
|
||||||
|
fill: parent
|
||||||
|
leftMargin: direction == "left" ? 8 * screenScaleFactor : 0
|
||||||
|
rightMargin: direction == "right" ? 8 * screenScaleFactor : 0
|
||||||
|
topMargin: direction == "up" ? 8 * screenScaleFactor : 0
|
||||||
|
bottomMargin: direction == "down" ? 8 * screenScaleFactor : 0
|
||||||
|
}
|
||||||
|
color: base.color
|
||||||
|
width: parent.width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
visible: false
|
||||||
|
onClosed: visible = false
|
||||||
|
onOpened:
|
||||||
|
{
|
||||||
|
// Flip orientation if necessary
|
||||||
|
recalculateOrientation()
|
||||||
|
|
||||||
|
// Fix position if necessary
|
||||||
|
recalculatePosition()
|
||||||
|
|
||||||
|
// Show the pop up
|
||||||
|
visible = true
|
||||||
|
}
|
||||||
|
closePolicy: closeOnClick ? Popup.CloseOnPressOutside : Popup.NoAutoClose
|
||||||
|
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
padding: UM.Theme.getSize("monitor_shadow_radius").width
|
||||||
|
topPadding: direction == "up" ? padding + 8 * screenScaleFactor : padding
|
||||||
|
bottomPadding: direction == "down" ? padding + 8 * screenScaleFactor : padding
|
||||||
|
leftPadding: direction == "left" ? padding + 8 * screenScaleFactor : padding
|
||||||
|
rightPadding: direction == "right" ? padding + 8 * screenScaleFactor : padding
|
||||||
|
|
||||||
|
function recalculatePosition() {
|
||||||
|
|
||||||
|
// Stupid pop-up logic causes the pop-up to resize, so let's compute what it SHOULD be
|
||||||
|
const realWidth = contentItem.implicitWidth + leftPadding + rightPadding
|
||||||
|
const realHeight = contentItem.implicitHeight + topPadding + bottomPadding
|
||||||
|
|
||||||
|
var centered = {
|
||||||
|
x: target.x + target.width / 2 - realWidth / 2,
|
||||||
|
y: target.y + target.height / 2 - realHeight / 2
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(direction)
|
||||||
|
{
|
||||||
|
case "left":
|
||||||
|
x = target.x + target.width
|
||||||
|
y = centered.y
|
||||||
|
break
|
||||||
|
case "right":
|
||||||
|
x = target.x - realWidth
|
||||||
|
y = centered.y
|
||||||
|
break
|
||||||
|
case "up":
|
||||||
|
x = centered.x
|
||||||
|
y = target.y + target.height
|
||||||
|
break
|
||||||
|
case "down":
|
||||||
|
x = centered.x
|
||||||
|
y = target.y - realHeight
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function recalculateOrientation() {
|
||||||
|
var availableSpace
|
||||||
|
var targetPosition = target.mapToItem(monitorFrame, 0, 0)
|
||||||
|
|
||||||
|
// Stupid pop-up logic causes the pop-up to resize, so let's compute what it SHOULD be
|
||||||
|
const realWidth = contentItem.implicitWidth + leftPadding + rightPadding
|
||||||
|
const realHeight = contentItem.implicitHeight + topPadding + bottomPadding
|
||||||
|
|
||||||
|
switch(originalDirection)
|
||||||
|
{
|
||||||
|
case "up":
|
||||||
|
availableSpace = monitorFrame.height - (targetPosition.y + target.height)
|
||||||
|
direction = availableSpace < realHeight ? "down" : originalDirection
|
||||||
|
break
|
||||||
|
case "down":
|
||||||
|
availableSpace = targetPosition.y
|
||||||
|
direction = availableSpace < realHeight ? "up" : originalDirection
|
||||||
|
break
|
||||||
|
case "right":
|
||||||
|
availableSpace = targetPosition.x
|
||||||
|
direction = availableSpace < realWidth ? "left" : originalDirection
|
||||||
|
break
|
||||||
|
case "left":
|
||||||
|
availableSpace = monitorFrame.width - (targetPosition.x + target.width)
|
||||||
|
direction = availableSpace < realWidth ? "right" : originalDirection
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -41,7 +41,7 @@ Item
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: height
|
width: height
|
||||||
color: buildplateIcon.visible > 0 ? "transparent" : "#eeeeee" // TODO: Theme!
|
color: buildplateIcon.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
radius: Math.floor(height / 2)
|
radius: Math.floor(height / 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ Item
|
||||||
{
|
{
|
||||||
id: buildplateIcon
|
id: buildplateIcon
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
color: "#0a0850" // TODO: Theme! (Standard purple)
|
color: UM.Theme.getColor("monitor_icon_primary")
|
||||||
height: parent.height
|
height: parent.height
|
||||||
source: "../svg/icons/buildplate.svg"
|
source: "../svg/icons/buildplate.svg"
|
||||||
width: height
|
width: height
|
||||||
|
@ -60,7 +60,7 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: buildplateLabel
|
id: buildplateLabel
|
||||||
color: "#191919" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("default") // 12pt, regular
|
font: UM.Theme.getFont("default") // 12pt, regular
|
||||||
text: buildplate ? buildplate : ""
|
text: buildplate ? buildplate : ""
|
||||||
|
|
|
@ -49,12 +49,12 @@ Item
|
||||||
GradientStop
|
GradientStop
|
||||||
{
|
{
|
||||||
position: 0.0
|
position: 0.0
|
||||||
color: "#fff6f6f6" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_stage_background")
|
||||||
}
|
}
|
||||||
GradientStop
|
GradientStop
|
||||||
{
|
{
|
||||||
position: 1.0
|
position: 1.0
|
||||||
color: "#66f6f6f6" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_stage_background_fade")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,9 +82,9 @@ Item
|
||||||
onClicked: navigateTo(currentIndex - 1)
|
onClicked: navigateTo(currentIndex - 1)
|
||||||
background: Rectangle
|
background: Rectangle
|
||||||
{
|
{
|
||||||
color: leftButton.hovered ? "#e8f2fc" : "#ffffff" // TODO: Theme!
|
color: leftButton.hovered ? UM.Theme.getColor("monitor_card_hover") : UM.Theme.getColor("monitor_card_background")
|
||||||
border.width: 1 * screenScaleFactor // TODO: Theme!
|
border.width: 1 * screenScaleFactor // TODO: Theme!
|
||||||
border.color: "#cccccc" // TODO: Theme!
|
border.color: UM.Theme.getColor("monitor_card_border")
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
contentItem: Item
|
contentItem: Item
|
||||||
|
@ -97,7 +97,7 @@ Item
|
||||||
height: width // TODO: Theme!
|
height: width // TODO: Theme!
|
||||||
sourceSize.width: width // TODO: Theme!
|
sourceSize.width: width // TODO: Theme!
|
||||||
sourceSize.height: width // TODO: Theme!
|
sourceSize.height: width // TODO: Theme!
|
||||||
color: "#152950" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
source: UM.Theme.getIcon("arrow_left")
|
source: UM.Theme.getIcon("arrow_left")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,9 +161,9 @@ Item
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
background: Rectangle
|
background: Rectangle
|
||||||
{
|
{
|
||||||
color: rightButton.hovered ? "#e8f2fc" : "#ffffff" // TODO: Theme!
|
color: rightButton.hovered ? UM.Theme.getColor("monitor_card_hover") : UM.Theme.getColor("monitor_card_background")
|
||||||
border.width: 1 * screenScaleFactor // TODO: Theme!
|
border.width: 1 * screenScaleFactor // TODO: Theme!
|
||||||
border.color: "#cccccc" // TODO: Theme!
|
border.color: UM.Theme.getColor("monitor_card_border")
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
contentItem: Item
|
contentItem: Item
|
||||||
|
@ -176,7 +176,7 @@ Item
|
||||||
height: width // TODO: Theme!
|
height: width // TODO: Theme!
|
||||||
sourceSize.width: width // TODO: Theme!
|
sourceSize.width: width // TODO: Theme!
|
||||||
sourceSize.height: width // TODO: Theme!
|
sourceSize.height: width // TODO: Theme!
|
||||||
color: "#152950" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
source: UM.Theme.getIcon("arrow_right")
|
source: UM.Theme.getIcon("arrow_right")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,12 +204,12 @@ Item
|
||||||
GradientStop
|
GradientStop
|
||||||
{
|
{
|
||||||
position: 0.0
|
position: 0.0
|
||||||
color: "#66f6f6f6" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_stage_background_fade")
|
||||||
}
|
}
|
||||||
GradientStop
|
GradientStop
|
||||||
{
|
{
|
||||||
position: 1.0
|
position: 1.0
|
||||||
color: "#fff6f6f6" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_stage_background")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ Item
|
||||||
{
|
{
|
||||||
background: Rectangle
|
background: Rectangle
|
||||||
{
|
{
|
||||||
color: model.index == currentIndex ? "#777777" : "#d8d8d8" // TODO: Theme!
|
color: model.index == currentIndex ? UM.Theme.getColor("monitor_carousel_dot_current") : UM.Theme.getColor("monitor_carousel_dot")
|
||||||
radius: Math.floor(width / 2)
|
radius: Math.floor(width / 2)
|
||||||
width: 12 * screenScaleFactor // TODO: Theme!
|
width: 12 * screenScaleFactor // TODO: Theme!
|
||||||
height: width // TODO: Theme!
|
height: width // TODO: Theme!
|
||||||
|
|
182
plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml
Normal file
182
plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml
Normal file
|
@ -0,0 +1,182 @@
|
||||||
|
// Copyright (c) 2018 Ultimaker B.V.
|
||||||
|
// Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
import QtQuick 2.3
|
||||||
|
import QtQuick.Controls 2.0
|
||||||
|
import QtQuick.Dialogs 1.1
|
||||||
|
import UM 1.3 as UM
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A MonitorInfoBlurb is an extension of the GenericPopUp used to show static information (vs. interactive context
|
||||||
|
* menus). It accepts some text (text), an item to link to to (target), and a specification of which side of the target
|
||||||
|
* to appear on (direction). It also sets the GenericPopUp's color to black, to differentiate itself from a menu.
|
||||||
|
*/
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
property alias target: popUp.target
|
||||||
|
|
||||||
|
property var printJob: null
|
||||||
|
|
||||||
|
GenericPopUp
|
||||||
|
{
|
||||||
|
id: popUp
|
||||||
|
|
||||||
|
// Which way should the pop-up point? Default is up, but will flip when required
|
||||||
|
direction: "up"
|
||||||
|
|
||||||
|
// Use dark grey for info blurbs and white for context menus
|
||||||
|
color: UM.Theme.getColor("monitor_context_menu")
|
||||||
|
|
||||||
|
contentItem: Item
|
||||||
|
{
|
||||||
|
id: contentWrapper
|
||||||
|
implicitWidth: childrenRect.width
|
||||||
|
implicitHeight: menuItems.height + UM.Theme.getSize("default_margin").height
|
||||||
|
|
||||||
|
Column
|
||||||
|
{
|
||||||
|
id: menuItems
|
||||||
|
width: 144 * screenScaleFactor
|
||||||
|
|
||||||
|
anchors
|
||||||
|
{
|
||||||
|
top: parent.top
|
||||||
|
topMargin: Math.floor(UM.Theme.getSize("default_margin").height / 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
spacing: Math.floor(UM.Theme.getSize("default_margin").height / 2)
|
||||||
|
|
||||||
|
PrintJobContextMenuItem {
|
||||||
|
onClicked: {
|
||||||
|
sendToTopConfirmationDialog.visible = true;
|
||||||
|
popUp.close();
|
||||||
|
}
|
||||||
|
text: catalog.i18nc("@label", "Move to top");
|
||||||
|
visible: {
|
||||||
|
if (printJob && (printJob.state == "queued" || printJob.state == "error") && !isAssigned(printJob)) {
|
||||||
|
if (OutputDevice && OutputDevice.queuedPrintJobs[0]) {
|
||||||
|
return OutputDevice.queuedPrintJobs[0].key != printJob.key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintJobContextMenuItem {
|
||||||
|
onClicked: {
|
||||||
|
deleteConfirmationDialog.visible = true;
|
||||||
|
popUp.close();
|
||||||
|
}
|
||||||
|
text: catalog.i18nc("@label", "Delete");
|
||||||
|
visible: {
|
||||||
|
if (!printJob) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var states = ["queued", "error", "sent_to_printer"];
|
||||||
|
return states.indexOf(printJob.state) !== -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintJobContextMenuItem {
|
||||||
|
enabled: visible && !(printJob.state == "pausing" || printJob.state == "resuming");
|
||||||
|
onClicked: {
|
||||||
|
if (printJob.state == "paused") {
|
||||||
|
printJob.setState("print");
|
||||||
|
popUp.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (printJob.state == "printing") {
|
||||||
|
printJob.setState("pause");
|
||||||
|
popUp.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
text: {
|
||||||
|
if (!printJob) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
switch(printJob.state) {
|
||||||
|
case "paused":
|
||||||
|
return catalog.i18nc("@label", "Resume");
|
||||||
|
case "pausing":
|
||||||
|
return catalog.i18nc("@label", "Pausing...");
|
||||||
|
case "resuming":
|
||||||
|
return catalog.i18nc("@label", "Resuming...");
|
||||||
|
default:
|
||||||
|
catalog.i18nc("@label", "Pause");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
visible: {
|
||||||
|
if (!printJob) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var states = ["printing", "pausing", "paused", "resuming"];
|
||||||
|
return states.indexOf(printJob.state) !== -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintJobContextMenuItem {
|
||||||
|
enabled: visible && printJob.state !== "aborting";
|
||||||
|
onClicked: {
|
||||||
|
abortConfirmationDialog.visible = true;
|
||||||
|
popUp.close();
|
||||||
|
}
|
||||||
|
text: printJob && printJob.state == "aborting" ? catalog.i18nc("@label", "Aborting...") : catalog.i18nc("@label", "Abort");
|
||||||
|
visible: {
|
||||||
|
if (!printJob) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var states = ["pre_print", "printing", "pausing", "paused", "resuming"];
|
||||||
|
return states.indexOf(printJob.state) !== -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageDialog {
|
||||||
|
id: sendToTopConfirmationDialog
|
||||||
|
Component.onCompleted: visible = false
|
||||||
|
icon: StandardIcon.Warning
|
||||||
|
onYes: OutputDevice.sendJobToTop(printJob.key)
|
||||||
|
standardButtons: StandardButton.Yes | StandardButton.No
|
||||||
|
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : ""
|
||||||
|
title: catalog.i18nc("@window:title", "Move print job to top")
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageDialog {
|
||||||
|
id: deleteConfirmationDialog
|
||||||
|
Component.onCompleted: visible = false
|
||||||
|
icon: StandardIcon.Warning
|
||||||
|
onYes: OutputDevice.deleteJobFromQueue(printJob.key)
|
||||||
|
standardButtons: StandardButton.Yes | StandardButton.No
|
||||||
|
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : ""
|
||||||
|
title: catalog.i18nc("@window:title", "Delete print job")
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageDialog {
|
||||||
|
id: abortConfirmationDialog
|
||||||
|
Component.onCompleted: visible = false
|
||||||
|
icon: StandardIcon.Warning
|
||||||
|
onYes: printJob.setState("abort")
|
||||||
|
standardButtons: StandardButton.Yes | StandardButton.No
|
||||||
|
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : ""
|
||||||
|
title: catalog.i18nc("@window:title", "Abort print")
|
||||||
|
}
|
||||||
|
|
||||||
|
function switchPopupState() {
|
||||||
|
popUp.visible ? popUp.close() : popUp.open()
|
||||||
|
}
|
||||||
|
function open() {
|
||||||
|
popUp.open()
|
||||||
|
}
|
||||||
|
function close() {
|
||||||
|
popUp.close()
|
||||||
|
}
|
||||||
|
function isAssigned(job) {
|
||||||
|
if (!job) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return job.assignedPrinter ? true : false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright (c) 2018 Ultimaker B.V.
|
||||||
|
// Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
import QtQuick 2.3
|
||||||
|
import QtQuick.Controls 2.0
|
||||||
|
import UM 1.3 as UM
|
||||||
|
import Cura 1.0 as Cura
|
||||||
|
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
id: base
|
||||||
|
background: Rectangle
|
||||||
|
{
|
||||||
|
color: UM.Theme.getColor("viewport_background") // TODO: Theme!
|
||||||
|
height: base.height
|
||||||
|
opacity: base.down || base.hovered ? 1 : 0
|
||||||
|
radius: Math.round(0.5 * width)
|
||||||
|
width: base.width
|
||||||
|
}
|
||||||
|
contentItem: Label {
|
||||||
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
|
font.pixelSize: 32 * screenScaleFactor
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
text: base.text
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
}
|
||||||
|
height: width
|
||||||
|
hoverEnabled: enabled
|
||||||
|
text: "\u22EE" //Unicode Three stacked points.
|
||||||
|
width: 36 * screenScaleFactor // TODO: Theme!
|
||||||
|
}
|
|
@ -36,7 +36,7 @@ Item
|
||||||
MonitorIconExtruder
|
MonitorIconExtruder
|
||||||
{
|
{
|
||||||
id: extruderIcon
|
id: extruderIcon
|
||||||
color: "#eeeeee" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
position: 0
|
position: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ Item
|
||||||
left: extruderIcon.right
|
left: extruderIcon.right
|
||||||
leftMargin: 12 * screenScaleFactor // TODO: Theme!
|
leftMargin: 12 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
color: materialLabel.visible > 0 ? "transparent" : "#eeeeee" // TODO: Theme!
|
color: materialLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
height: 18 * screenScaleFactor // TODO: Theme!
|
height: 18 * screenScaleFactor // TODO: Theme!
|
||||||
width: Math.max(materialLabel.contentWidth, 60 * screenScaleFactor) // TODO: Theme!
|
width: Math.max(materialLabel.contentWidth, 60 * screenScaleFactor) // TODO: Theme!
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
|
@ -57,7 +57,7 @@ Item
|
||||||
{
|
{
|
||||||
id: materialLabel
|
id: materialLabel
|
||||||
|
|
||||||
color: "#191919" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("default") // 12pt, regular
|
font: UM.Theme.getFont("default") // 12pt, regular
|
||||||
text: ""
|
text: ""
|
||||||
|
@ -77,7 +77,7 @@ Item
|
||||||
left: materialLabelWrapper.left
|
left: materialLabelWrapper.left
|
||||||
bottom: parent.bottom
|
bottom: parent.bottom
|
||||||
}
|
}
|
||||||
color: printCoreLabel.visible > 0 ? "transparent" : "#eeeeee" // TODO: Theme!
|
color: printCoreLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
height: 18 * screenScaleFactor // TODO: Theme!
|
height: 18 * screenScaleFactor // TODO: Theme!
|
||||||
width: Math.max(printCoreLabel.contentWidth, 36 * screenScaleFactor) // TODO: Theme!
|
width: Math.max(printCoreLabel.contentWidth, 36 * screenScaleFactor) // TODO: Theme!
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
|
@ -86,7 +86,7 @@ Item
|
||||||
{
|
{
|
||||||
id: printCoreLabel
|
id: printCoreLabel
|
||||||
|
|
||||||
color: "#191919" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("default_bold") // 12pt, bold
|
font: UM.Theme.getFont("default_bold") // 12pt, bold
|
||||||
text: ""
|
text: ""
|
||||||
|
|
|
@ -39,6 +39,7 @@ Item
|
||||||
{
|
{
|
||||||
id: positionLabel
|
id: positionLabel
|
||||||
font: UM.Theme.getFont("small")
|
font: UM.Theme.getFont("small")
|
||||||
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
height: Math.round(size / 2)
|
height: Math.round(size / 2)
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
text: position + 1
|
text: position + 1
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright (c) 2018 Ultimaker B.V.
|
||||||
|
// Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
import QtQuick 2.3
|
||||||
|
import QtQuick.Controls 2.0
|
||||||
|
import UM 1.3 as UM
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A MonitorInfoBlurb is an extension of the GenericPopUp used to show static information (vs. interactive context
|
||||||
|
* menus). It accepts some text (text), an item to link to to (target), and a specification of which side of the target
|
||||||
|
* to appear on (direction). It also sets the GenericPopUp's color to black, to differentiate itself from a menu.
|
||||||
|
*/
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
property alias text: innerLabel.text
|
||||||
|
property alias target: popUp.target
|
||||||
|
property alias direction: popUp.direction
|
||||||
|
|
||||||
|
GenericPopUp
|
||||||
|
{
|
||||||
|
id: popUp
|
||||||
|
|
||||||
|
// Which way should the pop-up point? Default is up, but will flip when required
|
||||||
|
direction: "up"
|
||||||
|
|
||||||
|
// Use dark grey for info blurbs and white for context menus
|
||||||
|
color: UM.Theme.getColor("monitor_tooltip")
|
||||||
|
|
||||||
|
contentItem: Item
|
||||||
|
{
|
||||||
|
id: contentWrapper
|
||||||
|
implicitWidth: childrenRect.width
|
||||||
|
implicitHeight: innerLabel.contentHeight + 2 * innerLabel.padding
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
id: innerLabel
|
||||||
|
padding: 12 * screenScaleFactor // TODO: Theme!
|
||||||
|
text: ""
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
width: 240 * screenScaleFactor // TODO: Theme!
|
||||||
|
color: UM.Theme.getColor("monitor_tooltip_text")
|
||||||
|
font: UM.Theme.getFont("default")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function open() {
|
||||||
|
popUp.open()
|
||||||
|
}
|
||||||
|
function close() {
|
||||||
|
popUp.close()
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@
|
||||||
import QtQuick 2.2
|
import QtQuick 2.2
|
||||||
import QtQuick.Controls 2.0
|
import QtQuick.Controls 2.0
|
||||||
import UM 1.3 as UM
|
import UM 1.3 as UM
|
||||||
|
import Cura 1.0 as Cura
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Print Job Card is essentially just a filled-in Expandable Card item. All
|
* A Print Job Card is essentially just a filled-in Expandable Card item. All
|
||||||
|
@ -21,13 +22,17 @@ Item
|
||||||
// The print job which all other data is derived from
|
// The print job which all other data is derived from
|
||||||
property var printJob: null
|
property var printJob: null
|
||||||
|
|
||||||
|
// If the printer is a cloud printer or not. Other items base their enabled state off of this boolean. In the future
|
||||||
|
// they might not need to though.
|
||||||
|
property bool cloudConnection: Cura.MachineManager.activeMachineHasActiveCloudConnection
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
|
|
||||||
ExpandableCard
|
ExpandableCard
|
||||||
{
|
{
|
||||||
enabled: printJob != null
|
enabled: printJob != null
|
||||||
borderColor: printJob.configurationChanges.length !== 0 ? "#f5a623" : "#CCCCCC" // TODO: Theme!
|
borderColor: printJob && printJob.configurationChanges.length !== 0 ? UM.Theme.getColor("warning") : UM.Theme.getColor("monitor_card_border")
|
||||||
headerItem: Row
|
headerItem: Row
|
||||||
{
|
{
|
||||||
height: 48 * screenScaleFactor // TODO: Theme!
|
height: 48 * screenScaleFactor // TODO: Theme!
|
||||||
|
@ -49,7 +54,7 @@ Item
|
||||||
width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
|
width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
color: "#eeeeee"
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
width: Math.round(parent.width / 2)
|
width: Math.round(parent.width / 2)
|
||||||
height: parent.height
|
height: parent.height
|
||||||
visible: !printJob
|
visible: !printJob
|
||||||
|
@ -57,7 +62,7 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: printJob && printJob.name ? printJob.name : ""
|
text: printJob && printJob.name ? printJob.name : ""
|
||||||
color: "#374355"
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
visible: printJob
|
visible: printJob
|
||||||
|
@ -75,7 +80,7 @@ Item
|
||||||
width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
|
width: 216 * screenScaleFactor // TODO: Theme! (Should match column size)
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
color: "#eeeeee"
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
width: Math.round(parent.width / 3)
|
width: Math.round(parent.width / 3)
|
||||||
height: parent.height
|
height: parent.height
|
||||||
visible: !printJob
|
visible: !printJob
|
||||||
|
@ -83,7 +88,7 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : ""
|
text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : ""
|
||||||
color: "#374355"
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
visible: printJob
|
visible: printJob
|
||||||
|
@ -102,7 +107,7 @@ Item
|
||||||
|
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
color: "#eeeeee"
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
width: 72 * screenScaleFactor // TODO: Theme!
|
width: 72 * screenScaleFactor // TODO: Theme!
|
||||||
height: parent.height
|
height: parent.height
|
||||||
visible: !printJob
|
visible: !printJob
|
||||||
|
@ -112,7 +117,7 @@ Item
|
||||||
{
|
{
|
||||||
id: printerAssignmentLabel
|
id: printerAssignmentLabel
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
color: "#374355"
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
text: {
|
text: {
|
||||||
|
@ -176,7 +181,7 @@ Item
|
||||||
{
|
{
|
||||||
id: printerConfiguration
|
id: printerConfiguration
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
buildplate: "Glass"
|
buildplate: catalog.i18nc("@label", "Glass")
|
||||||
configurations:
|
configurations:
|
||||||
[
|
[
|
||||||
base.printJob.configuration.extruderConfigurations[0],
|
base.printJob.configuration.extruderConfigurations[0],
|
||||||
|
@ -186,7 +191,7 @@ Item
|
||||||
}
|
}
|
||||||
Label {
|
Label {
|
||||||
text: printJob && printJob.owner ? printJob.owner : ""
|
text: printJob && printJob.owner ? printJob.owner : ""
|
||||||
color: "#374355" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
anchors.top: printerConfiguration.top
|
anchors.top: printerConfiguration.top
|
||||||
|
@ -198,18 +203,52 @@ Item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintJobContextMenu
|
MonitorContextMenuButton
|
||||||
{
|
{
|
||||||
id: contextButton
|
id: contextMenuButton
|
||||||
anchors
|
anchors
|
||||||
{
|
{
|
||||||
right: parent.right;
|
right: parent.right
|
||||||
rightMargin: 8 * screenScaleFactor // TODO: Theme!
|
rightMargin: 8 * screenScaleFactor // TODO: Theme!
|
||||||
top: parent.top
|
top: parent.top
|
||||||
topMargin: 8 * screenScaleFactor // TODO: Theme!
|
topMargin: 8 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
printJob: base.printJob
|
|
||||||
width: 32 * screenScaleFactor // TODO: Theme!
|
width: 32 * screenScaleFactor // TODO: Theme!
|
||||||
height: 32 * screenScaleFactor // TODO: Theme!
|
height: 32 * screenScaleFactor // TODO: Theme!
|
||||||
|
enabled: !cloudConnection
|
||||||
|
onClicked: enabled ? contextMenu.switchPopupState() : {}
|
||||||
|
visible:
|
||||||
|
{
|
||||||
|
if (!printJob) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
var states = ["queued", "error", "sent_to_printer", "pre_print", "printing", "pausing", "paused", "resuming"]
|
||||||
|
return states.indexOf(printJob.state) !== -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MonitorContextMenu
|
||||||
|
{
|
||||||
|
id: contextMenu
|
||||||
|
printJob: base.printJob ? base.printJob : null
|
||||||
|
target: contextMenuButton
|
||||||
|
}
|
||||||
|
|
||||||
|
// For cloud printing, add this mouse area over the disabled contextButton to indicate that it's not available
|
||||||
|
MouseArea
|
||||||
|
{
|
||||||
|
id: contextMenuDisabledButtonArea
|
||||||
|
anchors.fill: contextMenuButton
|
||||||
|
hoverEnabled: contextMenuButton.visible && !contextMenuButton.enabled
|
||||||
|
onEntered: contextMenuDisabledInfo.open()
|
||||||
|
onExited: contextMenuDisabledInfo.close()
|
||||||
|
enabled: !contextMenuButton.enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
MonitorInfoBlurb
|
||||||
|
{
|
||||||
|
id: contextMenuDisabledInfo
|
||||||
|
text: catalog.i18nc("@info", "These options are not available because you are monitoring a cloud printer.")
|
||||||
|
target: contextMenuButton
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -19,7 +19,7 @@ Item
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: printJob ? "transparent" : "#eeeeee" // TODO: Theme!
|
color: printJob ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
radius: 8 // TODO: Theme!
|
radius: 8 // TODO: Theme!
|
||||||
Image
|
Image
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,15 +34,15 @@ Item
|
||||||
{
|
{
|
||||||
background: Rectangle
|
background: Rectangle
|
||||||
{
|
{
|
||||||
color: "#f5f5f5" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_progress_bar_empty")
|
||||||
implicitHeight: visible ? 8 * screenScaleFactor : 0 // TODO: Theme!
|
implicitHeight: visible ? 12 * screenScaleFactor : 0 // TODO: Theme!
|
||||||
implicitWidth: 180 * screenScaleFactor // TODO: Theme!
|
implicitWidth: 180 * screenScaleFactor // TODO: Theme!
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
progress: Rectangle
|
progress: Rectangle
|
||||||
{
|
{
|
||||||
id: progressItem;
|
id: progressItem;
|
||||||
color: printJob && printJob.isActive ? "#3282ff" : "#CCCCCC" // TODO: Theme!
|
color: printJob && printJob.isActive ? UM.Theme.getColor("monitor_progress_bar_fill") : UM.Theme.getColor("monitor_progress_bar_deactive")
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ Item
|
||||||
leftMargin: 18 * screenScaleFactor // TODO: Theme!
|
leftMargin: 18 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
text: printJob ? Math.round(printJob.progress * 100) + "%" : "0%"
|
text: printJob ? Math.round(printJob.progress * 100) + "%" : "0%"
|
||||||
color: printJob && printJob.isActive ? "#374355" : "#babac1" // TODO: Theme!
|
color: printJob && printJob.isActive ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled")
|
||||||
width: contentWidth
|
width: contentWidth
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ Item
|
||||||
left: percentLabel.right
|
left: percentLabel.right
|
||||||
leftMargin: 18 * screenScaleFactor // TODO: Theme!
|
leftMargin: 18 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
color: "#374355" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
text:
|
text:
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,15 +5,14 @@ import QtQuick 2.3
|
||||||
import QtQuick.Controls 2.0
|
import QtQuick.Controls 2.0
|
||||||
import QtQuick.Dialogs 1.1
|
import QtQuick.Dialogs 1.1
|
||||||
import UM 1.3 as UM
|
import UM 1.3 as UM
|
||||||
|
import Cura 1.0 as Cura
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Printer Card is has two main components: the printer portion and the print
|
* A Printer Card is has two main components: the printer portion and the print job portion, the latter being paired in
|
||||||
* job portion, the latter being paired in the UI when a print job is paired
|
* the UI when a print job is paired a printer in-cluster.
|
||||||
* a printer in-cluster.
|
|
||||||
*
|
*
|
||||||
* NOTE: For most labels, a fixed height with vertical alignment is used to make
|
* NOTE: For most labels, a fixed height with vertical alignment is used to make layouts more deterministic (like the
|
||||||
* layouts more deterministic (like the fixed-size textboxes used in original
|
* fixed-size textboxes used in original mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted
|
||||||
* mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted
|
|
||||||
* with '// FIXED-LINE-HEIGHT:'.
|
* with '// FIXED-LINE-HEIGHT:'.
|
||||||
*/
|
*/
|
||||||
Item
|
Item
|
||||||
|
@ -25,11 +24,14 @@ Item
|
||||||
|
|
||||||
property var borderSize: 1 * screenScaleFactor // TODO: Theme, and remove from here
|
property var borderSize: 1 * screenScaleFactor // TODO: Theme, and remove from here
|
||||||
|
|
||||||
// If the printer card's controls are enabled. This is used by the carousel
|
// If the printer card's controls are enabled. This is used by the carousel to prevent opening the context menu or
|
||||||
// to prevent opening the context menu or camera while the printer card is not
|
// camera while the printer card is not "in focus"
|
||||||
// "in focus"
|
|
||||||
property var enabled: true
|
property var enabled: true
|
||||||
|
|
||||||
|
// If the printer is a cloud printer or not. Other items base their enabled state off of this boolean. In the future
|
||||||
|
// they might not need to though.
|
||||||
|
property bool cloudConnection: Cura.MachineManager.activeMachineHasActiveCloudConnection
|
||||||
|
|
||||||
width: 834 * screenScaleFactor // TODO: Theme!
|
width: 834 * screenScaleFactor // TODO: Theme!
|
||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
|
|
||||||
|
@ -37,10 +39,10 @@ Item
|
||||||
{
|
{
|
||||||
id: background
|
id: background
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: "#FFFFFF" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_card_background")
|
||||||
border
|
border
|
||||||
{
|
{
|
||||||
color: "#CCCCCC" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_card_border")
|
||||||
width: borderSize // TODO: Remove once themed
|
width: borderSize // TODO: Remove once themed
|
||||||
}
|
}
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
|
@ -69,7 +71,7 @@ Item
|
||||||
id: printerImage
|
id: printerImage
|
||||||
width: 108 * screenScaleFactor // TODO: Theme!
|
width: 108 * screenScaleFactor // TODO: Theme!
|
||||||
height: 108 * screenScaleFactor // TODO: Theme!
|
height: 108 * screenScaleFactor // TODO: Theme!
|
||||||
color: printer ? "transparent" : "#eeeeee" // TODO: Theme!
|
color: printer ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
radius: 8 // TODO: Theme!
|
radius: 8 // TODO: Theme!
|
||||||
Image
|
Image
|
||||||
{
|
{
|
||||||
|
@ -93,8 +95,7 @@ Item
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
id: printerNameLabel
|
id: printerNameLabel
|
||||||
// color: "#414054" // TODO: Theme!
|
color: printer ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
color: printer ? "transparent" : "#eeeeee" // TODO: Theme!
|
|
||||||
height: 18 * screenScaleFactor // TODO: Theme!
|
height: 18 * screenScaleFactor // TODO: Theme!
|
||||||
width: parent.width
|
width: parent.width
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
|
@ -102,7 +103,7 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: printer && printer.name ? printer.name : ""
|
text: printer && printer.name ? printer.name : ""
|
||||||
color: "#414054" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("large") // 16pt, bold
|
font: UM.Theme.getFont("large") // 16pt, bold
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
@ -116,7 +117,7 @@ Item
|
||||||
|
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
color: "#eeeeee" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
height: 18 * screenScaleFactor // TODO: Theme!
|
height: 18 * screenScaleFactor // TODO: Theme!
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
visible: !printer
|
visible: !printer
|
||||||
|
@ -156,16 +157,11 @@ Item
|
||||||
}
|
}
|
||||||
height: 72 * screenScaleFactor // TODO: Theme!te theRect's x property
|
height: 72 * screenScaleFactor // TODO: Theme!te theRect's x property
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Make this work.
|
|
||||||
PropertyAnimation { target: printerConfiguration; property: "visible"; to: 0; loops: Animation.Infinite; duration: 500 }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MonitorContextMenuButton
|
||||||
|
|
||||||
PrintJobContextMenu
|
|
||||||
{
|
{
|
||||||
id: contextButton
|
id: contextMenuButton
|
||||||
anchors
|
anchors
|
||||||
{
|
{
|
||||||
right: parent.right
|
right: parent.right
|
||||||
|
@ -173,15 +169,49 @@ Item
|
||||||
top: parent.top
|
top: parent.top
|
||||||
topMargin: 12 * screenScaleFactor // TODO: Theme!
|
topMargin: 12 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
printJob: printer ? printer.activePrintJob : null
|
|
||||||
width: 36 * screenScaleFactor // TODO: Theme!
|
width: 36 * screenScaleFactor // TODO: Theme!
|
||||||
height: 36 * screenScaleFactor // TODO: Theme!
|
height: 36 * screenScaleFactor // TODO: Theme!
|
||||||
enabled: base.enabled
|
enabled: !cloudConnection
|
||||||
visible: printer
|
|
||||||
|
onClicked: enabled ? contextMenu.switchPopupState() : {}
|
||||||
|
visible:
|
||||||
|
{
|
||||||
|
if (!printer || !printer.activePrintJob) {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
var states = ["queued", "error", "sent_to_printer", "pre_print", "printing", "pausing", "paused", "resuming"]
|
||||||
|
return states.indexOf(printer.activePrintJob.state) !== -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MonitorContextMenu
|
||||||
|
{
|
||||||
|
id: contextMenu
|
||||||
|
printJob: printer ? printer.activePrintJob : null
|
||||||
|
target: contextMenuButton
|
||||||
|
}
|
||||||
|
|
||||||
|
// For cloud printing, add this mouse area over the disabled contextButton to indicate that it's not available
|
||||||
|
MouseArea
|
||||||
|
{
|
||||||
|
id: contextMenuDisabledButtonArea
|
||||||
|
anchors.fill: contextMenuButton
|
||||||
|
hoverEnabled: contextMenuButton.visible && !contextMenuButton.enabled
|
||||||
|
onEntered: contextMenuDisabledInfo.open()
|
||||||
|
onExited: contextMenuDisabledInfo.close()
|
||||||
|
enabled: !contextMenuButton.enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
MonitorInfoBlurb
|
||||||
|
{
|
||||||
|
id: contextMenuDisabledInfo
|
||||||
|
text: catalog.i18nc("@info", "These options are not available because you are monitoring a cloud printer.")
|
||||||
|
target: contextMenuButton
|
||||||
|
}
|
||||||
|
|
||||||
CameraButton
|
CameraButton
|
||||||
{
|
{
|
||||||
id: cameraButton;
|
id: cameraButton
|
||||||
anchors
|
anchors
|
||||||
{
|
{
|
||||||
right: parent.right
|
right: parent.right
|
||||||
|
@ -190,9 +220,27 @@ Item
|
||||||
bottomMargin: 20 * screenScaleFactor // TODO: Theme!
|
bottomMargin: 20 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
iconSource: "../svg/icons/camera.svg"
|
iconSource: "../svg/icons/camera.svg"
|
||||||
enabled: base.enabled
|
enabled: !cloudConnection
|
||||||
visible: printer
|
visible: printer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For cloud printing, add this mouse area over the disabled cameraButton to indicate that it's not available
|
||||||
|
MouseArea
|
||||||
|
{
|
||||||
|
id: cameraDisabledButtonArea
|
||||||
|
anchors.fill: cameraButton
|
||||||
|
hoverEnabled: cameraButton.visible && !cameraButton.enabled
|
||||||
|
onEntered: cameraDisabledInfo.open()
|
||||||
|
onExited: cameraDisabledInfo.close()
|
||||||
|
enabled: !cameraButton.enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
MonitorInfoBlurb
|
||||||
|
{
|
||||||
|
id: cameraDisabledInfo
|
||||||
|
text: catalog.i18nc("@info", "The webcam is not available because you are monitoring a cloud printer.")
|
||||||
|
target: cameraButton
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -220,7 +268,7 @@ Item
|
||||||
}
|
}
|
||||||
border
|
border
|
||||||
{
|
{
|
||||||
color: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 ? "#f5a623" : "transparent" // TODO: Theme!
|
color: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 ? UM.Theme.getColor("warning") : "transparent" // TODO: Theme!
|
||||||
width: borderSize // TODO: Remove once themed
|
width: borderSize // TODO: Remove once themed
|
||||||
}
|
}
|
||||||
color: "transparent" // TODO: Theme!
|
color: "transparent" // TODO: Theme!
|
||||||
|
@ -246,7 +294,7 @@ Item
|
||||||
{
|
{
|
||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
color: printer ? "#414054" : "#aaaaaa" // TODO: Theme!
|
color: printer ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled")
|
||||||
font: UM.Theme.getFont("large_bold") // 16pt, bold
|
font: UM.Theme.getFont("large_bold") // 16pt, bold
|
||||||
text: {
|
text: {
|
||||||
if (!printer) {
|
if (!printer) {
|
||||||
|
@ -299,10 +347,10 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: printerJobNameLabel
|
id: printerJobNameLabel
|
||||||
color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? "#414054" : "#babac1" // TODO: Theme!
|
color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("large") // 16pt, bold
|
font: UM.Theme.getFont("large") // 16pt, bold
|
||||||
text: printer && printer.activePrintJob ? printer.activePrintJob.name : "Untitled" // TODO: I18N
|
text: printer && printer.activePrintJob ? printer.activePrintJob.name : catalog.i18nc("@label", "Untitled")
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
// FIXED-LINE-HEIGHT:
|
// FIXED-LINE-HEIGHT:
|
||||||
|
@ -319,10 +367,10 @@ Item
|
||||||
topMargin: 6 * screenScaleFactor // TODO: Theme!
|
topMargin: 6 * screenScaleFactor // TODO: Theme!
|
||||||
left: printerJobNameLabel.left
|
left: printerJobNameLabel.left
|
||||||
}
|
}
|
||||||
color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? "#53657d" : "#babac1" // TODO: Theme!
|
color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("default") // 12pt, regular
|
font: UM.Theme.getFont("default") // 12pt, regular
|
||||||
text: printer && printer.activePrintJob ? printer.activePrintJob.owner : "Anonymous" // TODO: I18N
|
text: printer && printer.activePrintJob ? printer.activePrintJob.owner : catalog.i18nc("@label", "Anonymous")
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
// FIXED-LINE-HEIGHT:
|
// FIXED-LINE-HEIGHT:
|
||||||
|
@ -348,7 +396,7 @@ Item
|
||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
font: UM.Theme.getFont("default")
|
font: UM.Theme.getFont("default")
|
||||||
text: "Requires configuration changes"
|
text: catalog.i18nc("@label:status", "Requires configuration changes")
|
||||||
visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible
|
visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible
|
||||||
|
|
||||||
// FIXED-LINE-HEIGHT:
|
// FIXED-LINE-HEIGHT:
|
||||||
|
@ -368,13 +416,13 @@ Item
|
||||||
}
|
}
|
||||||
background: Rectangle
|
background: Rectangle
|
||||||
{
|
{
|
||||||
color: "#d8d8d8" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_secondary_button_shadow")
|
||||||
radius: 2 * screenScaleFactor // Todo: Theme!
|
radius: 2 * screenScaleFactor // Todo: Theme!
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme!
|
anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme!
|
||||||
color: detailsButton.hovered ? "#e4e4e4" : "#f0f0f0" // TODO: Theme!
|
color: detailsButton.hovered ? UM.Theme.getColor("monitor_secondary_button_hover") : UM.Theme.getColor("monitor_secondary_button")
|
||||||
radius: 2 * screenScaleFactor // Todo: Theme!
|
radius: 2 * screenScaleFactor // Todo: Theme!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -382,9 +430,9 @@ Item
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme!
|
anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme!
|
||||||
color: "#1e66d7" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_secondary_button_text")
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
text: "Details" // TODO: I18NC!
|
text: catalog.i18nc("@action:button","Details");
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
height: 18 * screenScaleFactor // TODO: Theme!
|
height: 18 * screenScaleFactor // TODO: Theme!
|
||||||
|
|
|
@ -37,7 +37,7 @@ Item
|
||||||
|
|
||||||
MonitorExtruderConfiguration
|
MonitorExtruderConfiguration
|
||||||
{
|
{
|
||||||
color: modelData && modelData.activeMaterial ? modelData.activeMaterial.color : "#eeeeee" // TODO: Theme!
|
color: modelData && modelData.activeMaterial ? modelData.activeMaterial.color : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
material: modelData && modelData.activeMaterial ? modelData.activeMaterial.name : ""
|
material: modelData && modelData.activeMaterial ? modelData.activeMaterial.name : ""
|
||||||
position: modelData && typeof(modelData.position) === "number" ? modelData.position : -1 // Use negative one to create empty extruder number
|
position: modelData && typeof(modelData.position) === "number" ? modelData.position : -1 // Use negative one to create empty extruder number
|
||||||
printCore: modelData ? modelData.hotendID : ""
|
printCore: modelData ? modelData.hotendID : ""
|
||||||
|
|
|
@ -32,14 +32,14 @@ Item
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: background
|
id: background
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: printerNameLabel.visible ? "#e4e4f2" : "#eeeeee"// TODO: Theme!
|
color: printerNameLabel.visible ? UM.Theme.getColor("monitor_printer_family_tag") : UM.Theme.getColor("monitor_skeleton_loading")
|
||||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
id: printerNameLabel
|
id: printerNameLabel
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
color: "#535369" // TODO: Theme!
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
text: tagText
|
text: tagText
|
||||||
font.pointSize: 10 // TODO: Theme!
|
font.pointSize: 10 // TODO: Theme!
|
||||||
visible: text !== ""
|
visible: text !== ""
|
||||||
|
|
|
@ -22,7 +22,7 @@ Item
|
||||||
left: queuedPrintJobs.left
|
left: queuedPrintJobs.left
|
||||||
top: parent.top
|
top: parent.top
|
||||||
}
|
}
|
||||||
color: UM.Theme.getColor("text")
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
font: UM.Theme.getFont("large")
|
font: UM.Theme.getFont("large")
|
||||||
text: catalog.i18nc("@label", "Queued")
|
text: catalog.i18nc("@label", "Queued")
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ Item
|
||||||
{
|
{
|
||||||
id: externalLinkIcon
|
id: externalLinkIcon
|
||||||
anchors.verticalCenter: manageQueueLabel.verticalCenter
|
anchors.verticalCenter: manageQueueLabel.verticalCenter
|
||||||
color: UM.Theme.getColor("text_link")
|
color: UM.Theme.getColor("monitor_text_link")
|
||||||
source: UM.Theme.getIcon("external_link")
|
source: UM.Theme.getIcon("external_link")
|
||||||
width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
|
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?!)
|
height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
|
||||||
|
@ -56,9 +56,9 @@ Item
|
||||||
leftMargin: 6 * screenScaleFactor // TODO: Theme!
|
leftMargin: 6 * screenScaleFactor // TODO: Theme!
|
||||||
verticalCenter: externalLinkIcon.verticalCenter
|
verticalCenter: externalLinkIcon.verticalCenter
|
||||||
}
|
}
|
||||||
color: UM.Theme.getColor("text_link")
|
color: UM.Theme.getColor("monitor_text_link")
|
||||||
font: UM.Theme.getFont("default") // 12pt, regular
|
font: UM.Theme.getFont("default") // 12pt, regular
|
||||||
linkColor: UM.Theme.getColor("text_link")
|
linkColor: UM.Theme.getColor("monitor_text_link")
|
||||||
text: catalog.i18nc("@label link to connect manager", "Manage queue in Cura Connect")
|
text: catalog.i18nc("@label link to connect manager", "Manage queue in Cura Connect")
|
||||||
renderType: Text.NativeRendering
|
renderType: Text.NativeRendering
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@label", "Print jobs")
|
text: catalog.i18nc("@label", "Print jobs")
|
||||||
color: "#666666"
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
@ -108,7 +108,7 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@label", "Total print time")
|
text: catalog.i18nc("@label", "Total print time")
|
||||||
color: "#666666"
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
@ -122,7 +122,7 @@ Item
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@label", "Waiting for")
|
text: catalog.i18nc("@label", "Waiting for")
|
||||||
color: "#666666"
|
color: UM.Theme.getColor("monitor_text_primary")
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
|
@ -11,7 +11,7 @@ import QtGraphicalEffects 1.0
|
||||||
// This is the root component for the monitor stage.
|
// This is the root component for the monitor stage.
|
||||||
Component
|
Component
|
||||||
{
|
{
|
||||||
Item
|
Rectangle
|
||||||
{
|
{
|
||||||
id: monitorFrame
|
id: monitorFrame
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ Component
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
width: maximumWidth
|
width: maximumWidth
|
||||||
|
color: UM.Theme.getColor("monitor_stage_background")
|
||||||
|
|
||||||
// Enable keyboard navigation. NOTE: This is done here so that we can also potentially
|
// Enable keyboard navigation. NOTE: This is done here so that we can also potentially
|
||||||
// forward to the queue items in the future. (Deleting selected print job, etc.)
|
// forward to the queue items in the future. (Deleting selected print job, etc.)
|
||||||
|
@ -36,24 +37,6 @@ Component
|
||||||
name: "cura"
|
name: "cura"
|
||||||
}
|
}
|
||||||
|
|
||||||
LinearGradient
|
|
||||||
{
|
|
||||||
anchors.fill: parent
|
|
||||||
gradient: Gradient
|
|
||||||
{
|
|
||||||
GradientStop
|
|
||||||
{
|
|
||||||
position: 0.0
|
|
||||||
color: "#f6f6f6" // TODO: Theme!
|
|
||||||
}
|
|
||||||
GradientStop
|
|
||||||
{
|
|
||||||
position: 1.0
|
|
||||||
color: "#ffffff" // TODO: Theme!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
id: printers
|
id: printers
|
||||||
|
|
|
@ -1,274 +0,0 @@
|
||||||
// Copyright (c) 2018 Ultimaker B.V.
|
|
||||||
// Cura is released under the terms of the LGPLv3 or higher.
|
|
||||||
|
|
||||||
import QtQuick 2.2
|
|
||||||
import QtQuick.Controls 2.0
|
|
||||||
import QtQuick.Controls.Styles 1.4
|
|
||||||
import QtQuick.Dialogs 1.1
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
import UM 1.3 as UM
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root;
|
|
||||||
property var printJob: null;
|
|
||||||
property var started: isStarted(printJob);
|
|
||||||
property var assigned: isAssigned(printJob);
|
|
||||||
property var enabled: true
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: button;
|
|
||||||
background: Rectangle {
|
|
||||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
|
||||||
height: button.height;
|
|
||||||
opacity: button.down || button.hovered ? 1 : 0;
|
|
||||||
radius: Math.round(0.5 * width);
|
|
||||||
width: button.width;
|
|
||||||
}
|
|
||||||
contentItem: Label {
|
|
||||||
color: UM.Theme.getColor("monitor_context_menu_dots");
|
|
||||||
font.pixelSize: 32 * screenScaleFactor;
|
|
||||||
horizontalAlignment: Text.AlignHCenter;
|
|
||||||
text: button.text;
|
|
||||||
verticalAlignment: Text.AlignVCenter;
|
|
||||||
}
|
|
||||||
height: width;
|
|
||||||
hoverEnabled: base.enabled
|
|
||||||
onClicked: base.enabled ? parent.switchPopupState() : {}
|
|
||||||
text: "\u22EE"; //Unicode; Three stacked points.
|
|
||||||
visible: {
|
|
||||||
if (!printJob) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var states = ["queued", "sent_to_printer", "pre_print", "printing", "pausing", "paused", "resuming"];
|
|
||||||
return states.indexOf(printJob.state) !== -1;
|
|
||||||
}
|
|
||||||
width: 36 * screenScaleFactor; // TODO: Theme!
|
|
||||||
}
|
|
||||||
|
|
||||||
Popup {
|
|
||||||
id: popup;
|
|
||||||
background: Item {
|
|
||||||
anchors.fill: parent;
|
|
||||||
|
|
||||||
DropShadow {
|
|
||||||
anchors.fill: pointedRectangle;
|
|
||||||
color: UM.Theme.getColor("monitor_shadow");
|
|
||||||
radius: UM.Theme.getSize("monitor_shadow_radius").width;
|
|
||||||
source: pointedRectangle;
|
|
||||||
transparentBorder: true;
|
|
||||||
verticalOffset: 2 * screenScaleFactor;
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: pointedRectangle;
|
|
||||||
anchors {
|
|
||||||
horizontalCenter: parent.horizontalCenter;
|
|
||||||
verticalCenter: parent.verticalCenter;
|
|
||||||
}
|
|
||||||
height: parent.height - 10 * screenScaleFactor; // Because of the shadow
|
|
||||||
width: parent.width - 10 * screenScaleFactor; // Because of the shadow
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: point;
|
|
||||||
anchors {
|
|
||||||
right: bloop.right;
|
|
||||||
rightMargin: 24 * screenScaleFactor;
|
|
||||||
}
|
|
||||||
color: UM.Theme.getColor("monitor_context_menu_background");
|
|
||||||
height: 14 * screenScaleFactor;
|
|
||||||
transform: Rotation {
|
|
||||||
angle: 45;
|
|
||||||
}
|
|
||||||
width: 14 * screenScaleFactor;
|
|
||||||
y: 1 * screenScaleFactor;
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: bloop;
|
|
||||||
anchors {
|
|
||||||
bottom: parent.bottom;
|
|
||||||
bottomMargin: 8 * screenScaleFactor; // Because of the shadow
|
|
||||||
top: parent.top;
|
|
||||||
topMargin: 8 * screenScaleFactor; // Because of the shadow + point
|
|
||||||
}
|
|
||||||
color: UM.Theme.getColor("monitor_context_menu_background");
|
|
||||||
width: parent.width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
clip: true;
|
|
||||||
closePolicy: Popup.CloseOnPressOutside;
|
|
||||||
contentItem: Column {
|
|
||||||
id: popupOptions;
|
|
||||||
anchors {
|
|
||||||
top: parent.top;
|
|
||||||
topMargin: UM.Theme.getSize("default_margin").height + 10 * screenScaleFactor; // Account for the point of the box
|
|
||||||
}
|
|
||||||
height: childrenRect.height + spacing * popupOptions.children.length + UM.Theme.getSize("default_margin").height;
|
|
||||||
spacing: Math.floor(UM.Theme.getSize("default_margin").height / 2);
|
|
||||||
width: parent.width;
|
|
||||||
|
|
||||||
PrintJobContextMenuItem {
|
|
||||||
onClicked: {
|
|
||||||
sendToTopConfirmationDialog.visible = true;
|
|
||||||
popup.close();
|
|
||||||
}
|
|
||||||
text: catalog.i18nc("@label", "Move to top");
|
|
||||||
visible: {
|
|
||||||
if (printJob && printJob.state == "queued" && !assigned) {
|
|
||||||
if (OutputDevice && OutputDevice.queuedPrintJobs[0]) {
|
|
||||||
return OutputDevice.queuedPrintJobs[0].key != printJob.key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PrintJobContextMenuItem {
|
|
||||||
onClicked: {
|
|
||||||
deleteConfirmationDialog.visible = true;
|
|
||||||
popup.close();
|
|
||||||
}
|
|
||||||
text: catalog.i18nc("@label", "Delete");
|
|
||||||
visible: {
|
|
||||||
if (!printJob) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var states = ["queued", "sent_to_printer"];
|
|
||||||
return states.indexOf(printJob.state) !== -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PrintJobContextMenuItem {
|
|
||||||
enabled: visible && !(printJob.state == "pausing" || printJob.state == "resuming");
|
|
||||||
onClicked: {
|
|
||||||
if (printJob.state == "paused") {
|
|
||||||
printJob.setState("print");
|
|
||||||
popup.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (printJob.state == "printing") {
|
|
||||||
printJob.setState("pause");
|
|
||||||
popup.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
text: {
|
|
||||||
if (!printJob) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
switch(printJob.state) {
|
|
||||||
case "paused":
|
|
||||||
return catalog.i18nc("@label", "Resume");
|
|
||||||
case "pausing":
|
|
||||||
return catalog.i18nc("@label", "Pausing...");
|
|
||||||
case "resuming":
|
|
||||||
return catalog.i18nc("@label", "Resuming...");
|
|
||||||
default:
|
|
||||||
catalog.i18nc("@label", "Pause");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
visible: {
|
|
||||||
if (!printJob) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var states = ["printing", "pausing", "paused", "resuming"];
|
|
||||||
return states.indexOf(printJob.state) !== -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PrintJobContextMenuItem {
|
|
||||||
enabled: visible && printJob.state !== "aborting";
|
|
||||||
onClicked: {
|
|
||||||
abortConfirmationDialog.visible = true;
|
|
||||||
popup.close();
|
|
||||||
}
|
|
||||||
text: printJob && printJob.state == "aborting" ? catalog.i18nc("@label", "Aborting...") : catalog.i18nc("@label", "Abort");
|
|
||||||
visible: {
|
|
||||||
if (!printJob) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var states = ["pre_print", "printing", "pausing", "paused", "resuming"];
|
|
||||||
return states.indexOf(printJob.state) !== -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
enter: Transition {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: 75;
|
|
||||||
property: "visible";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exit: Transition {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: 75;
|
|
||||||
property: "visible";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
height: contentItem.height + 2 * padding;
|
|
||||||
onClosed: visible = false;
|
|
||||||
onOpened: visible = true;
|
|
||||||
padding: UM.Theme.getSize("monitor_shadow_radius").width;
|
|
||||||
transformOrigin: Popup.Top;
|
|
||||||
visible: false;
|
|
||||||
width: 182 * screenScaleFactor;
|
|
||||||
x: (button.width - width) + 26 * screenScaleFactor;
|
|
||||||
y: button.height + 5 * screenScaleFactor; // Because shadow
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageDialog {
|
|
||||||
id: sendToTopConfirmationDialog;
|
|
||||||
Component.onCompleted: visible = false;
|
|
||||||
icon: StandardIcon.Warning;
|
|
||||||
onYes: OutputDevice.sendJobToTop(printJob.key);
|
|
||||||
standardButtons: StandardButton.Yes | StandardButton.No;
|
|
||||||
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "";
|
|
||||||
title: catalog.i18nc("@window:title", "Move print job to top");
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageDialog {
|
|
||||||
id: deleteConfirmationDialog;
|
|
||||||
Component.onCompleted: visible = false;
|
|
||||||
icon: StandardIcon.Warning;
|
|
||||||
onYes: OutputDevice.deleteJobFromQueue(printJob.key);
|
|
||||||
standardButtons: StandardButton.Yes | StandardButton.No;
|
|
||||||
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "";
|
|
||||||
title: catalog.i18nc("@window:title", "Delete print job");
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageDialog {
|
|
||||||
id: abortConfirmationDialog;
|
|
||||||
Component.onCompleted: visible = false;
|
|
||||||
icon: StandardIcon.Warning;
|
|
||||||
onYes: printJob.setState("abort");
|
|
||||||
standardButtons: StandardButton.Yes | StandardButton.No;
|
|
||||||
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : "";
|
|
||||||
title: catalog.i18nc("@window:title", "Abort print");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utils
|
|
||||||
function switchPopupState() {
|
|
||||||
popup.visible ? popup.close() : popup.open();
|
|
||||||
}
|
|
||||||
function isStarted(job) {
|
|
||||||
if (!job) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return ["pre_print", "printing", "pausing", "paused", "resuming", "aborting"].indexOf(job.state) !== -1;
|
|
||||||
}
|
|
||||||
function isAssigned(job) {
|
|
||||||
if (!job) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return job.assignedPrinter ? true : false;
|
|
||||||
}
|
|
||||||
function getMenuLength() {
|
|
||||||
var visible = 0;
|
|
||||||
for (var i = 0; i < popupOptions.children.length; i++) {
|
|
||||||
if (popupOptions.children[i].visible) {
|
|
||||||
visible++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return visible;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -9,10 +9,10 @@ import UM 1.3 as UM
|
||||||
Button {
|
Button {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
opacity: parent.down || parent.hovered ? 1 : 0;
|
opacity: parent.down || parent.hovered ? 1 : 0;
|
||||||
color: UM.Theme.getColor("monitor_context_menu_highlight");
|
color: UM.Theme.getColor("monitor_context_menu_hover")
|
||||||
}
|
}
|
||||||
contentItem: Label {
|
contentItem: Label {
|
||||||
color: enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("text_inactive");
|
color: enabled ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled");
|
||||||
text: parent.text
|
text: parent.text
|
||||||
horizontalAlignment: Text.AlignLeft;
|
horizontalAlignment: Text.AlignLeft;
|
||||||
verticalAlignment: Text.AlignVCenter;
|
verticalAlignment: Text.AlignVCenter;
|
||||||
|
|
|
@ -13,6 +13,7 @@ from UM.FileHandler.WriteFileJob import WriteFileJob # To call the file writer
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
from UM.Qt.Duration import Duration, DurationFormat
|
||||||
|
|
||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
from UM.Scene.SceneNode import SceneNode # For typing.
|
from UM.Scene.SceneNode import SceneNode # For typing.
|
||||||
|
@ -346,6 +347,10 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
|
||||||
def getDateCompleted(self, time_remaining: int) -> str:
|
def getDateCompleted(self, time_remaining: int) -> str:
|
||||||
return formatDateCompleted(time_remaining)
|
return formatDateCompleted(time_remaining)
|
||||||
|
|
||||||
|
@pyqtSlot(int, result = str)
|
||||||
|
def formatDuration(self, seconds: int) -> str:
|
||||||
|
return Duration(seconds).getDisplayString(DurationFormat.Format.Short)
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def sendJobToTop(self, print_job_uuid: str) -> None:
|
def sendJobToTop(self, print_job_uuid: str) -> None:
|
||||||
# This function is part of the output device (and not of the printjob output model) as this type of operation
|
# This function is part of the output device (and not of the printjob output model) as this type of operation
|
||||||
|
|
|
@ -55,6 +55,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||||
self._update_thread = Thread(target = self._update, daemon = True)
|
self._update_thread = Thread(target = self._update, daemon = True)
|
||||||
|
|
||||||
self._last_temperature_request = None # type: Optional[int]
|
self._last_temperature_request = None # type: Optional[int]
|
||||||
|
self._firmware_idle_count = 0
|
||||||
|
|
||||||
self._is_printing = False # A print is being sent.
|
self._is_printing = False # A print is being sent.
|
||||||
|
|
||||||
|
|
|
@ -218,7 +218,8 @@ Button
|
||||||
{
|
{
|
||||||
if(isValidMaterial)
|
if(isValidMaterial)
|
||||||
{
|
{
|
||||||
Cura.MachineManager.applyRemoteConfiguration(configuration);
|
toggleContent()
|
||||||
|
Cura.MachineManager.applyRemoteConfiguration(configuration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,6 +173,7 @@ Item
|
||||||
id: createQualityDialog
|
id: createQualityDialog
|
||||||
title: catalog.i18nc("@title:window", "Create Profile")
|
title: catalog.i18nc("@title:window", "Create Profile")
|
||||||
object: "<new name>"
|
object: "<new name>"
|
||||||
|
explanation: catalog.i18nc("@info", "Please provide a name for this profile.")
|
||||||
onAccepted:
|
onAccepted:
|
||||||
{
|
{
|
||||||
base.newQualityNameToSelect = newName; // We want to switch to the new profile once it's created
|
base.newQualityNameToSelect = newName; // We want to switch to the new profile once it's created
|
||||||
|
|
|
@ -215,24 +215,40 @@
|
||||||
"toolbox_header_button_text_inactive": [128, 128, 128, 255],
|
"toolbox_header_button_text_inactive": [128, 128, 128, 255],
|
||||||
"toolbox_header_button_text_hovered": [255, 255, 255, 255],
|
"toolbox_header_button_text_hovered": [255, 255, 255, 255],
|
||||||
|
|
||||||
"monitor_card_background_inactive": [43, 48, 52, 255],
|
"monitor_printer_family_tag": [86, 86, 106, 255],
|
||||||
"monitor_card_background": [43, 48, 52, 255],
|
"monitor_text_primary": [229, 229, 229, 255],
|
||||||
"monitor_context_menu_background": [80, 84, 87, 255],
|
"monitor_text_disabled": [102, 102, 102, 255],
|
||||||
"monitor_context_menu_dots": [0, 167, 233, 255],
|
"monitor_text_link": [103, 160, 252, 255],
|
||||||
"monitor_context_menu_highlight": [0, 167, 233, 255],
|
"monitor_icon_primary": [229, 229, 229, 255],
|
||||||
"monitor_image_overlay": [255, 255, 255, 255],
|
"monitor_icon_accent": [51, 53, 54, 255],
|
||||||
"monitor_lining_heavy": [255, 255, 255, 255],
|
|
||||||
"monitor_lining_light": [102, 102, 102, 255],
|
"monitor_secondary_button_hover": [80, 80, 80, 255],
|
||||||
"monitor_pill_background": [102, 102, 102, 255],
|
"monitor_secondary_button": [92, 92, 92, 255],
|
||||||
|
"monitor_secondary_button_text": [250, 250, 250, 255],
|
||||||
|
"monitor_secondary_button_shadow": [74, 74, 74, 255],
|
||||||
|
|
||||||
|
"monitor_card_border": [102, 102, 102, 255],
|
||||||
|
"monitor_card_background": [51, 53, 54, 255],
|
||||||
|
"monitor_card_hover": [84, 89, 95, 255],
|
||||||
|
|
||||||
|
"monitor_stage_background": [30, 36, 39, 255],
|
||||||
|
"monitor_stage_background_fade": [30, 36, 39, 102],
|
||||||
|
|
||||||
|
"monitor_progress_bar_fill": [50, 130, 255, 255],
|
||||||
|
"monitor_progress_bar_deactive": [102, 102, 102, 255],
|
||||||
|
"monitor_progress_bar_empty": [67, 67, 67, 255],
|
||||||
|
|
||||||
|
"monitor_tooltip": [25, 25, 25, 255],
|
||||||
|
"monitor_tooltip_text": [229, 229, 229, 255],
|
||||||
|
"monitor_context_menu": [67, 67, 67, 255],
|
||||||
|
"monitor_context_menu_hover": [30, 102, 215, 255],
|
||||||
|
|
||||||
|
"monitor_skeleton_loading": [102, 102, 102, 255],
|
||||||
"monitor_placeholder_image": [102, 102, 102, 255],
|
"monitor_placeholder_image": [102, 102, 102, 255],
|
||||||
"monitor_printer_icon": [255, 255, 255, 255],
|
"monitor_image_overlay": [0, 0, 0, 255],
|
||||||
"monitor_progress_background_text": [102, 102, 102, 255],
|
"monitor_shadow": [4, 10, 13, 255],
|
||||||
"monitor_progress_background": [80, 84, 87, 255],
|
|
||||||
"monitor_progress_fill_inactive": [216, 216, 216, 255],
|
"monitor_carousel_dot": [119, 119, 119, 255],
|
||||||
"monitor_progress_fill_text": [0, 0, 0, 255],
|
"monitor_carousel_dot_current": [216, 216, 216, 255]
|
||||||
"monitor_progress_fill": [216, 216, 216, 255],
|
|
||||||
"monotir_printer_icon_inactive": [154, 154, 154, 255],
|
|
||||||
"monitor_skeleton_fill": [31, 36, 39, 255],
|
|
||||||
"monitor_skeleton_fill_dark": [31, 36, 39, 255]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -400,27 +400,41 @@
|
||||||
"favorites_header_text_hover": [31, 36, 39, 255],
|
"favorites_header_text_hover": [31, 36, 39, 255],
|
||||||
"favorites_row_selected": [196, 239, 255, 255],
|
"favorites_row_selected": [196, 239, 255, 255],
|
||||||
|
|
||||||
"monitor_card_background_inactive": [240, 240, 240, 255],
|
"monitor_printer_family_tag": [228, 228, 242, 255],
|
||||||
|
"monitor_text_primary": [65, 64, 84, 255],
|
||||||
|
"monitor_text_disabled": [238, 238, 238, 255],
|
||||||
|
"monitor_text_link": [50, 130, 255, 255],
|
||||||
|
"monitor_icon_primary": [10, 8, 80, 255],
|
||||||
|
"monitor_icon_accent": [255, 255, 255, 255],
|
||||||
|
|
||||||
|
"monitor_secondary_button_hover": [228, 228, 228, 255],
|
||||||
|
"monitor_secondary_button": [240, 240, 240, 255],
|
||||||
|
"monitor_secondary_button_text": [30, 102, 215, 255],
|
||||||
|
"monitor_secondary_button_shadow": [216, 216, 216, 255],
|
||||||
|
|
||||||
|
"monitor_card_border": [192, 193, 194, 255],
|
||||||
"monitor_card_background": [255, 255, 255, 255],
|
"monitor_card_background": [255, 255, 255, 255],
|
||||||
"monitor_context_menu_background": [255, 255, 255, 255],
|
"monitor_card_hover": [232, 242, 252, 255],
|
||||||
"monitor_context_menu_dots": [154, 154, 154, 255],
|
|
||||||
"monitor_context_menu_highlight": [245, 245, 245, 255],
|
"monitor_stage_background": [246, 246, 246, 255],
|
||||||
"monitor_image_overlay": [0, 0, 0, 255],
|
"monitor_stage_background_fade": [246, 246, 246, 102],
|
||||||
"monitor_lining_heavy": [0, 0, 0, 255],
|
|
||||||
"monitor_lining_light": [230, 230, 230, 255],
|
"monitor_progress_bar_fill": [50, 130, 255, 255],
|
||||||
"monitor_pill_background": [245, 245, 245, 255],
|
"monitor_progress_bar_deactive": [192, 193, 194, 255],
|
||||||
|
"monitor_progress_bar_empty": [245, 245, 245, 255],
|
||||||
|
|
||||||
|
"monitor_tooltip": [25, 25, 25, 255],
|
||||||
|
"monitor_tooltip_text": [255, 255, 255, 255],
|
||||||
|
"monitor_context_menu": [255, 255, 255, 255],
|
||||||
|
"monitor_context_menu_hover": [245, 245, 245, 255],
|
||||||
|
|
||||||
|
"monitor_skeleton_loading": [238, 238, 238, 255],
|
||||||
"monitor_placeholder_image": [230, 230, 230, 255],
|
"monitor_placeholder_image": [230, 230, 230, 255],
|
||||||
"monitor_printer_icon_inactive": [154, 154, 154, 255],
|
"monitor_image_overlay": [0, 0, 0, 255],
|
||||||
"monitor_printer_icon": [50, 130, 255, 255],
|
"monitor_shadow": [220, 220, 220, 255],
|
||||||
"monitor_progress_background_text": [0,0,0,255],
|
|
||||||
"monitor_progress_background": [245, 245, 245, 255],
|
"monitor_carousel_dot": [216, 216, 216, 255],
|
||||||
"monitor_progress_fill_inactive": [154, 154, 154, 255],
|
"monitor_carousel_dot_current": [119, 119, 119, 255]
|
||||||
"monitor_progress_fill_text": [255,255,255,255],
|
|
||||||
"monitor_progress_fill": [50, 130, 255, 255],
|
|
||||||
"monitor_shadow": [0, 0, 0, 63],
|
|
||||||
"monitor_skeleton_fill": [245, 245, 245, 255],
|
|
||||||
"monitor_skeleton_fill_dark": [216, 216, 216, 255],
|
|
||||||
"monitor_text_inactive": [154, 154, 154, 255]
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"sizes": {
|
"sizes": {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue