// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.3 import QtQuick.Controls 2.0 import QtQuick.Dialogs 1.1 import UM 1.3 as UM /** * A MonitorInfoBlurb is an extension of the GenericPopUp used to show static information (vs. interactive context * menus). It accepts some text (text), an item to link to to (target), and a specification of which side of the target * to appear on (direction). It also sets the GenericPopUp's color to black, to differentiate itself from a menu. */ Item { property alias target: popUp.target property var printJob: null GenericPopUp { id: popUp // Which way should the pop-up point? Default is up, but will flip when required direction: "up" // Use dark grey for info blurbs and white for context menus color: UM.Theme.getColor("monitor_context_menu") contentItem: Item { id: contentWrapper implicitWidth: childrenRect.width implicitHeight: menuItems.height + UM.Theme.getSize("default_margin").height Column { id: menuItems width: 144 * screenScaleFactor anchors { top: parent.top topMargin: Math.floor(UM.Theme.getSize("default_margin").height / 2) } spacing: Math.floor(UM.Theme.getSize("default_margin").height / 2) PrintJobContextMenuItem { onClicked: { sendToTopConfirmationDialog.visible = true; popUp.close(); } text: catalog.i18nc("@label", "Move to top"); visible: { if (printJob && (printJob.state == "queued" || printJob.state == "error") && !isAssigned(printJob)) { if (OutputDevice && OutputDevice.queuedPrintJobs[0]) { return OutputDevice.queuedPrintJobs[0].key != printJob.key; } } return false; } } PrintJobContextMenuItem { onClicked: { deleteConfirmationDialog.visible = true; popUp.close(); } text: catalog.i18nc("@label", "Delete"); visible: { if (!printJob) { return false; } var states = ["queued", "error", "sent_to_printer"]; return states.indexOf(printJob.state) !== -1; } } PrintJobContextMenuItem { enabled: visible && !(printJob.state == "pausing" || printJob.state == "resuming"); onClicked: { if (printJob.state == "paused") { printJob.setState("print"); popUp.close(); return; } if (printJob.state == "printing") { printJob.setState("pause"); popUp.close(); return; } } text: { if (!printJob) { return ""; } switch(printJob.state) { case "paused": return catalog.i18nc("@label", "Resume"); case "pausing": return catalog.i18nc("@label", "Pausing..."); case "resuming": return catalog.i18nc("@label", "Resuming..."); default: catalog.i18nc("@label", "Pause"); } } visible: { if (!printJob) { return false; } var states = ["printing", "pausing", "paused", "resuming"]; return states.indexOf(printJob.state) !== -1; } } PrintJobContextMenuItem { enabled: visible && printJob.state !== "aborting"; onClicked: { abortConfirmationDialog.visible = true; popUp.close(); } text: printJob && printJob.state == "aborting" ? catalog.i18nc("@label", "Aborting...") : catalog.i18nc("@label", "Abort"); visible: { if (!printJob) { return false; } var states = ["pre_print", "printing", "pausing", "paused", "resuming"]; return states.indexOf(printJob.state) !== -1; } } } } } MessageDialog { id: sendToTopConfirmationDialog Component.onCompleted: visible = false icon: StandardIcon.Warning onYes: OutputDevice.sendJobToTop(printJob.key) standardButtons: StandardButton.Yes | StandardButton.No text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "" title: catalog.i18nc("@window:title", "Move print job to top") } MessageDialog { id: deleteConfirmationDialog Component.onCompleted: visible = false icon: StandardIcon.Warning onYes: OutputDevice.deleteJobFromQueue(printJob.key) standardButtons: StandardButton.Yes | StandardButton.No text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "" title: catalog.i18nc("@window:title", "Delete print job") } MessageDialog { id: abortConfirmationDialog Component.onCompleted: visible = false icon: StandardIcon.Warning onYes: printJob.setState("abort") standardButtons: StandardButton.Yes | StandardButton.No text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : "" title: catalog.i18nc("@window:title", "Abort print") } function switchPopupState() { popUp.visible ? popUp.close() : popUp.open() } function open() { popUp.open() } function close() { popUp.close() } function isAssigned(job) { if (!job) { return false; } return job.assignedPrinter ? true : false; } }