mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-29 07:14:24 +08:00
368 lines
14 KiB
QML
368 lines
14 KiB
QML
import QtQuick 2.2
|
|
import QtQuick.Controls 1.4
|
|
import QtQuick.Controls.Styles 1.4
|
|
|
|
import UM 1.3 as UM
|
|
|
|
|
|
Rectangle
|
|
{
|
|
function strPadLeft(string, pad, length)
|
|
{
|
|
return (new Array(length + 1).join(pad) + string).slice(-length);
|
|
}
|
|
|
|
function getPrettyTime(time)
|
|
{
|
|
var hours = Math.floor(time / 3600)
|
|
time -= hours * 3600
|
|
var minutes = Math.floor(time / 60);
|
|
time -= minutes * 60
|
|
var seconds = Math.floor(time);
|
|
|
|
var finalTime = strPadLeft(hours, "0", 2) + ':' + strPadLeft(minutes,'0',2)+ ':' + strPadLeft(seconds,'0',2);
|
|
return finalTime;
|
|
}
|
|
|
|
function formatPrintJobPercent(printJob)
|
|
{
|
|
if (printJob == null)
|
|
{
|
|
return "";
|
|
}
|
|
if (printJob.time_total === 0)
|
|
{
|
|
return "";
|
|
}
|
|
return Math.min(100, Math.round(printJob.time_elapsed / printJob.time_total * 100)) + "%";
|
|
}
|
|
|
|
|
|
id: printerDelegate
|
|
property var printer
|
|
|
|
border.width: UM.Theme.getSize("default_lining").width
|
|
border.color: mouse.containsMouse ? UM.Theme.getColor("setting_control_border_highlight") : lineColor
|
|
z: mouse.containsMouse ? 1 : 0 // Push this item up a bit on mouse over to ensure that the highlighted bottom border is visible.
|
|
|
|
property var printJob:
|
|
{
|
|
if (printer.reserved_by != null)
|
|
{
|
|
// Look in another list.
|
|
return OutputDevice.printJobsByUUID[printer.reserved_by]
|
|
}
|
|
return OutputDevice.printJobsByPrinterUUID[printer.uuid]
|
|
}
|
|
|
|
MouseArea
|
|
{
|
|
id: mouse
|
|
anchors.fill:parent
|
|
onClicked: OutputDevice.selectPrinter(printer.unique_name, printer.friendly_name)
|
|
hoverEnabled: true;
|
|
|
|
// Only clickable if no printer is selected
|
|
enabled: OutputDevice.selectedPrinterName == ""
|
|
}
|
|
|
|
Row
|
|
{
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
anchors.bottom: parent.bottom
|
|
anchors.margins: UM.Theme.getSize("default_margin").width
|
|
|
|
Rectangle
|
|
{
|
|
width: parent.width / 3
|
|
height: parent.height
|
|
|
|
Label // Print job name
|
|
{
|
|
id: jobNameLabel
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
text: printJob != null ? printJob.name : ""
|
|
font: UM.Theme.getFont("default_bold")
|
|
}
|
|
|
|
Label
|
|
{
|
|
id: jobOwnerLabel
|
|
anchors.top: jobNameLabel.bottom
|
|
text: printJob != null ? printJob.owner : ""
|
|
opacity: 0.50
|
|
}
|
|
|
|
Label
|
|
{
|
|
id: totalTimeLabel
|
|
anchors.bottom: parent.bottom
|
|
text: printJob != null ? getPrettyTime(printJob.time_total) : ""
|
|
opacity: 0.65
|
|
font: UM.Theme.getFont("default")
|
|
}
|
|
}
|
|
|
|
Rectangle
|
|
{
|
|
width: parent.width / 3 * 2
|
|
height: parent.height
|
|
|
|
Label // Friendly machine name
|
|
{
|
|
id: printerNameLabel
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
width: parent.width / 2 - UM.Theme.getSize("default_margin").width - showCameraIcon.width
|
|
text: printer.friendly_name
|
|
font: UM.Theme.getFont("default_bold")
|
|
elide: Text.ElideRight
|
|
}
|
|
|
|
Label // Machine variant
|
|
{
|
|
id: printerTypeLabel
|
|
anchors.top: printerNameLabel.bottom
|
|
width: parent.width / 2 - UM.Theme.getSize("default_margin").width
|
|
text: printer.machine_variant
|
|
anchors.left: parent.left
|
|
elide: Text.ElideRight
|
|
font: UM.Theme.getFont("very_small")
|
|
opacity: 0.50
|
|
}
|
|
|
|
Rectangle // Camera icon
|
|
{
|
|
id: showCameraIcon
|
|
width: 40 * screenScaleFactor
|
|
height: width
|
|
radius: width
|
|
anchors.right: printProgressArea.left
|
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
|
color: emphasisColor
|
|
UM.RecolorImage
|
|
{
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
source: "camera-icon.svg"
|
|
width: sourceSize.width
|
|
height: sourceSize.height * width / sourceSize.width
|
|
color: "white"
|
|
}
|
|
}
|
|
|
|
Row // PrintCode config
|
|
{
|
|
id: extruderInfo
|
|
anchors.bottom: parent.bottom
|
|
|
|
width: parent.width / 2 - UM.Theme.getSize("default_margin").width
|
|
height: childrenRect.height
|
|
spacing: 10 * screenScaleFactor
|
|
|
|
PrintCoreConfiguration
|
|
{
|
|
id: leftExtruderInfo
|
|
width: (parent.width-1) / 2
|
|
printCoreConfiguration: printer.configuration[0]
|
|
}
|
|
|
|
Rectangle
|
|
{
|
|
id: extruderSeperator
|
|
width: 1 * screenScaleFactor
|
|
height: parent.height
|
|
color: lineColor
|
|
}
|
|
|
|
PrintCoreConfiguration
|
|
{
|
|
id: rightExtruderInfo
|
|
width: (parent.width-1) / 2
|
|
printCoreConfiguration: printer.configuration[1]
|
|
}
|
|
}
|
|
|
|
Rectangle // Print progress
|
|
{
|
|
id: printProgressArea
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
height: showExtended ? parent.height: printProgressTitleBar.height
|
|
width: parent.width / 2 - UM.Theme.getSize("default_margin").width
|
|
border.width: UM.Theme.getSize("default_lining").width
|
|
border.color: lineColor
|
|
radius: cornerRadius
|
|
property var showExtended: {
|
|
if(printJob!= null)
|
|
{
|
|
var extendStates = ["sent_to_printer", "wait_for_configuration", "printing", "pre_print", "post_print", "wait_cleanup", "queued"];
|
|
return extendStates.indexOf(printJob.status) !== -1;
|
|
}
|
|
return ! printer.enabled;
|
|
}
|
|
visible:
|
|
{
|
|
return true
|
|
}
|
|
|
|
Item // Status and Percent
|
|
{
|
|
id: printProgressTitleBar
|
|
width: parent.width
|
|
//border.width: UM.Theme.getSize("default_lining").width
|
|
//border.color: lineColor
|
|
height: 40 * screenScaleFactor
|
|
anchors.left: parent.left
|
|
|
|
Label
|
|
{
|
|
id: statusText
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.right: progressText.left
|
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
|
text: {
|
|
if ( ! printer.enabled)
|
|
{
|
|
return catalog.i18nc("@label:status", "Disabled");
|
|
}
|
|
|
|
if(printJob != null)
|
|
{
|
|
if(printJob.status == "printing" || printJob.status == "post_print")
|
|
{
|
|
return catalog.i18nc("@label:status", "Printing")
|
|
}
|
|
else if(printJob.status == "wait_for_configuration")
|
|
{
|
|
return catalog.i18nc("@label:status", "Reserved")
|
|
}
|
|
else if(printJob.status == "wait_cleanup")
|
|
{
|
|
return catalog.i18nc("@label:status", "Finished")
|
|
}
|
|
else if (printJob.status == "pre_print" || printJob.status == "sent_to_printer")
|
|
{
|
|
return catalog.i18nc("@label", "Preparing to print")
|
|
}
|
|
else if (printJob.configuration_changes_required != undefined && printJob.status == "queued")
|
|
{
|
|
return catalog.i18nc("@label:status", "Action required")
|
|
}
|
|
else if (printJob.Status == "aborted")
|
|
{
|
|
return catalog.i18nc("@label:status", "Print aborted")
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
return catalog.i18nc("@label:status", "Available");
|
|
}
|
|
|
|
elide: Text.ElideRight
|
|
|
|
font: UM.Theme.getFont("small")
|
|
}
|
|
Label
|
|
{
|
|
id: progressText
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
|
|
|
anchors.top: statusText.top
|
|
|
|
text: formatPrintJobPercent(printJob)
|
|
visible: printJob != null && (["printing", "post_print", "pre_print", "sent_to_printer"].indexOf(printJob.status) !== -1)
|
|
opacity: 0.65
|
|
font: UM.Theme.getFont("very_small")
|
|
}
|
|
Rectangle
|
|
{
|
|
//TODO: This will become a progress bar in the future
|
|
width: parent.width
|
|
height: UM.Theme.getSize("default_lining").height
|
|
anchors.bottom: parent.bottom
|
|
anchors.left: parent.left
|
|
visible: printProgressArea.showExtended
|
|
color: lineColor
|
|
}
|
|
}
|
|
|
|
Column
|
|
{
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
|
|
|
anchors.top: printProgressTitleBar.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
|
|
width: parent.width - 2 * UM.Theme.getSize("default_margin").width
|
|
|
|
visible: showExtended
|
|
|
|
Label // Status detail
|
|
{
|
|
text:
|
|
{
|
|
if ( ! printer.enabled)
|
|
{
|
|
return catalog.i18nc("@label", "Not accepting print jobs");
|
|
}
|
|
|
|
if(printJob != null)
|
|
{
|
|
switch (printJob.status)
|
|
{
|
|
case "printing":
|
|
case "post_print":
|
|
return catalog.i18nc("@label", "Finishes at: ") + OutputDevice.getTimeCompleted(printJob.time_total - printJob.time_elapsed)
|
|
case "wait_cleanup":
|
|
return catalog.i18nc("@label", "Clear build plate")
|
|
case "sent_to_printer":
|
|
case "pre_print":
|
|
return catalog.i18nc("@label", "Preparing to print")
|
|
case "wait_for_configuration":
|
|
return catalog.i18nc("@label", "Not accepting print jobs")
|
|
case "queued":
|
|
if (printJob.configuration_changes_required != undefined)
|
|
{
|
|
return catalog.i18nc("@label", "Waiting for configuration change");
|
|
}
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
elide: Text.ElideRight
|
|
font: UM.Theme.getFont("default")
|
|
}
|
|
|
|
Label // Status 2nd row
|
|
{
|
|
text: {
|
|
if(printJob != null) {
|
|
if(printJob.status == "printing" || printJob.status == "post_print")
|
|
{
|
|
return OutputDevice.getDateCompleted(printJob.time_total - printJob.time_elapsed)
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
elide: Text.ElideRight
|
|
font: UM.Theme.getFont("default")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|