Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
Ian Paschal 97fa5094ce Monitor tab refactor + skeleton loading
Contributes to CL-1051
2018-10-01 16:24:51 +02:00

203 lines
7.2 KiB
QML

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);
Button {
id: button;
background: Rectangle {
color: UM.Theme.getColor("viewport_background");
height: button.height;
opacity: button.down || button.hovered ? 1 : 0;
radius: 0.5 * width;
width: button.width;
}
contentItem: Label {
color: UM.Theme.getColor("monitor_tab_text_inactive");
font.pixelSize: 25;
horizontalAlignment: Text.AlignHCenter;
text: button.text;
verticalAlignment: Text.AlignVCenter;
}
height: width;
hoverEnabled: true;
onClicked: parent.switchPopupState();
text: "\u22EE"; //Unicode; Three stacked points.
width: 35;
}
Popup {
id: popup;
background: Item {
height: popup.height;
width: popup.width;
DropShadow {
anchors.fill: pointedRectangle;
color: "#3F000000"; // 25% shadow
radius: 5;
source: pointedRectangle;
transparentBorder: true;
verticalOffset: 2;
}
Item {
id: pointedRectangle
width: parent.width - 10 * screenScaleFactor; // Because of the shadow
height: parent.height - 10 * screenScaleFactor; // Because of the shadow
anchors.horizontalCenter: parent.horizontalCenter;
anchors.verticalCenter: parent.verticalCenter;
Rectangle {
id: point
anchors.right: bloop.right;
anchors.rightMargin: 24;
color: UM.Theme.getColor("setting_control");
height: 14 * screenScaleFactor;
transform: Rotation {
angle: 45;
}
width: 14 * screenScaleFactor;
y: 1;
}
Rectangle {
id: bloop
anchors {
bottom: parent.bottom;
bottomMargin: 8 * screenScaleFactor; // Because of the shadow
top: parent.top;
topMargin: 8 * screenScaleFactor; // Because of the shadow + point
}
color: UM.Theme.getColor("setting_control");
width: parent.width;
}
}
}
clip: true;
closePolicy: Popup.CloseOnPressOutside;
contentItem: Column {
id: popupOptions;
anchors {
top: parent.top;
topMargin: UM.Theme.getSize("default_margin").height + 10 * screenScaleFactor; // Account for the point of the box
}
height: childrenRect.height + spacing * popupOptions.children.length + UM.Theme.getSize("default_margin").height;
spacing: Math.floor(UM.Theme.getSize("default_margin").height / 2);
width: parent.width;
PrintJobContextMenuItem {
enabled: printJob && !running ? OutputDevice.queuedPrintJobs[0].key != printJob.key : false;
onClicked: {
sendToTopConfirmationDialog.visible = true;
popup.close();
}
text: catalog.i18nc("@label", "Move to top");
}
PrintJobContextMenuItem {
enabled: printJob && !running;
onClicked: {
deleteConfirmationDialog.visible = true;
popup.close();
}
text: catalog.i18nc("@label", "Delete");
}
PrintJobContextMenuItem {
enabled: printJob && running;
onClicked: {
if (printJob.state == "paused") {
printJob.setState("print");
} else if(printJob.state == "printing") {
printJob.setState("pause");
}
popup.close();
}
text: printJob && printJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause");
}
PrintJobContextMenuItem {
enabled: printJob && running;
onClicked: {
abortConfirmationDialog.visible = true;
popup.close();
}
text: catalog.i18nc("@label", "Abort");
}
}
enter: Transition {
NumberAnimation {
duration: 75;
property: "visible";
}
}
exit: Transition {
NumberAnimation {
duration: 75;
property: "visible";
}
}
height: contentItem.height + 2 * padding;
onClosed: visible = false;
onOpened: visible = true;
padding: 5 * screenScaleFactor; // Because shadow
transformOrigin: Popup.Top;
visible: false;
width: 182 * screenScaleFactor;
x: (button.width - width) + 26 * screenScaleFactor;
y: button.height + 5 * screenScaleFactor; // Because shadow
}
MessageDialog {
id: sendToTopConfirmationDialog;
Component.onCompleted: visible = false;
icon: StandardIcon.Warning;
onYes: OutputDevice.sendJobToTop(printJob.key);
standardButtons: StandardButton.Yes | StandardButton.No;
text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "";
title: catalog.i18nc("@window:title", "Move print job to top");
}
MessageDialog {
id: deleteConfirmationDialog;
Component.onCompleted: visible = false;
icon: StandardIcon.Warning;
onYes: OutputDevice.deleteJobFromQueue(printJob.key);
standardButtons: StandardButton.Yes | StandardButton.No;
text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "";
title: catalog.i18nc("@window:title", "Delete print job");
}
MessageDialog {
id: abortConfirmationDialog;
Component.onCompleted: visible = false;
icon: StandardIcon.Warning;
onYes: printJob.setState("abort");
standardButtons: StandardButton.Yes | StandardButton.No;
text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : "";
title: catalog.i18nc("@window:title", "Abort print");
}
// Utils
function switchPopupState() {
popup.visible ? popup.close() : popup.open();
}
function isRunning(job) {
if (!job) {
return false;
}
return ["paused", "printing", "pre_print"].indexOf(job.state) !== -1;
}
}