mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-10 08:17:49 -06:00
Review feedback
Now with unified style as agreed upon by Simon & Ian. Rules: - ID before all other props. - All props before children. - All props after ID in alphabetical order. - Empty line between children. - Semi-colons. Note: I didn't touch the DiscoverUM3Action because that's it's whole own UI part.
This commit is contained in:
parent
2c5095befb
commit
5ca0c599e9
18 changed files with 721 additions and 821 deletions
|
@ -4,46 +4,37 @@
|
|||
import QtQuick 2.3
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.3
|
||||
import QtQuick.Controls 2.0 as Controls2
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import UM 1.3 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
Rectangle
|
||||
{
|
||||
property var iconSource: null
|
||||
Rectangle {
|
||||
property var iconSource: null;
|
||||
color: clickArea.containsMouse ? UM.Theme.getColor("primary_hover") : UM.Theme.getColor("primary");
|
||||
height: width;
|
||||
radius: 0.5 * width;
|
||||
width: 36 * screenScaleFactor;
|
||||
|
||||
width: 36 * screenScaleFactor
|
||||
height: width
|
||||
radius: 0.5 * width
|
||||
color: clickArea.containsMouse ? UM.Theme.getColor("primary_hover") : UM.Theme.getColor("primary")
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
id: icon
|
||||
width: parent.width / 2
|
||||
height: width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: UM.Theme.getColor("primary_text")
|
||||
source: iconSource
|
||||
UM.RecolorImage {
|
||||
id: icon;
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
color: UM.Theme.getColor("primary_text");
|
||||
height: width;
|
||||
source: iconSource;
|
||||
width: parent.width / 2;
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
id: clickArea
|
||||
anchors.fill:parent
|
||||
hoverEnabled: true
|
||||
onClicked:
|
||||
{
|
||||
if (OutputDevice.activeCamera !== null)
|
||||
{
|
||||
MouseArea {
|
||||
id: clickArea;
|
||||
anchors.fill: parent;
|
||||
hoverEnabled: true;
|
||||
onClicked: {
|
||||
if (OutputDevice.activeCamera !== null) {
|
||||
OutputDevice.setActiveCamera(null)
|
||||
}
|
||||
else
|
||||
{
|
||||
OutputDevice.setActiveCamera(modelData.camera)
|
||||
} else {
|
||||
OutputDevice.setActiveCamera(modelData.camera);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,130 +2,108 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.3
|
||||
import QtQuick.Dialogs 1.1
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.3
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import QtQuick.Controls 2.0 as Controls2
|
||||
|
||||
import UM 1.3 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
Component {
|
||||
Rectangle {
|
||||
id: base;
|
||||
property var lineColor: "#DCDCDC"; // TODO: Should be linked to theme.
|
||||
property var shadowRadius: 5 * screenScaleFactor;
|
||||
property var cornerRadius: 4 * screenScaleFactor; // TODO: Should be linked to theme.
|
||||
anchors.fill: parent;
|
||||
color: "white";
|
||||
visible: OutputDevice != null;
|
||||
|
||||
Component
|
||||
{
|
||||
Rectangle
|
||||
{
|
||||
id: base
|
||||
property var lineColor: "#DCDCDC" // TODO: Should be linked to theme.
|
||||
property var shadowRadius: 5 * screenScaleFactor
|
||||
property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme.
|
||||
visible: OutputDevice != null
|
||||
anchors.fill: parent
|
||||
color: "white"
|
||||
|
||||
UM.I18nCatalog
|
||||
{
|
||||
id: catalog
|
||||
name: "cura"
|
||||
UM.I18nCatalog {
|
||||
id: catalog;
|
||||
name: "cura";
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: printingLabel
|
||||
font: UM.Theme.getFont("large")
|
||||
anchors
|
||||
{
|
||||
margins: 2 * UM.Theme.getSize("default_margin").width
|
||||
leftMargin: 4 * UM.Theme.getSize("default_margin").width
|
||||
top: parent.top
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
Label {
|
||||
id: printingLabel;
|
||||
anchors {
|
||||
left: parent.left;
|
||||
leftMargin: 4 * UM.Theme.getSize("default_margin").width;
|
||||
margins: 2 * UM.Theme.getSize("default_margin").width;
|
||||
right: parent.right;
|
||||
top: parent.top;
|
||||
}
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("large");
|
||||
text: catalog.i18nc("@label", "Printing");
|
||||
}
|
||||
|
||||
text: catalog.i18nc("@label", "Printing")
|
||||
elide: Text.ElideRight
|
||||
Label {
|
||||
id: managePrintersLabel;
|
||||
anchors {
|
||||
bottom: printingLabel.bottom;
|
||||
right: printerScrollView.right;
|
||||
rightMargin: 4 * UM.Theme.getSize("default_margin").width;
|
||||
}
|
||||
color: UM.Theme.getColor("primary");
|
||||
font: UM.Theme.getFont("default");
|
||||
linkColor: UM.Theme.getColor("primary");
|
||||
text: catalog.i18nc("@label link to connect manager", "Manage printers");
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: managePrintersLabel
|
||||
anchors.rightMargin: 4 * UM.Theme.getSize("default_margin").width
|
||||
anchors.right: printerScrollView.right
|
||||
anchors.bottom: printingLabel.bottom
|
||||
text: catalog.i18nc("@label link to connect manager", "Manage printers")
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("primary")
|
||||
linkColor: UM.Theme.getColor("primary")
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: managePrintersLabel
|
||||
hoverEnabled: true
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel()
|
||||
onEntered: managePrintersLabel.font.underline = true
|
||||
onExited: managePrintersLabel.font.underline = false
|
||||
MouseArea {
|
||||
anchors.fill: managePrintersLabel;
|
||||
hoverEnabled: true;
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel();
|
||||
onEntered: managePrintersLabel.font.underline = true;
|
||||
onExited: managePrintersLabel.font.underline = false;
|
||||
}
|
||||
|
||||
// Skeleton loading
|
||||
Column
|
||||
{
|
||||
id: skeletonLoader
|
||||
Column {
|
||||
id: skeletonLoader;
|
||||
anchors {
|
||||
left: parent.left;
|
||||
leftMargin: UM.Theme.getSize("wide_margin").width;
|
||||
right: parent.right;
|
||||
rightMargin: UM.Theme.getSize("wide_margin").width;
|
||||
top: printingLabel.bottom;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
}
|
||||
spacing: UM.Theme.getSize("default_margin").height - 10;
|
||||
visible: printerList.count === 0;
|
||||
anchors
|
||||
{
|
||||
top: printingLabel.bottom
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
left: parent.left
|
||||
leftMargin: UM.Theme.getSize("wide_margin").width
|
||||
right: parent.right
|
||||
rightMargin: UM.Theme.getSize("wide_margin").width
|
||||
}
|
||||
spacing: UM.Theme.getSize("default_margin").height - 10
|
||||
|
||||
PrinterCard
|
||||
{
|
||||
printer: null
|
||||
PrinterCard {
|
||||
printer: null;
|
||||
}
|
||||
PrinterCard
|
||||
{
|
||||
printer: null
|
||||
PrinterCard {
|
||||
printer: null;
|
||||
}
|
||||
}
|
||||
|
||||
// Actual content
|
||||
ScrollView
|
||||
{
|
||||
id: printerScrollView
|
||||
anchors
|
||||
{
|
||||
top: printingLabel.bottom
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
ScrollView {
|
||||
id: printerScrollView;
|
||||
anchors {
|
||||
bottom: parent.bottom;
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
top: printingLabel.bottom;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
}
|
||||
style: UM.Theme.styles.scrollview;
|
||||
|
||||
style: UM.Theme.styles.scrollview
|
||||
|
||||
ListView
|
||||
{
|
||||
id: printerList
|
||||
property var currentIndex: -1
|
||||
anchors
|
||||
{
|
||||
fill: parent
|
||||
leftMargin: UM.Theme.getSize("wide_margin").width
|
||||
rightMargin: UM.Theme.getSize("wide_margin").width
|
||||
}
|
||||
spacing: UM.Theme.getSize("default_margin").height - 10
|
||||
model: OutputDevice.printers
|
||||
delegate: PrinterCard
|
||||
{
|
||||
printer: modelData
|
||||
ListView {
|
||||
id: printerList;
|
||||
property var currentIndex: -1;
|
||||
anchors {
|
||||
fill: parent;
|
||||
leftMargin: UM.Theme.getSize("wide_margin").width;
|
||||
rightMargin: UM.Theme.getSize("wide_margin").width;
|
||||
}
|
||||
delegate: PrinterCard {
|
||||
printer: modelData;
|
||||
}
|
||||
model: OutputDevice.printers;
|
||||
spacing: UM.Theme.getSize("default_margin").height - 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,141 +4,129 @@
|
|||
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
|
||||
|
||||
Component
|
||||
{
|
||||
Rectangle
|
||||
{
|
||||
id: monitorFrame
|
||||
width: maximumWidth
|
||||
height: maximumHeight
|
||||
color: UM.Theme.getColor("viewport_background")
|
||||
property var emphasisColor: UM.Theme.getColor("setting_control_border_highlight")
|
||||
property var lineColor: "#DCDCDC" // TODO: Should be linked to theme.
|
||||
property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme.
|
||||
Component {
|
||||
Rectangle {
|
||||
id: monitorFrame;
|
||||
property var emphasisColor: UM.Theme.getColor("setting_control_border_highlight");
|
||||
property var lineColor: "#DCDCDC"; // TODO: Should be linked to theme.
|
||||
property var cornerRadius: 4 * screenScaleFactor; // TODO: Should be linked to theme.
|
||||
color: UM.Theme.getColor("viewport_background");
|
||||
height: maximumHeight;
|
||||
onVisibleChanged: {
|
||||
if (monitorFrame != null && !monitorFrame.visible) {
|
||||
OutputDevice.setActiveCamera(null);
|
||||
}
|
||||
}
|
||||
width: maximumWidth;
|
||||
|
||||
UM.I18nCatalog
|
||||
{
|
||||
id: catalog
|
||||
name: "cura"
|
||||
UM.I18nCatalog {
|
||||
id: catalog;
|
||||
name: "cura";
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: manageQueueLabel
|
||||
anchors.rightMargin: 3 * UM.Theme.getSize("default_margin").width
|
||||
anchors.right: queuedPrintJobs.right
|
||||
anchors.bottom: queuedLabel.bottom
|
||||
text: catalog.i18nc("@label link to connect manager", "Manage queue")
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("primary")
|
||||
linkColor: UM.Theme.getColor("primary")
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: manageQueueLabel
|
||||
hoverEnabled: true
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel()
|
||||
onEntered: manageQueueLabel.font.underline = true
|
||||
onExited: manageQueueLabel.font.underline = false
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: queuedLabel
|
||||
anchors.left: queuedPrintJobs.left
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
|
||||
anchors.leftMargin: 3 * UM.Theme.getSize("default_margin").width + 5
|
||||
text: catalog.i18nc("@label", "Queued")
|
||||
font: UM.Theme.getFont("large")
|
||||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
id: skeletonLoader
|
||||
visible: printJobList.count === 0;
|
||||
width: Math.min(800 * screenScaleFactor, maximumWidth)
|
||||
anchors
|
||||
{
|
||||
top: queuedLabel.bottom
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
bottomMargin: UM.Theme.getSize("default_margin").height
|
||||
bottom: parent.bottom
|
||||
}
|
||||
PrintJobInfoBlock
|
||||
{
|
||||
printJob: null // Use as skeleton
|
||||
anchors
|
||||
{
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
rightMargin: UM.Theme.getSize("default_margin").width
|
||||
leftMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
}
|
||||
PrintJobInfoBlock
|
||||
{
|
||||
printJob: null // Use as skeleton
|
||||
anchors
|
||||
{
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
rightMargin: UM.Theme.getSize("default_margin").width
|
||||
leftMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ScrollView
|
||||
{
|
||||
id: queuedPrintJobs
|
||||
Label {
|
||||
id: manageQueueLabel;
|
||||
anchors {
|
||||
top: queuedLabel.bottom
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
bottomMargin: UM.Theme.getSize("default_margin").height
|
||||
bottom: parent.bottom
|
||||
bottom: queuedLabel.bottom;
|
||||
right: queuedPrintJobs.right;
|
||||
rightMargin: 3 * UM.Theme.getSize("default_margin").width;
|
||||
}
|
||||
color: UM.Theme.getColor("primary");
|
||||
font: UM.Theme.getFont("default");
|
||||
linkColor: UM.Theme.getColor("primary");
|
||||
text: catalog.i18nc("@label link to connect manager", "Manage queue");
|
||||
}
|
||||
style: UM.Theme.styles.scrollview
|
||||
width: Math.min(800 * screenScaleFactor, maximumWidth)
|
||||
|
||||
ListView
|
||||
{
|
||||
MouseArea {
|
||||
anchors.fill: manageQueueLabel;
|
||||
hoverEnabled: true;
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel();
|
||||
onEntered: manageQueueLabel.font.underline = true;
|
||||
onExited: manageQueueLabel.font.underline = false;
|
||||
}
|
||||
|
||||
Label {
|
||||
id: queuedLabel;
|
||||
anchors {
|
||||
left: queuedPrintJobs.left;
|
||||
leftMargin: 3 * UM.Theme.getSize("default_margin").width + 5;
|
||||
top: parent.top;
|
||||
topMargin: 2 * UM.Theme.getSize("default_margin").height;
|
||||
}
|
||||
color: UM.Theme.getColor("text");
|
||||
font: UM.Theme.getFont("large");
|
||||
text: catalog.i18nc("@label", "Queued");
|
||||
}
|
||||
|
||||
Column {
|
||||
id: skeletonLoader;
|
||||
anchors {
|
||||
bottom: parent.bottom;
|
||||
bottomMargin: UM.Theme.getSize("default_margin").height;
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
top: queuedLabel.bottom;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
}
|
||||
visible: printJobList.count === 0;
|
||||
width: Math.min(800 * screenScaleFactor, maximumWidth);
|
||||
|
||||
PrintJobInfoBlock {
|
||||
anchors {
|
||||
left: parent.left;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
right: parent.right;
|
||||
rightMargin: UM.Theme.getSize("default_margin").width;
|
||||
}
|
||||
printJob: null; // Use as skeleton
|
||||
}
|
||||
|
||||
PrintJobInfoBlock {
|
||||
anchors {
|
||||
left: parent.left;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
right: parent.right;
|
||||
rightMargin: UM.Theme.getSize("default_margin").width;
|
||||
}
|
||||
printJob: null; // Use as skeleton
|
||||
}
|
||||
}
|
||||
|
||||
ScrollView {
|
||||
id: queuedPrintJobs;
|
||||
anchors {
|
||||
top: queuedLabel.bottom;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
bottomMargin: UM.Theme.getSize("default_margin").height;
|
||||
bottom: parent.bottom;
|
||||
}
|
||||
style: UM.Theme.styles.scrollview;
|
||||
width: Math.min(800 * screenScaleFactor, maximumWidth);
|
||||
|
||||
ListView {
|
||||
id: printJobList;
|
||||
anchors.fill: parent
|
||||
spacing: UM.Theme.getSize("default_margin").height - 10 // 2x the shadow radius
|
||||
model: OutputDevice.queuedPrintJobs
|
||||
delegate: PrintJobInfoBlock
|
||||
{
|
||||
printJob: modelData
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
anchors.fill: parent;
|
||||
delegate: PrintJobInfoBlock; {
|
||||
anchors {
|
||||
left: parent.left;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
right: parent.right;
|
||||
rightMargin: UM.Theme.getSize("default_margin").width;
|
||||
}
|
||||
printJob: modelData;
|
||||
}
|
||||
model: OutputDevice.queuedPrintJobs;
|
||||
spacing: UM.Theme.getSize("default_margin").height - 10; // 2x the shadow radius
|
||||
}
|
||||
}
|
||||
|
||||
PrinterVideoStream
|
||||
{
|
||||
visible: OutputDevice.activeCamera != null
|
||||
anchors.fill: parent
|
||||
camera: OutputDevice.activeCamera
|
||||
}
|
||||
|
||||
onVisibleChanged:
|
||||
{
|
||||
if (monitorFrame != null && !monitorFrame.visible)
|
||||
{
|
||||
OutputDevice.setActiveCamera(null)
|
||||
}
|
||||
PrinterVideoStream {
|
||||
anchors.fill: parent;
|
||||
camera: OutputDevice.activeCamera;
|
||||
visible: OutputDevice.activeCamera != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ import QtQuick.Layouts 1.1
|
|||
import QtQuick.Dialogs 1.1
|
||||
import UM 1.3 as UM
|
||||
|
||||
Rectangle {
|
||||
Item {
|
||||
id: root;
|
||||
property var job: null;
|
||||
property var materialsAreKnown: {
|
||||
|
@ -24,7 +24,6 @@ Rectangle {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
color: "pink";
|
||||
width: parent.width;
|
||||
height: childrenRect.height;
|
||||
|
||||
|
@ -34,6 +33,11 @@ Rectangle {
|
|||
|
||||
// Config change toggle
|
||||
Rectangle {
|
||||
anchors {
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
top: parent.top;
|
||||
}
|
||||
color: {
|
||||
if(configurationChangeToggle.containsMouse) {
|
||||
return UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
|
@ -41,32 +45,29 @@ Rectangle {
|
|||
return "transparent";
|
||||
}
|
||||
}
|
||||
width: parent.width;
|
||||
height: UM.Theme.getSize("default_margin").height * 4; // TODO: Theme!
|
||||
anchors {
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
top: parent.top;
|
||||
}
|
||||
width: parent.width;
|
||||
|
||||
Rectangle {
|
||||
width: parent.width;
|
||||
height: UM.Theme.getSize("default_lining").height;
|
||||
color: "#e6e6e6"; // TODO: Theme!
|
||||
height: UM.Theme.getSize("default_lining").height;
|
||||
width: parent.width;
|
||||
}
|
||||
|
||||
UM.RecolorImage {
|
||||
width: 23; // TODO: Theme!
|
||||
height: 23; // TODO: Theme!
|
||||
anchors {
|
||||
right: configChangeToggleLabel.left;
|
||||
rightMargin: UM.Theme.getSize("default_margin").width;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
source: "../svg/warning-icon.svg";
|
||||
color: UM.Theme.getColor("text");
|
||||
height: 23 * screenScaleFactor; // TODO: Theme!
|
||||
source: "../svg/warning-icon.svg";
|
||||
sourceSize {
|
||||
width: width;
|
||||
height: height;
|
||||
}
|
||||
width: 23 * screenScaleFactor; // TODO: Theme!
|
||||
}
|
||||
|
||||
Label {
|
||||
|
@ -79,15 +80,13 @@ Rectangle {
|
|||
}
|
||||
|
||||
UM.RecolorImage {
|
||||
width: 15; // TODO: Theme!
|
||||
height: 15; // TODO: Theme!
|
||||
anchors {
|
||||
left: configChangeToggleLabel.right;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
color: UM.Theme.getColor("text");
|
||||
height: 15 * screenScaleFactor; // TODO: Theme!
|
||||
source: {
|
||||
if (configChangeDetails.visible) {
|
||||
return UM.Theme.getIcon("arrow_top");
|
||||
|
@ -95,7 +94,11 @@ Rectangle {
|
|||
return UM.Theme.getIcon("arrow_bottom");
|
||||
}
|
||||
}
|
||||
color: UM.Theme.getColor("text");
|
||||
sourceSize {
|
||||
width: width;
|
||||
height: height;
|
||||
}
|
||||
width: 15 * screenScaleFactor; // TODO: Theme!
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
@ -111,26 +114,25 @@ Rectangle {
|
|||
// Config change details
|
||||
Rectangle {
|
||||
id: configChangeDetails
|
||||
color: "transparent";
|
||||
width: parent.width;
|
||||
visible: false;
|
||||
height: visible ? UM.Theme.getSize("monitor_tab_config_override_box").height : 0;
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
color: "transparent";
|
||||
height: visible ? UM.Theme.getSize("monitor_tab_config_override_box").height : 0;
|
||||
visible: false;
|
||||
width: parent.width;
|
||||
|
||||
Rectangle {
|
||||
color: "transparent";
|
||||
clip: true;
|
||||
anchors {
|
||||
fill: parent;
|
||||
topMargin: UM.Theme.getSize("wide_margin").height;
|
||||
bottomMargin: UM.Theme.getSize("wide_margin").height;
|
||||
fill: parent;
|
||||
leftMargin: UM.Theme.getSize("wide_margin").height * 4;
|
||||
rightMargin: UM.Theme.getSize("wide_margin").height * 4;
|
||||
topMargin: UM.Theme.getSize("wide_margin").height;
|
||||
}
|
||||
color: "transparent";
|
||||
clip: true;
|
||||
|
||||
Label {
|
||||
anchors.fill: parent;
|
||||
wrapMode: Text.WordWrap;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("large_nonbold");
|
||||
text: {
|
||||
|
@ -167,6 +169,7 @@ Rectangle {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
wrapMode: Text.WordWrap;
|
||||
}
|
||||
|
||||
Button {
|
||||
|
@ -174,6 +177,10 @@ Rectangle {
|
|||
bottom: parent.bottom;
|
||||
left: parent.left;
|
||||
}
|
||||
onClicked: {
|
||||
overrideConfirmationDialog.visible = true;
|
||||
}
|
||||
text: catalog.i18nc("@label", "Override");
|
||||
visible: {
|
||||
var length = root.job.configurationChanges.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
|
@ -184,10 +191,6 @@ Rectangle {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
text: catalog.i18nc("@label", "Override");
|
||||
onClicked: {
|
||||
overrideConfirmationDialog.visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -195,16 +198,16 @@ Rectangle {
|
|||
|
||||
MessageDialog {
|
||||
id: overrideConfirmationDialog;
|
||||
title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
|
||||
Component.onCompleted: visible = false;
|
||||
icon: StandardIcon.Warning;
|
||||
onYes: OutputDevice.forceSendJob(root.job.key);
|
||||
standardButtons: StandardButton.Yes | StandardButton.No;
|
||||
text: {
|
||||
var printJobName = formatPrintJobName(root.job.name);
|
||||
var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
|
||||
return confirmText;
|
||||
}
|
||||
standardButtons: StandardButton.Yes | StandardButton.No;
|
||||
Component.onCompleted: visible = false;
|
||||
onYes: OutputDevice.forceSendJob(root.job.key);
|
||||
title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
|
||||
}
|
||||
|
||||
// Utils
|
||||
|
|
|
@ -2,56 +2,45 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
|
||||
|
||||
import UM 1.3 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
Component
|
||||
{
|
||||
Item
|
||||
{
|
||||
width: maximumWidth
|
||||
height: maximumHeight
|
||||
Image
|
||||
{
|
||||
id: cameraImage
|
||||
width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth)
|
||||
height: Math.floor((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width)
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
z: 1
|
||||
Component.onCompleted:
|
||||
{
|
||||
if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null)
|
||||
{
|
||||
OutputDevice.activePrinter.camera.start()
|
||||
Component {
|
||||
Item {
|
||||
height: maximumHeight;
|
||||
width: maximumWidth;
|
||||
|
||||
Image {
|
||||
id: cameraImage;
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
Component.onCompleted: {
|
||||
if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) {
|
||||
OutputDevice.activePrinter.camera.start();
|
||||
}
|
||||
}
|
||||
onVisibleChanged:
|
||||
{
|
||||
if(visible)
|
||||
{
|
||||
if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null)
|
||||
{
|
||||
OutputDevice.activePrinter.camera.start()
|
||||
height: Math.floor((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width);
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) {
|
||||
OutputDevice.activePrinter.camera.start();
|
||||
}
|
||||
} else
|
||||
{
|
||||
if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null)
|
||||
{
|
||||
OutputDevice.activePrinter.camera.stop()
|
||||
} else {
|
||||
if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) {
|
||||
OutputDevice.activePrinter.camera.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
source:
|
||||
{
|
||||
if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage)
|
||||
{
|
||||
source: {
|
||||
if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage) {
|
||||
return OutputDevice.activePrinter.camera.latestImage;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth);
|
||||
z: 1;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,34 +7,29 @@ import QtQuick.Controls.Styles 1.4
|
|||
import UM 1.2 as UM
|
||||
|
||||
Item {
|
||||
id: extruderInfo
|
||||
|
||||
id: extruderInfo;
|
||||
property var printCoreConfiguration: null;
|
||||
|
||||
width: Math.round(parent.width / 2);
|
||||
height: childrenRect.height;
|
||||
width: Math.round(parent.width / 2);
|
||||
|
||||
// Extruder circle
|
||||
Item {
|
||||
id: extruderCircle
|
||||
|
||||
width: UM.Theme.getSize("monitor_tab_extruder_circle").width;
|
||||
height: UM.Theme.getSize("monitor_tab_extruder_circle").height;
|
||||
id: extruderCircle;
|
||||
anchors.verticalCenter: parent.verticalCenter;
|
||||
height: UM.Theme.getSize("monitor_tab_extruder_circle").height;
|
||||
width: UM.Theme.getSize("monitor_tab_extruder_circle").width;
|
||||
|
||||
// Loading skeleton
|
||||
Rectangle {
|
||||
visible: !printCoreConfiguration;
|
||||
anchors.fill: parent;
|
||||
radius: Math.round(width / 2);
|
||||
color: UM.Theme.getColor("viewport_background");
|
||||
radius: Math.round(width / 2);
|
||||
visible: !printCoreConfiguration;
|
||||
}
|
||||
|
||||
// Actual content
|
||||
Rectangle {
|
||||
visible: printCoreConfiguration;
|
||||
anchors.fill: parent;
|
||||
radius: Math.round(width / 2);
|
||||
border.width: UM.Theme.getSize("monitor_tab_thick_lining").width;
|
||||
border.color: UM.Theme.getColor("monitor_tab_lining_active");
|
||||
opacity: {
|
||||
|
@ -43,6 +38,8 @@ Item {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
radius: Math.round(width / 2);
|
||||
visible: printCoreConfiguration;
|
||||
|
||||
Label {
|
||||
anchors.centerIn: parent;
|
||||
|
@ -55,68 +52,66 @@ Item {
|
|||
// Print core and material labels
|
||||
Item {
|
||||
id: materialLabel
|
||||
|
||||
anchors {
|
||||
left: extruderCircle.right;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
top: parent.top;
|
||||
right: parent.right;
|
||||
top: parent.top;
|
||||
}
|
||||
height: UM.Theme.getSize("monitor_tab_text_line").height;
|
||||
|
||||
// Loading skeleton
|
||||
Rectangle {
|
||||
visible: !extruderInfo.printCoreConfiguration;
|
||||
anchors.fill: parent;
|
||||
color: UM.Theme.getColor("viewport_background");
|
||||
visible: !extruderInfo.printCoreConfiguration;
|
||||
}
|
||||
|
||||
// Actual content
|
||||
Label {
|
||||
visible: extruderInfo.printCoreConfiguration;
|
||||
anchors.fill: parent;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("default");
|
||||
text: {
|
||||
if (printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) {
|
||||
return printCoreConfiguration.activeMaterial.name;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
font: UM.Theme.getFont("default");
|
||||
elide: Text.ElideRight;
|
||||
visible: extruderInfo.printCoreConfiguration;
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: printCoreLabel;
|
||||
|
||||
anchors {
|
||||
right: parent.right;
|
||||
bottom: parent.bottom;
|
||||
left: extruderCircle.right;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
bottom: parent.bottom;
|
||||
right: parent.right;
|
||||
}
|
||||
height: UM.Theme.getSize("monitor_tab_text_line").height;
|
||||
|
||||
// Loading skeleton
|
||||
Rectangle {
|
||||
color: UM.Theme.getColor("viewport_background");
|
||||
height: parent.height;
|
||||
visible: !extruderInfo.printCoreConfiguration;
|
||||
width: parent.width / 3;
|
||||
height: parent.height;
|
||||
color: UM.Theme.getColor("viewport_background");
|
||||
}
|
||||
|
||||
// Actual content
|
||||
Label {
|
||||
visible: extruderInfo.printCoreConfiguration;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("default");
|
||||
opacity: 0.6;
|
||||
text: {
|
||||
if (printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) {
|
||||
return printCoreConfiguration.hotendID;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
elide: Text.ElideRight;
|
||||
opacity: 0.6;
|
||||
font: UM.Theme.getFont("default");
|
||||
visible: extruderInfo.printCoreConfiguration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,17 +2,13 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Dialogs 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Dialogs 1.1
|
||||
import UM 1.3 as UM
|
||||
|
||||
Item {
|
||||
id: root;
|
||||
|
||||
property var printJob: null;
|
||||
property var running: isRunning(printJob);
|
||||
|
||||
|
@ -55,16 +51,20 @@ Item {
|
|||
}
|
||||
|
||||
Item {
|
||||
id: pointedRectangle
|
||||
width: parent.width - 10 * screenScaleFactor; // Because of the shadow
|
||||
id: pointedRectangle;
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
height: parent.height - 10 * screenScaleFactor; // Because of the shadow
|
||||
anchors.horizontalCenter: parent.horizontalCenter;
|
||||
anchors.verticalCenter: parent.verticalCenter;
|
||||
width: parent.width - 10 * screenScaleFactor; // Because of the shadow
|
||||
|
||||
Rectangle {
|
||||
id: point
|
||||
anchors.right: bloop.right;
|
||||
anchors.rightMargin: 24;
|
||||
id: point;
|
||||
anchors {
|
||||
right: bloop.right;
|
||||
rightMargin: 24;
|
||||
}
|
||||
color: UM.Theme.getColor("setting_control");
|
||||
height: 14 * screenScaleFactor;
|
||||
transform: Rotation {
|
||||
|
@ -75,7 +75,7 @@ Item {
|
|||
}
|
||||
|
||||
Rectangle {
|
||||
id: bloop
|
||||
id: bloop;
|
||||
anchors {
|
||||
bottom: parent.bottom;
|
||||
bottomMargin: 8 * screenScaleFactor; // Because of the shadow
|
||||
|
|
|
@ -11,13 +11,11 @@ import QtQuick.Dialogs 1.1
|
|||
import UM 1.3 as UM
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property var shadowRadius: 5;
|
||||
property var shadowOffset: 2;
|
||||
id: root;
|
||||
property var shadowRadius: 5 * screenScaleFactor;
|
||||
property var shadowOffset: 2 * screenScaleFactor;
|
||||
property var debug: false;
|
||||
property var printJob: null;
|
||||
|
||||
width: parent.width; // Bubbles downward
|
||||
height: childrenRect.height + shadowRadius * 2; // Bubbles upward
|
||||
|
||||
|
@ -28,87 +26,84 @@ Item {
|
|||
|
||||
// The actual card (white block)
|
||||
Rectangle {
|
||||
color: "white"; // TODO: Theme!
|
||||
height: childrenRect.height;
|
||||
width: parent.width - shadowRadius * 2;
|
||||
|
||||
// 5px margin, but shifted 2px vertically because of the shadow
|
||||
anchors {
|
||||
topMargin: root.shadowRadius - root.shadowOffset;
|
||||
bottomMargin: root.shadowRadius + root.shadowOffset;
|
||||
leftMargin: root.shadowRadius;
|
||||
rightMargin: root.shadowRadius;
|
||||
topMargin: root.shadowRadius - root.shadowOffset;
|
||||
}
|
||||
color: "white"; // TODO: Theme!
|
||||
height: childrenRect.height;
|
||||
layer.enabled: true
|
||||
layer.effect: DropShadow {
|
||||
radius: root.shadowRadius
|
||||
verticalOffset: 2 * screenScaleFactor
|
||||
color: "#3F000000" // 25% shadow
|
||||
}
|
||||
width: parent.width - shadowRadius * 2;
|
||||
|
||||
Column {
|
||||
width: parent.width;
|
||||
height: childrenRect.height;
|
||||
width: parent.width;
|
||||
|
||||
// Main content
|
||||
Item {
|
||||
id: mainContent;
|
||||
height: 200 * screenScaleFactor; // TODO: Theme!
|
||||
width: parent.width;
|
||||
height: 200; // TODO: Theme!
|
||||
|
||||
// Left content
|
||||
Item {
|
||||
anchors {
|
||||
bottom: parent.bottom;
|
||||
left: parent.left;
|
||||
margins: UM.Theme.getSize("wide_margin").width;
|
||||
right: parent.horizontalCenter;
|
||||
top: parent.top;
|
||||
bottom: parent.bottom;
|
||||
margins: UM.Theme.getSize("wide_margin").width
|
||||
}
|
||||
|
||||
Item {
|
||||
id: printJobName;
|
||||
|
||||
width: parent.width;
|
||||
height: UM.Theme.getSize("monitor_tab_text_line").height;
|
||||
|
||||
Rectangle {
|
||||
visible: !printJob;
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
height: parent.height;
|
||||
visible: !printJob;
|
||||
width: parent.width / 3;
|
||||
}
|
||||
Label {
|
||||
visible: printJob;
|
||||
text: printJob ? printJob.name : ""; // Supress QML warnings
|
||||
font: UM.Theme.getFont("default_bold");
|
||||
elide: Text.ElideRight;
|
||||
anchors.fill: parent;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("default_bold");
|
||||
text: printJob ? printJob.name : ""; // Supress QML warnings
|
||||
visible: printJob;
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: printJobOwnerName;
|
||||
|
||||
width: parent.width;
|
||||
height: UM.Theme.getSize("monitor_tab_text_line").height;
|
||||
anchors {
|
||||
top: printJobName.bottom;
|
||||
topMargin: Math.floor(UM.Theme.getSize("default_margin").height / 2);
|
||||
}
|
||||
height: UM.Theme.getSize("monitor_tab_text_line").height;
|
||||
width: parent.width;
|
||||
|
||||
Rectangle {
|
||||
visible: !printJob;
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
height: parent.height;
|
||||
visible: !printJob;
|
||||
width: parent.width / 2;
|
||||
}
|
||||
Label {
|
||||
visible: printJob;
|
||||
text: printJob ? printJob.owner : ""; // Supress QML warnings
|
||||
font: UM.Theme.getFont("default");
|
||||
elide: Text.ElideRight;
|
||||
anchors.fill: parent;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("default");
|
||||
text: printJob ? printJob.owner : ""; // Supress QML warnings
|
||||
visible: printJob;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,90 +111,96 @@ Item {
|
|||
id: printJobPreview;
|
||||
property var useUltibot: false;
|
||||
anchors {
|
||||
top: printJobOwnerName.bottom;
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
bottom: parent.bottom;
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
top: printJobOwnerName.bottom;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
}
|
||||
width: height;
|
||||
|
||||
// Skeleton
|
||||
Rectangle {
|
||||
visible: !printJob;
|
||||
anchors.fill: parent;
|
||||
radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
|
||||
visible: !printJob;
|
||||
}
|
||||
|
||||
// Actual content
|
||||
Image {
|
||||
id: previewImage;
|
||||
visible: printJob;
|
||||
source: printJob ? printJob.previewImageUrl : "";
|
||||
opacity: printJob && printJob.state == "error" ? 0.5 : 1.0;
|
||||
anchors.fill: parent;
|
||||
opacity: printJob && printJob.state == "error" ? 0.5 : 1.0;
|
||||
source: printJob ? printJob.previewImageUrl : "";
|
||||
visible: printJob;
|
||||
}
|
||||
|
||||
UM.RecolorImage {
|
||||
id: ultiBotImage;
|
||||
|
||||
anchors.centerIn: printJobPreview;
|
||||
color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
|
||||
height: printJobPreview.height;
|
||||
source: "../svg/ultibot.svg";
|
||||
sourceSize {
|
||||
height: height;
|
||||
width: width;
|
||||
}
|
||||
/* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or
|
||||
not in order to determine if we show the placeholder (ultibot) image instead. */
|
||||
visible: printJob && previewImage.status == Image.Error;
|
||||
width: printJobPreview.width;
|
||||
height: printJobPreview.height;
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
|
||||
}
|
||||
|
||||
UM.RecolorImage {
|
||||
id: statusImage;
|
||||
anchors.centerIn: printJobPreview;
|
||||
color: "black";
|
||||
height: 0.5 * printJobPreview.height;
|
||||
source: printJob && printJob.state == "error" ? "../svg/aborted-icon.svg" : "";
|
||||
sourceSize {
|
||||
height: height;
|
||||
width: width;
|
||||
}
|
||||
visible: source != "";
|
||||
width: 0.5 * printJobPreview.width;
|
||||
height: 0.5 * printJobPreview.height;
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
color: "black";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Divider
|
||||
Rectangle {
|
||||
height: parent.height - 2 * UM.Theme.getSize("default_margin").height;
|
||||
width: UM.Theme.getSize("default_lining").width;
|
||||
color: !printJob ? UM.Theme.getColor("viewport_background") : "#e6e6e6"; // TODO: Theme!
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
color: !printJob ? UM.Theme.getColor("viewport_background") : "#e6e6e6"; // TODO: Theme!
|
||||
height: parent.height - 2 * UM.Theme.getSize("default_margin").height;
|
||||
width: UM.Theme.getSize("default_lining").width;
|
||||
}
|
||||
|
||||
// Right content
|
||||
Item {
|
||||
anchors {
|
||||
bottom: parent.bottom;
|
||||
left: parent.horizontalCenter;
|
||||
margins: UM.Theme.getSize("wide_margin").width;
|
||||
right: parent.right;
|
||||
top: parent.top;
|
||||
bottom: parent.bottom;
|
||||
margins: UM.Theme.getSize("wide_margin").width;
|
||||
}
|
||||
|
||||
Item {
|
||||
id: targetPrinterLabel;
|
||||
width: parent.width;
|
||||
height: UM.Theme.getSize("monitor_tab_text_line").height;
|
||||
width: parent.width;
|
||||
|
||||
Rectangle {
|
||||
visible: !printJob;
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
anchors.fill: parent;
|
||||
}
|
||||
|
||||
Label {
|
||||
visible: printJob;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("default_bold");
|
||||
text: {
|
||||
|
@ -215,13 +216,14 @@ Item {
|
|||
}
|
||||
return "";
|
||||
}
|
||||
visible: printJob;
|
||||
}
|
||||
}
|
||||
|
||||
PrinterInfoBlock {
|
||||
anchors.bottom: parent.bottom;
|
||||
printer: root.printJob.assignedPrinter;
|
||||
printJob: root.printJob;
|
||||
anchors.bottom: parent.bottom;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -240,9 +242,9 @@ Item {
|
|||
|
||||
Item {
|
||||
id: configChangesBox;
|
||||
width: parent.width;
|
||||
height: childrenRect.height;
|
||||
visible: printJob && printJob.configurationChanges.length !== 0;
|
||||
width: parent.width;
|
||||
|
||||
// Config change toggle
|
||||
Rectangle {
|
||||
|
@ -263,23 +265,25 @@ Item {
|
|||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width;
|
||||
height: UM.Theme.getSize("default_lining").height;
|
||||
color: "#e6e6e6"; // TODO: Theme!
|
||||
height: UM.Theme.getSize("default_lining").height;
|
||||
width: parent.width;
|
||||
}
|
||||
|
||||
UM.RecolorImage {
|
||||
width: 23; // TODO: Theme!
|
||||
height: 23; // TODO: Theme!
|
||||
anchors {
|
||||
right: configChangeToggleLabel.left;
|
||||
rightMargin: UM.Theme.getSize("default_margin").width;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
source: "../svg/warning-icon.svg";
|
||||
color: UM.Theme.getColor("text");
|
||||
height: 23 * screenScaleFactor; // TODO: Theme!
|
||||
source: "../svg/warning-icon.svg";
|
||||
sourceSize {
|
||||
height: height;
|
||||
width: width;
|
||||
}
|
||||
width: 23 * screenScaleFactor; // TODO: Theme!
|
||||
}
|
||||
|
||||
Label {
|
||||
|
@ -292,15 +296,13 @@ Item {
|
|||
}
|
||||
|
||||
UM.RecolorImage {
|
||||
width: 15; // TODO: Theme!
|
||||
height: 15; // TODO: Theme!
|
||||
anchors {
|
||||
left: configChangeToggleLabel.right;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
color: UM.Theme.getColor("text");
|
||||
height: 15 * screenScaleFactor; // TODO: Theme!
|
||||
source: {
|
||||
if (configChangeDetails.visible) {
|
||||
return UM.Theme.getIcon("arrow_top");
|
||||
|
@ -308,7 +310,11 @@ Item {
|
|||
return UM.Theme.getIcon("arrow_bottom");
|
||||
}
|
||||
}
|
||||
color: UM.Theme.getColor("text");
|
||||
sourceSize {
|
||||
width: width;
|
||||
height: height;
|
||||
}
|
||||
width: 15 * screenScaleFactor; // TODO: Theme!
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
@ -324,26 +330,25 @@ Item {
|
|||
// Config change details
|
||||
Item {
|
||||
id: configChangeDetails;
|
||||
width: parent.width;
|
||||
visible: false;
|
||||
anchors.top: configChangeToggle.bottom;
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
// In case of really massive multi-line configuration changes
|
||||
height: visible ? Math.max(UM.Theme.getSize("monitor_tab_config_override_box").height, childrenRect.height) : 0;
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
anchors.top: configChangeToggle.bottom;
|
||||
visible: false;
|
||||
width: parent.width;
|
||||
|
||||
Item {
|
||||
clip: true;
|
||||
anchors {
|
||||
fill: parent;
|
||||
topMargin: UM.Theme.getSize("wide_margin").height;
|
||||
bottomMargin: UM.Theme.getSize("wide_margin").height;
|
||||
fill: parent;
|
||||
leftMargin: UM.Theme.getSize("wide_margin").height * 4;
|
||||
rightMargin: UM.Theme.getSize("wide_margin").height * 4;
|
||||
topMargin: UM.Theme.getSize("wide_margin").height;
|
||||
}
|
||||
clip: true;
|
||||
|
||||
Label {
|
||||
anchors.fill: parent;
|
||||
wrapMode: Text.WordWrap;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("large_nonbold");
|
||||
text: {
|
||||
|
@ -380,6 +385,7 @@ Item {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
wrapMode: Text.WordWrap;
|
||||
}
|
||||
|
||||
Button {
|
||||
|
@ -387,6 +393,10 @@ Item {
|
|||
bottom: parent.bottom;
|
||||
left: parent.left;
|
||||
}
|
||||
onClicked: {
|
||||
overrideConfirmationDialog.visible = true;
|
||||
}
|
||||
text: catalog.i18nc("@label", "Override");
|
||||
visible: {
|
||||
var length = printJob.configurationChanges.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
|
@ -397,26 +407,22 @@ Item {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
text: catalog.i18nc("@label", "Override");
|
||||
onClicked: {
|
||||
overrideConfirmationDialog.visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MessageDialog {
|
||||
id: overrideConfirmationDialog;
|
||||
title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
|
||||
Component.onCompleted: visible = false;
|
||||
icon: StandardIcon.Warning;
|
||||
onYes: OutputDevice.forceSendJob(printJob.key);
|
||||
standardButtons: StandardButton.Yes | StandardButton.No;
|
||||
text: {
|
||||
var printJobName = formatPrintJobName(printJob.name);
|
||||
var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
|
||||
return confirmText;
|
||||
}
|
||||
standardButtons: StandardButton.Yes | StandardButton.No;
|
||||
Component.onCompleted: visible = false;
|
||||
onYes: OutputDevice.forceSendJob(printJob.key);
|
||||
title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,15 +14,15 @@ import UM 1.3 as UM
|
|||
Item {
|
||||
property var job: null;
|
||||
property var useUltibot: false;
|
||||
height: 100;
|
||||
height: 100 * screenScaleFactor;
|
||||
width: height;
|
||||
|
||||
// Skeleton
|
||||
Rectangle {
|
||||
visible: !job;
|
||||
anchors.fill: parent;
|
||||
radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
|
||||
visible: !job;
|
||||
}
|
||||
|
||||
// Actual content
|
||||
|
@ -46,26 +46,30 @@ Item {
|
|||
UM.RecolorImage {
|
||||
id: ultibotImage;
|
||||
anchors.centerIn: parent;
|
||||
color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
|
||||
height: parent.height;
|
||||
source: "../svg/ultibot.svg";
|
||||
sourceSize {
|
||||
height: height;
|
||||
width: width;
|
||||
}
|
||||
/* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or
|
||||
not in order to determine if we show the placeholder (ultibot) image instead. */
|
||||
visible: job && previewImage.status == Image.Error;
|
||||
width: parent.width;
|
||||
height: parent.height;
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
|
||||
}
|
||||
|
||||
UM.RecolorImage {
|
||||
id: statusImage;
|
||||
anchors.centerIn: parent;
|
||||
color: "black"; // TODO: Theme!
|
||||
height: 0.5 * parent.height;
|
||||
source: job && job.state == "error" ? "../svg/aborted-icon.svg" : "";
|
||||
sourceSize {
|
||||
height: height;
|
||||
width: width;
|
||||
}
|
||||
visible: source != "";
|
||||
width: 0.5 * parent.width;
|
||||
height: 0.5 * parent.height;
|
||||
sourceSize.width: width;
|
||||
sourceSize.height: height;
|
||||
color: "black";
|
||||
}
|
||||
}
|
|
@ -17,17 +17,18 @@ Column {
|
|||
width: parent.width;
|
||||
|
||||
Rectangle {
|
||||
visible: !job;
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Use explicit theme color
|
||||
height: parent.height;
|
||||
visible: !job;
|
||||
width: parent.width / 3;
|
||||
}
|
||||
|
||||
Label {
|
||||
visible: job;
|
||||
text: job ? job.name : "";
|
||||
font: UM.Theme.getFont("default_bold");
|
||||
elide: Text.ElideRight;
|
||||
anchors.fill: parent;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("default_bold");
|
||||
text: job ? job.name : "";
|
||||
visible: job;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,17 +38,18 @@ Column {
|
|||
width: parent.width;
|
||||
|
||||
Rectangle {
|
||||
visible: !job;
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Use explicit theme color
|
||||
height: parent.height;
|
||||
visible: !job;
|
||||
width: parent.width / 2;
|
||||
}
|
||||
|
||||
Label {
|
||||
visible: job;
|
||||
text: job ? job.owner : "";
|
||||
font: UM.Theme.getFont("default");
|
||||
elide: Text.ElideRight;
|
||||
anchors.fill: parent;
|
||||
elide: Text.ElideRight;
|
||||
font: UM.Theme.getFont("default");
|
||||
text: job ? job.owner : "";
|
||||
visible: job;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,112 +4,101 @@
|
|||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.2
|
||||
|
||||
import UM 1.1 as UM
|
||||
|
||||
UM.Dialog
|
||||
{
|
||||
UM.Dialog {
|
||||
id: base;
|
||||
|
||||
minimumWidth: 500 * screenScaleFactor
|
||||
minimumHeight: 140 * screenScaleFactor
|
||||
maximumWidth: minimumWidth
|
||||
maximumHeight: minimumHeight
|
||||
width: minimumWidth
|
||||
height: minimumHeight
|
||||
|
||||
visible: true
|
||||
modality: Qt.ApplicationModal
|
||||
onVisibleChanged:
|
||||
{
|
||||
if(visible)
|
||||
{
|
||||
resetPrintersModel()
|
||||
property var printersModel: {
|
||||
return ListModel{};
|
||||
}
|
||||
else
|
||||
{
|
||||
OutputDevice.cancelPrintSelection()
|
||||
}
|
||||
}
|
||||
title: catalog.i18nc("@title:window", "Print over network")
|
||||
|
||||
property var printersModel: ListModel{}
|
||||
function resetPrintersModel() {
|
||||
printersModel.clear()
|
||||
printersModel.append({ name: "Automatic", key: ""})
|
||||
|
||||
for (var index in OutputDevice.printers)
|
||||
{
|
||||
printersModel.append({name: OutputDevice.printers[index].name, key: OutputDevice.printers[index].key})
|
||||
}
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
id: printerSelection
|
||||
anchors.fill: parent
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||
height: 50 * screenScaleFactor
|
||||
Label
|
||||
{
|
||||
id: manualPrinterSelectionLabel
|
||||
anchors
|
||||
{
|
||||
left: parent.left
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
right: parent.right
|
||||
}
|
||||
text: catalog.i18nc("@label", "Printer selection")
|
||||
wrapMode: Text.Wrap
|
||||
height: 20 * screenScaleFactor
|
||||
}
|
||||
|
||||
ComboBox
|
||||
{
|
||||
id: printerSelectionCombobox
|
||||
model: base.printersModel
|
||||
textRole: "name"
|
||||
|
||||
width: parent.width
|
||||
height: 40 * screenScaleFactor
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
}
|
||||
|
||||
SystemPalette
|
||||
{
|
||||
id: palette
|
||||
}
|
||||
|
||||
UM.I18nCatalog { id: catalog; name: "cura"; }
|
||||
}
|
||||
|
||||
height: minimumHeight;
|
||||
leftButtons: [
|
||||
Button
|
||||
{
|
||||
text: catalog.i18nc("@action:button","Cancel")
|
||||
enabled: true
|
||||
Button {
|
||||
enabled: true;
|
||||
onClicked: {
|
||||
base.visible = false;
|
||||
printerSelectionCombobox.currentIndex = 0
|
||||
OutputDevice.cancelPrintSelection()
|
||||
printerSelectionCombobox.currentIndex = 0;
|
||||
OutputDevice.cancelPrintSelection();
|
||||
}
|
||||
text: catalog.i18nc("@action:button","Cancel");
|
||||
}
|
||||
]
|
||||
|
||||
maximumHeight: minimumHeight;
|
||||
maximumWidth: minimumWidth;
|
||||
minimumHeight: 140 * screenScaleFactor;
|
||||
minimumWidth: 500 * screenScaleFactor;
|
||||
modality: Qt.ApplicationModal;
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
resetPrintersModel();
|
||||
} else {
|
||||
OutputDevice.cancelPrintSelection();
|
||||
}
|
||||
}
|
||||
rightButtons: [
|
||||
Button
|
||||
{
|
||||
text: catalog.i18nc("@action:button","Print")
|
||||
enabled: true
|
||||
Button {
|
||||
enabled: true;
|
||||
onClicked: {
|
||||
base.visible = false;
|
||||
OutputDevice.selectPrinter(printerSelectionCombobox.model.get(printerSelectionCombobox.currentIndex).key)
|
||||
OutputDevice.selectPrinter(printerSelectionCombobox.model.get(printerSelectionCombobox.currentIndex).key);
|
||||
// reset to defaults
|
||||
printerSelectionCombobox.currentIndex = 0
|
||||
printerSelectionCombobox.currentIndex = 0;
|
||||
}
|
||||
text: catalog.i18nc("@action:button","Print");
|
||||
}
|
||||
]
|
||||
title: catalog.i18nc("@title:window", "Print over network");
|
||||
visible: true;
|
||||
width: minimumWidth;
|
||||
|
||||
Column {
|
||||
id: printerSelection;
|
||||
anchors {
|
||||
fill: parent;
|
||||
leftMargin: UM.Theme.getSize("default_margin").width;
|
||||
rightMargin: UM.Theme.getSize("default_margin").width;
|
||||
top: parent.top;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
}
|
||||
height: 50 * screenScaleFactor;
|
||||
|
||||
SystemPalette {
|
||||
id: palette;
|
||||
}
|
||||
|
||||
UM.I18nCatalog {
|
||||
id: catalog;
|
||||
name: "cura";
|
||||
}
|
||||
|
||||
Label {
|
||||
id: manualPrinterSelectionLabel;
|
||||
anchors {
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
topMargin: UM.Theme.getSize("default_margin").height;
|
||||
}
|
||||
height: 20 * screenScaleFactor;
|
||||
text: catalog.i18nc("@label", "Printer selection");
|
||||
wrapMode: Text.Wrap;
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: printerSelectionCombobox;
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
height: 40 * screenScaleFactor;
|
||||
model: base.printersModel;
|
||||
textRole: "name";
|
||||
width: parent.width;
|
||||
}
|
||||
}
|
||||
|
||||
// Utils
|
||||
function resetPrintersModel() {
|
||||
printersModel.clear();
|
||||
printersModel.append({ name: "Automatic", key: ""});
|
||||
for (var index in OutputDevice.printers) {
|
||||
printersModel.append({name: OutputDevice.printers[index].name, key: OutputDevice.printers[index].key});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,17 +6,14 @@ import QtQuick.Dialogs 1.1
|
|||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Controls.Styles 1.3
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtQuick.Controls 1.4 as LegacyControls
|
||||
import UM 1.3 as UM
|
||||
|
||||
Item {
|
||||
id: root;
|
||||
|
||||
property var shadowRadius: 5;
|
||||
property var shadowOffset: 2;
|
||||
property var printer: null;
|
||||
property var collapsed: true;
|
||||
|
||||
height: childrenRect.height + shadowRadius * 2; // Bubbles upward
|
||||
width: parent.width; // Bubbles downward
|
||||
|
||||
|
@ -24,10 +21,10 @@ Item {
|
|||
Rectangle {
|
||||
// 5px margin, but shifted 2px vertically because of the shadow
|
||||
anchors {
|
||||
topMargin: root.shadowRadius - root.shadowOffset;
|
||||
bottomMargin: root.shadowRadius + root.shadowOffset;
|
||||
leftMargin: root.shadowRadius;
|
||||
rightMargin: root.shadowRadius;
|
||||
topMargin: root.shadowRadius - root.shadowOffset;
|
||||
}
|
||||
color: {
|
||||
if (printer.state == "disabled") {
|
||||
|
@ -46,8 +43,8 @@ Item {
|
|||
width: parent.width - 2 * shadowRadius;
|
||||
|
||||
Column {
|
||||
width: parent.width;
|
||||
height: childrenRect.height;
|
||||
width: parent.width;
|
||||
|
||||
// Main card
|
||||
Item {
|
||||
|
@ -65,15 +62,12 @@ Item {
|
|||
margins: UM.Theme.getSize("default_margin").width;
|
||||
top: parent.top;
|
||||
}
|
||||
height: 58;
|
||||
width: 58;
|
||||
height: 58 * screenScaleFactor;
|
||||
width: 58 * screenScaleFactor;
|
||||
|
||||
// Skeleton
|
||||
Rectangle {
|
||||
anchors {
|
||||
fill: parent;
|
||||
// margins: Math.round(UM.Theme.getSize("default_margin").width / 4);
|
||||
}
|
||||
anchors.fill: parent;
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
|
||||
visible: !printer;
|
||||
|
@ -153,7 +147,6 @@ Item {
|
|||
height: UM.Theme.getSize("monitor_tab_text_line").height;
|
||||
width: parent.width * 0.75;
|
||||
|
||||
|
||||
// Skeleton
|
||||
Rectangle {
|
||||
anchors.fill: parent;
|
||||
|
@ -192,12 +185,14 @@ Item {
|
|||
verticalCenter: parent.verticalCenter;
|
||||
}
|
||||
color: UM.Theme.getColor("text");
|
||||
height: 15; // TODO: Theme!
|
||||
height: 15 * screenScaleFactor; // TODO: Theme!
|
||||
source: root.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom");
|
||||
sourceSize.height: height;
|
||||
sourceSize.width: width;
|
||||
sourceSize {
|
||||
height: height;
|
||||
width: width;
|
||||
}
|
||||
visible: printer;
|
||||
width: 15; // TODO: Theme!
|
||||
width: 15 * screenScaleFactor; // TODO: Theme!
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
@ -213,7 +208,7 @@ Item {
|
|||
}
|
||||
|
||||
Connections {
|
||||
target: printerList
|
||||
target: printerList;
|
||||
onCurrentIndexChanged: {
|
||||
if (!model) {
|
||||
return;
|
||||
|
|
|
@ -10,17 +10,14 @@ import QtQuick.Controls 1.4 as LegacyControls
|
|||
import UM 1.3 as UM
|
||||
|
||||
Item {
|
||||
|
||||
property var printer: null;
|
||||
property var printJob: printer ? printer.activePrintJob : null;
|
||||
property var collapsed: true;
|
||||
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
Behavior on opacity { NumberAnimation { duration: 100 } }
|
||||
|
||||
width: parent.width;
|
||||
height: collapsed ? 0 : childrenRect.height;
|
||||
opacity: collapsed ? 0 : 1;
|
||||
width: parent.width;
|
||||
|
||||
Column {
|
||||
id: contentColumn;
|
||||
|
@ -44,8 +41,8 @@ Item {
|
|||
HorizontalLine {}
|
||||
|
||||
Row {
|
||||
width: parent.width;
|
||||
height: childrenRect.height;
|
||||
width: parent.width;
|
||||
|
||||
PrintJobTitle {
|
||||
job: root.printer.activePrintJob;
|
||||
|
|
|
@ -17,107 +17,90 @@ ProgressBar {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
value: progress;
|
||||
width: parent.width;
|
||||
|
||||
style: ProgressBarStyle {
|
||||
property var remainingTime:
|
||||
{
|
||||
if(printer.activePrintJob == null)
|
||||
{
|
||||
return 0
|
||||
property var remainingTime: {
|
||||
if (printer.activePrintJob == null) {
|
||||
return 0;
|
||||
}
|
||||
/* Sometimes total minus elapsed is less than 0. Use Math.max() to prevent remaining
|
||||
time from ever being less than 0. Negative durations cause strange behavior such
|
||||
as displaying "-1h -1m". */
|
||||
var activeJob = printer.activePrintJob
|
||||
var activeJob = printer.activePrintJob;
|
||||
return Math.max(activeJob.timeTotal - activeJob.timeElapsed, 0);
|
||||
}
|
||||
property var progressText:
|
||||
{
|
||||
if(printer.activePrintJob == null)
|
||||
{
|
||||
return ""
|
||||
property var progressText: {
|
||||
if (printer.activePrintJob == null) {
|
||||
return "";
|
||||
}
|
||||
switch(printer.activePrintJob.state)
|
||||
{
|
||||
switch (printer.activePrintJob.state) {
|
||||
case "wait_cleanup":
|
||||
if(printer.activePrintJob.timeTotal > printer.activePrintJob.timeElapsed)
|
||||
{
|
||||
return catalog.i18nc("@label:status", "Aborted")
|
||||
if (printer.activePrintJob.timeTotal > printer.activePrintJob.timeElapsed) {
|
||||
return catalog.i18nc("@label:status", "Aborted");
|
||||
}
|
||||
return catalog.i18nc("@label:status", "Finished")
|
||||
return catalog.i18nc("@label:status", "Finished");
|
||||
case "pre_print":
|
||||
case "sent_to_printer":
|
||||
return catalog.i18nc("@label:status", "Preparing")
|
||||
return catalog.i18nc("@label:status", "Preparing");
|
||||
case "aborted":
|
||||
return catalog.i18nc("@label:status", "Aborted")
|
||||
return catalog.i18nc("@label:status", "Aborted");
|
||||
case "wait_user_action":
|
||||
return catalog.i18nc("@label:status", "Aborted")
|
||||
return catalog.i18nc("@label:status", "Aborted");
|
||||
case "pausing":
|
||||
return catalog.i18nc("@label:status", "Pausing")
|
||||
return catalog.i18nc("@label:status", "Pausing");
|
||||
case "paused":
|
||||
return OutputDevice.formatDuration( remainingTime )
|
||||
return OutputDevice.formatDuration( remainingTime );
|
||||
case "resuming":
|
||||
return catalog.i18nc("@label:status", "Resuming")
|
||||
return catalog.i18nc("@label:status", "Resuming");
|
||||
case "queued":
|
||||
return catalog.i18nc("@label:status", "Action required")
|
||||
return catalog.i18nc("@label:status", "Action required");
|
||||
default:
|
||||
return OutputDevice.formatDuration( remainingTime )
|
||||
return OutputDevice.formatDuration( remainingTime );
|
||||
}
|
||||
}
|
||||
|
||||
background: Rectangle
|
||||
{
|
||||
implicitWidth: 100
|
||||
implicitHeight: visible ? 24 : 0
|
||||
color: UM.Theme.getColor("viewport_background")
|
||||
background: Rectangle {
|
||||
color: UM.Theme.getColor("viewport_background");
|
||||
implicitHeight: visible ? 24 : 0;
|
||||
implicitWidth: 100;
|
||||
}
|
||||
|
||||
progress: Rectangle
|
||||
{
|
||||
color:
|
||||
{
|
||||
progress: Rectangle {
|
||||
id: progressItem;
|
||||
color: {
|
||||
var state = printer.activePrintJob.state
|
||||
var inactiveStates = [
|
||||
"pausing",
|
||||
"paused",
|
||||
"resuming",
|
||||
"wait_cleanup"
|
||||
]
|
||||
if(inactiveStates.indexOf(state) > -1 && remainingTime > 0)
|
||||
{
|
||||
return UM.Theme.getColor("monitor_tab_text_inactive")
|
||||
}
|
||||
else
|
||||
{
|
||||
return UM.Theme.getColor("primary")
|
||||
}
|
||||
}
|
||||
id: progressItem
|
||||
function getTextOffset()
|
||||
{
|
||||
if(progressItem.width + progressLabel.width + 16 < control.width)
|
||||
{
|
||||
return progressItem.width + UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
else
|
||||
{
|
||||
return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width
|
||||
];
|
||||
if (inactiveStates.indexOf(state) > -1 && remainingTime > 0) {
|
||||
return UM.Theme.getColor("monitor_tab_text_inactive");
|
||||
} else {
|
||||
return UM.Theme.getColor("primary");
|
||||
}
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: progressLabel
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: getTextOffset()
|
||||
text: progressText
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: progressItem.width + progressLabel.width < control.width ? "black" : "white"
|
||||
width: contentWidth
|
||||
font: UM.Theme.getFont("default")
|
||||
Label {
|
||||
id: progressLabel;
|
||||
anchors {
|
||||
left: parent.left;
|
||||
leftMargin: getTextOffset();
|
||||
}
|
||||
text: progressText;
|
||||
anchors.verticalCenter: parent.verticalCenter;
|
||||
color: progressItem.width + progressLabel.width < control.width ? "black" : "white";
|
||||
width: contentWidth;
|
||||
font: UM.Theme.getFont("default");
|
||||
}
|
||||
|
||||
function getTextOffset() {
|
||||
if (progressItem.width + progressLabel.width + 16 < control.width) {
|
||||
return progressItem.width + UM.Theme.getSize("default_margin").width;
|
||||
} else {
|
||||
return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
value: progress;
|
||||
width: parent.width;
|
||||
}
|
|
@ -5,26 +5,27 @@ import QtQuick 2.2
|
|||
import QtQuick.Controls 1.4
|
||||
import UM 1.2 as UM
|
||||
|
||||
Item
|
||||
{
|
||||
property alias text: familyNameLabel.text
|
||||
Item {
|
||||
property alias text: familyNameLabel.text;
|
||||
property var padding: 3 * screenScaleFactor; // TODO: Theme!
|
||||
implicitHeight: familyNameLabel.contentHeight + 2 * padding // Apply the padding to top and bottom.
|
||||
implicitWidth: familyNameLabel.contentWidth + implicitHeight // The extra height is added to ensure the radius doesn't cut something off.
|
||||
Rectangle
|
||||
{
|
||||
id: background
|
||||
height: parent.height
|
||||
width: parent.width
|
||||
implicitHeight: familyNameLabel.contentHeight + 2 * padding; // Apply the padding to top and bottom.
|
||||
implicitWidth: familyNameLabel.contentWidth + implicitHeight; // The extra height is added to ensure the radius doesn't cut something off.
|
||||
|
||||
Rectangle {
|
||||
id: background;
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter;
|
||||
right: parent.right;
|
||||
}
|
||||
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
|
||||
anchors.right: parent.right
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
radius: 0.5 * height
|
||||
height: parent.height;
|
||||
radius: 0.5 * height;
|
||||
width: parent.width;
|
||||
}
|
||||
Label
|
||||
{
|
||||
id: familyNameLabel
|
||||
anchors.centerIn: parent
|
||||
text: ""
|
||||
|
||||
Label {
|
||||
id: familyNameLabel;
|
||||
anchors.centerIn: parent;
|
||||
text: "";
|
||||
}
|
||||
}
|
|
@ -13,17 +13,14 @@ import UM 1.3 as UM
|
|||
|
||||
Item {
|
||||
id: root;
|
||||
|
||||
property var printer: null;
|
||||
property var printJob: null;
|
||||
|
||||
width: parent.width;
|
||||
height: childrenRect.height;
|
||||
|
||||
// Printer family pills
|
||||
Row {
|
||||
id: printerFamilyPills;
|
||||
|
||||
anchors {
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
|
@ -35,21 +32,23 @@ Item {
|
|||
|
||||
Repeater {
|
||||
id: compatiblePills;
|
||||
visible: printJob;
|
||||
delegate: PrinterFamilyPill {
|
||||
text: modelData;
|
||||
}
|
||||
model: printJob ? printJob.compatibleMachineFamilies : [];
|
||||
delegate: PrinterFamilyPill { text: modelData; }
|
||||
visible: printJob;
|
||||
|
||||
}
|
||||
|
||||
PrinterFamilyPill {
|
||||
visible: !compatiblePills.visible && printer;
|
||||
text: printer.type;
|
||||
visible: !compatiblePills.visible && printer;
|
||||
}
|
||||
}
|
||||
|
||||
// Extruder info
|
||||
Row {
|
||||
id: extrudersInfo;
|
||||
|
||||
anchors {
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
|
|
|
@ -4,84 +4,66 @@
|
|||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
|
||||
import UM 1.3 as UM
|
||||
|
||||
Item {
|
||||
property var camera: null;
|
||||
|
||||
Item
|
||||
{
|
||||
property var camera: null
|
||||
|
||||
Rectangle
|
||||
{
|
||||
anchors.fill:parent
|
||||
color: UM.Theme.getColor("viewport_overlay")
|
||||
opacity: 0.5
|
||||
Rectangle {
|
||||
anchors.fill:parent;
|
||||
color: UM.Theme.getColor("viewport_overlay");
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
onClicked: OutputDevice.setActiveCamera(null)
|
||||
z: 0
|
||||
MouseArea {
|
||||
anchors.fill: parent;
|
||||
onClicked: OutputDevice.setActiveCamera(null);
|
||||
z: 0;
|
||||
}
|
||||
|
||||
CameraButton
|
||||
{
|
||||
id: closeCameraButton
|
||||
iconSource: UM.Theme.getIcon("cross1")
|
||||
anchors
|
||||
{
|
||||
top: cameraImage.top
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
CameraButton {
|
||||
id: closeCameraButton;
|
||||
anchors {
|
||||
right: cameraImage.right
|
||||
rightMargin: UM.Theme.getSize("default_margin").width
|
||||
top: cameraImage.top
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
z: 999
|
||||
iconSource: UM.Theme.getIcon("cross1");
|
||||
z: 999;
|
||||
}
|
||||
|
||||
Image
|
||||
{
|
||||
Image {
|
||||
id: cameraImage
|
||||
width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth)
|
||||
height: Math.round((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width)
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
z: 1
|
||||
onVisibleChanged:
|
||||
{
|
||||
if(visible)
|
||||
{
|
||||
if(camera != null)
|
||||
{
|
||||
camera.start()
|
||||
anchors.horizontalCenter: parent.horizontalCenter;
|
||||
anchors.verticalCenter: parent.verticalCenter;
|
||||
height: Math.round((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width);
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
if (camera != null) {
|
||||
camera.start();
|
||||
}
|
||||
} else
|
||||
{
|
||||
if(camera != null)
|
||||
{
|
||||
camera.stop()
|
||||
} else {
|
||||
if (camera != null) {
|
||||
camera.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
source:
|
||||
{
|
||||
if(camera != null && camera.latestImage != null)
|
||||
{
|
||||
source: {
|
||||
if (camera != null && camera.latestImage != null) {
|
||||
return camera.latestImage;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: cameraImage
|
||||
onClicked:
|
||||
{
|
||||
OutputDevice.setActiveCamera(null)
|
||||
}
|
||||
width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth);
|
||||
z: 1
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: cameraImage;
|
||||
onClicked: {
|
||||
OutputDevice.setActiveCamera(null);
|
||||
}
|
||||
z: 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,128 +1,126 @@
|
|||
// Copyright (c) 2018 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import UM 1.2 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Window 2.1
|
||||
import UM 1.2 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
Item
|
||||
{
|
||||
id: base
|
||||
Item {
|
||||
id: base;
|
||||
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 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.
|
||||
|
||||
Row
|
||||
{
|
||||
objectName: "networkPrinterConnectButton"
|
||||
visible: isUM3
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Button
|
||||
{
|
||||
height: UM.Theme.getSize("save_button_save_to_button").height
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer")
|
||||
text: catalog.i18nc("@action:button", "Request Access")
|
||||
style: UM.Theme.styles.sidebar_action_button
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication()
|
||||
visible: printerConnected && !printerAcceptsCommands && !authenticationRequested
|
||||
UM.I18nCatalog {
|
||||
id: catalog;
|
||||
name: "cura";
|
||||
}
|
||||
|
||||
Button
|
||||
{
|
||||
height: UM.Theme.getSize("save_button_save_to_button").height
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer")
|
||||
text: catalog.i18nc("@action:button", "Connect")
|
||||
style: UM.Theme.styles.sidebar_action_button
|
||||
onClicked: connectActionDialog.show()
|
||||
visible: !printerConnected
|
||||
Row {
|
||||
objectName: "networkPrinterConnectButton";
|
||||
spacing: UM.Theme.getSize("default_margin").width;
|
||||
visible: isUM3;
|
||||
|
||||
Button {
|
||||
height: UM.Theme.getSize("save_button_save_to_button").height;
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication();
|
||||
style: UM.Theme.styles.sidebar_action_button;
|
||||
text: catalog.i18nc("@action:button", "Request Access");
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer");
|
||||
visible: printerConnected && !printerAcceptsCommands && !authenticationRequested;
|
||||
}
|
||||
|
||||
Button {
|
||||
height: UM.Theme.getSize("save_button_save_to_button").height;
|
||||
onClicked: connectActionDialog.show();
|
||||
style: UM.Theme.styles.sidebar_action_button;
|
||||
text: catalog.i18nc("@action:button", "Connect");
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer");
|
||||
visible: !printerConnected;
|
||||
}
|
||||
}
|
||||
|
||||
UM.Dialog
|
||||
{
|
||||
id: connectActionDialog
|
||||
Loader
|
||||
{
|
||||
anchors.fill: parent
|
||||
source: "DiscoverUM3Action.qml"
|
||||
UM.Dialog {
|
||||
id: connectActionDialog;
|
||||
rightButtons: Button {
|
||||
iconName: "dialog-close";
|
||||
onClicked: connectActionDialog.reject();
|
||||
text: catalog.i18nc("@action:button", "Close");
|
||||
}
|
||||
rightButtons: Button
|
||||
{
|
||||
text: catalog.i18nc("@action:button", "Close")
|
||||
iconName: "dialog-close"
|
||||
onClicked: connectActionDialog.reject()
|
||||
|
||||
Loader {
|
||||
anchors.fill: parent;
|
||||
source: "DiscoverUM3Action.qml";
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.fill: parent;
|
||||
objectName: "networkPrinterConnectionInfo";
|
||||
spacing: UM.Theme.getSize("default_margin").width;
|
||||
visible: isUM3;
|
||||
|
||||
Column
|
||||
{
|
||||
objectName: "networkPrinterConnectionInfo"
|
||||
visible: isUM3
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
anchors.fill: parent
|
||||
|
||||
Button
|
||||
{
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer")
|
||||
text: catalog.i18nc("@action:button", "Request Access")
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication()
|
||||
visible: printerConnected && !printerAcceptsCommands && !authenticationRequested
|
||||
Button {
|
||||
onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication();
|
||||
text: catalog.i18nc("@action:button", "Request Access");
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer");
|
||||
visible: printerConnected && !printerAcceptsCommands && !authenticationRequested;
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
visible: printerConnected
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
Row {
|
||||
anchors {
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
}
|
||||
height: childrenRect.height;
|
||||
spacing: UM.Theme.getSize("default_margin").width;
|
||||
visible: printerConnected;
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
height: childrenRect.height
|
||||
Column {
|
||||
Repeater {
|
||||
model: Cura.ExtrudersModel {
|
||||
simpleNames: true;
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
Repeater
|
||||
{
|
||||
model: Cura.ExtrudersModel { simpleNames: true }
|
||||
Label { text: model.name }
|
||||
}
|
||||
}
|
||||
Column
|
||||
{
|
||||
Repeater
|
||||
{
|
||||
id: nozzleColumn
|
||||
model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].hotendIds : null
|
||||
Label { text: nozzleColumn.model[index] }
|
||||
}
|
||||
}
|
||||
Column
|
||||
{
|
||||
Repeater
|
||||
{
|
||||
id: materialColumn
|
||||
model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].materialNames : null
|
||||
Label { text: materialColumn.model[index] }
|
||||
Label {
|
||||
text: model.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button
|
||||
{
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Load the configuration of the printer into Cura")
|
||||
text: catalog.i18nc("@action:button", "Activate Configuration")
|
||||
visible: false // printerConnected && !isClusterPrinter()
|
||||
onClicked: manager.loadConfigurationFromPrinter()
|
||||
Column {
|
||||
Repeater {
|
||||
id: nozzleColumn;
|
||||
model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].hotendIds : null;
|
||||
|
||||
Label {
|
||||
text: nozzleColumn.model[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||
Column {
|
||||
Repeater {
|
||||
id: materialColumn;
|
||||
model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].materialNames : null;
|
||||
|
||||
Label {
|
||||
text: materialColumn.model[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
onClicked: manager.loadConfigurationFromPrinter();
|
||||
text: catalog.i18nc("@action:button", "Activate Configuration");
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Load the configuration of the printer into Cura");
|
||||
visible: false; // printerConnected && !isClusterPrinter()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue