mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-01 00:04:27 +08:00
246 lines
8.7 KiB
QML
246 lines
8.7 KiB
QML
// Copyright (c) 2019 Ultimaker B.V.
|
|
// Cura is released under the terms of the LGPLv3 or higher.
|
|
import QtQuick 2.2
|
|
import QtQuick.Controls 2.0
|
|
import UM 1.5 as UM
|
|
import Cura 1.0 as Cura
|
|
|
|
/**
|
|
* A Print Job Card is essentially just a filled-in Expandable Card item. All
|
|
* data within it is derived from being passed a printJob property.
|
|
*
|
|
* NOTE: For most labels, a fixed height with vertical alignment is used to make
|
|
* layouts more deterministic (like the fixed-size textboxes used in original
|
|
* mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted
|
|
* with '// FIXED-LINE-HEIGHT:'.
|
|
*/
|
|
Item
|
|
{
|
|
id: base
|
|
|
|
// The print job which all other data is derived from
|
|
property var printJob: null
|
|
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
|
|
ExpandableCard
|
|
{
|
|
enabled: printJob != null
|
|
borderColor: printJob && printJob.configurationChanges.length !== 0 ? UM.Theme.getColor("warning") : UM.Theme.getColor("monitor_card_border")
|
|
headerItem: Row
|
|
{
|
|
height: Math.round(48 * screenScaleFactor) // TODO: Theme!
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Math.round(24 * screenScaleFactor) // TODO: Theme!
|
|
spacing: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
|
|
|
MonitorPrintJobPreview
|
|
{
|
|
printJob: base.printJob
|
|
size: Math.round(32 * screenScaleFactor) // TODO: Theme!
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
}
|
|
|
|
Item
|
|
{
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
height: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
|
width: UM.Theme.getSize("monitor_column").width
|
|
Rectangle
|
|
{
|
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
|
width: Math.round(parent.width / 2)
|
|
height: parent.height
|
|
visible: !printJob
|
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
|
}
|
|
UM.Label
|
|
{
|
|
text: printJob && printJob.name ? printJob.name : ""
|
|
elide: Text.ElideRight
|
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
|
visible: printJob
|
|
|
|
// FIXED-LINE-HEIGHT:
|
|
width: parent.width
|
|
height: parent.height
|
|
}
|
|
}
|
|
|
|
Item
|
|
{
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
height: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
|
width: UM.Theme.getSize("monitor_column").width
|
|
|
|
Rectangle
|
|
{
|
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
|
width: Math.round(parent.width / 3)
|
|
height: parent.height
|
|
visible: !printJob
|
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
|
}
|
|
|
|
UM.Label
|
|
{
|
|
text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : ""
|
|
elide: Text.ElideRight
|
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
|
visible: printJob
|
|
|
|
// FIXED-LINE-HEIGHT:
|
|
height: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
|
}
|
|
}
|
|
|
|
Item
|
|
{
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
height: Math.round(18 * screenScaleFactor) // TODO: This should be childrenRect.height but QML throws warnings
|
|
width: childrenRect.width
|
|
|
|
Rectangle
|
|
{
|
|
color: UM.Theme.getColor("monitor_skeleton_loading")
|
|
width: Math.round(72 * screenScaleFactor) // TODO: Theme!
|
|
height: parent.height
|
|
visible: !printJob
|
|
radius: 2 * screenScaleFactor // TODO: Theme!
|
|
}
|
|
|
|
UM.Label
|
|
{
|
|
id: printerAssignmentLabel
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
elide: Text.ElideRight
|
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
|
text: {
|
|
if (printJob !== null)
|
|
{
|
|
if (printJob.assignedPrinter == null)
|
|
{
|
|
if (printJob.state == "error")
|
|
{
|
|
return catalog.i18nc("@label", "Unavailable printer");
|
|
}
|
|
return catalog.i18nc("@label", "First available");
|
|
}
|
|
return printJob.assignedPrinter.name;
|
|
}
|
|
return "";
|
|
}
|
|
visible: printJob
|
|
width: Math.round(120 * screenScaleFactor) // TODO: Theme!
|
|
|
|
// FIXED-LINE-HEIGHT:
|
|
height: parent.height
|
|
}
|
|
|
|
Row
|
|
{
|
|
id: printerFamilyPills
|
|
anchors
|
|
{
|
|
left: printerAssignmentLabel.right;
|
|
leftMargin: Math.round(12 * screenScaleFactor) // TODO: Theme!
|
|
verticalCenter: parent.verticalCenter
|
|
}
|
|
height: childrenRect.height
|
|
spacing: Math.round(6 * screenScaleFactor) // TODO: Theme!
|
|
visible: printJob
|
|
|
|
MonitorPrinterPill
|
|
{
|
|
text: printJob ? printJob.configuration.printerType : ""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
drawerItem: Row
|
|
{
|
|
anchors
|
|
{
|
|
left: parent.left
|
|
leftMargin: Math.round(74 * screenScaleFactor) // TODO: Theme!
|
|
}
|
|
height: Math.round(108 * screenScaleFactor) // TODO: Theme!
|
|
spacing: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
|
|
|
MonitorPrinterConfiguration
|
|
{
|
|
id: printerConfiguration
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
configurations: base.printJob ? base.printJob.configuration.extruderConfigurations : null
|
|
height: Math.round(72 * screenScaleFactor) // TODO: Theme!
|
|
}
|
|
|
|
UM.Label
|
|
{
|
|
text: printJob && printJob.owner ? printJob.owner : ""
|
|
elide: Text.ElideRight
|
|
font: UM.Theme.getFont("medium") // 14pt, regular
|
|
anchors.top: printerConfiguration.top
|
|
|
|
// FIXED-LINE-HEIGHT:
|
|
height: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
|
}
|
|
}
|
|
}
|
|
|
|
MonitorContextMenuButton
|
|
{
|
|
id: contextMenuButton
|
|
anchors
|
|
{
|
|
right: parent.right
|
|
rightMargin: Math.round(8 * screenScaleFactor) // TODO: Theme!
|
|
top: parent.top
|
|
topMargin: Math.round(8 * screenScaleFactor) // TODO: Theme!
|
|
}
|
|
width: Math.round(32 * screenScaleFactor) // TODO: Theme!
|
|
height: Math.round(32 * screenScaleFactor) // TODO: Theme!
|
|
enabled: OutputDevice.supportsPrintJobActions
|
|
onClicked: enabled ? contextMenu.switchPopupState() : {}
|
|
visible:
|
|
{
|
|
if(!printJob)
|
|
{
|
|
return false;
|
|
}
|
|
if(!contextMenu.hasItems)
|
|
{
|
|
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", "Please update your printer's firmware to manage the queue remotely.")
|
|
target: contextMenuButton
|
|
}
|
|
}
|