// Copyright (c) 2016 Ultimaker B.V. // Uranium is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 import QtQuick.Window 2.1 import UM 1.2 as UM import Cura 1.0 as Cura UM.ManagementPage { id: base; title: catalog.i18nc("@title:tab", "Printers"); model: UM.ContainerStacksModel { filter: {"type": "machine"} } activeId: Cura.MachineManager.activeMachineId activeIndex: activeMachineIndex() function activeMachineIndex() { for(var i = 0; i < model.rowCount(); i++) { if (model.getItem(i).id == Cura.MachineManager.activeMachineId) { return i; } } return -1; } buttons: [ Button { text: catalog.i18nc("@action:button", "Activate"); iconName: "list-activate"; enabled: base.currentItem != null && base.currentItem.id != Cura.MachineManager.activeMaterialId onClicked: Cura.MachineManager.setActiveMachine(base.currentItem.id) }, Button { text: catalog.i18nc("@action:button", "Add"); iconName: "list-add"; onClicked: Printer.requestAddPrinter() }, Button { text: catalog.i18nc("@action:button", "Remove"); iconName: "list-remove"; enabled: base.currentItem != null && model.rowCount() > 1 onClicked: confirmDialog.open(); }, Button { text: catalog.i18nc("@action:button", "Rename"); iconName: "edit-rename"; enabled: base.currentItem != null onClicked: renameDialog.open(); } ] Item { visible: base.currentItem != null anchors.fill: parent Label { id: machineName text: base.currentItem && base.currentItem.name ? base.currentItem.name : "" font: UM.Theme.getFont("large") width: parent.width elide: Text.ElideRight } Flow { id: machineActions visible: currentItem && currentItem.id == Cura.MachineManager.activeMachineId anchors.left: parent.left anchors.right: parent.right anchors.top: machineName.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height Repeater { id: machineActionRepeater model: base.currentItem ? Cura.MachineActionManager.getSupportedActions(Cura.MachineManager.getDefinitionByMachineId(base.currentItem.id)) : null Button { text: machineActionRepeater.model[index].label onClicked: { actionDialog.content = machineActionRepeater.model[index].displayItem; machineActionRepeater.model[index].displayItem.reset(); actionDialog.title = machineActionRepeater.model[index].label; actionDialog.show(); } } } } UM.Dialog { id: actionDialog property var content minimumWidth: 350 * Screen.devicePixelRatio; minimumHeight: 350 * Screen.devicePixelRatio; onContentChanged: { contents = content; content.onCompleted.connect(hide) content.dialog = actionDialog } rightButtons: Button { text: catalog.i18nc("@action:button", "Close") iconName: "dialog-close" onClicked: actionDialog.reject() } } Grid { id: machineInfo anchors.top: machineActions.visible ? machineActions.bottom : machineActions.anchors.top anchors.topMargin: UM.Theme.getSize("default_margin").height anchors.left: parent.left anchors.right: parent.right spacing: UM.Theme.getSize("default_margin").height rowSpacing: UM.Theme.getSize("default_lining").height columns: 2 visible: base.currentItem property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property var connectedPrinter: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands Label { text: catalog.i18nc("@label", "Printer type:") visible: base.currentItem && "definition_name" in base.currentItem.metadata } Label { text: (base.currentItem && "definition_name" in base.currentItem.metadata) ? base.currentItem.metadata.definition_name : "" } Label { text: catalog.i18nc("@label", "Connection:") visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId } Label { width: parent.width * 0.7 text: machineInfo.printerConnected ? machineInfo.connectedPrinter.connectionText : catalog.i18nc("@info:status", "The printer is not connected.") visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId wrapMode: Text.WordWrap } Label { text: catalog.i18nc("@label", "State:") visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId && machineInfo.printerAcceptsCommands } Label { width: parent.width * 0.7 text: { if(!machineInfo.printerConnected || !machineInfo.printerAcceptsCommands) { return ""; } switch(Cura.MachineManager.printerOutputDevices[0].jobState) { case "printing": return catalog.i18nc("@label:MonitorStatus", "Printing..."); case "paused": return catalog.i18nc("@label:MonitorStatus", "Paused"); case "pre_print": return catalog.i18nc("@label:MonitorStatus", "Preparing..."); case "wait_cleanup": return catalog.i18nc("@label:MonitorStatus", "Waiting for someone to clear the build plate"); case "error": return printerOutputDevice.errorText; case "maintenance": return catalog.i18nc("@label:MonitorStatus", "In maintenance. Please check the printer"); case "abort": // note sure if this jobState actually occurs in the wild return catalog.i18nc("@label:MonitorStatus", "Aborting print..."); case "ready": // ready to print or getting ready case "": // ready to print or getting ready return catalog.i18nc("@label:MonitorStatus", "Waiting for a printjob"); } } visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId && machineInfo.printerAcceptsCommands wrapMode: Text.WordWrap } } Column { id: additionalComponentsColumn anchors.left: parent.left anchors.right: parent.right anchors.top: machineInfo.visible ? machineInfo.bottom : machineInfo.anchors.top anchors.topMargin: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("default_margin").width visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId Component.onCompleted: { for (var component in Printer.additionalComponents["machinesDetailPane"]) { Printer.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn } } } Connections { target: Printer onAdditionalComponentsChanged: { if(areaId == "machinesDetailPane") { for (var component in Printer.additionalComponents["machinesDetailPane"]) { Printer.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn } } } } UM.I18nCatalog { id: catalog; name: "uranium"; } UM.ConfirmRemoveDialog { id: confirmDialog; object: base.currentItem && base.currentItem.name ? base.currentItem.name : ""; onYes: { Cura.MachineManager.removeMachine(base.currentItem.id); if(!base.currentItem) { objectList.currentIndex = activeMachineIndex() } //Force updating currentItem and the details panel objectList.onCurrentIndexChanged() } } UM.RenameDialog { id: renameDialog; object: base.currentItem && base.currentItem.name ? base.currentItem.name : ""; onAccepted: { Cura.MachineManager.renameMachine(base.currentItem.id, newName.trim()); //Force updating currentItem and the details panel objectList.onCurrentIndexChanged() } } Connections { target: Cura.MachineManager onGlobalContainerChanged: { objectList.currentIndex = activeMachineIndex() objectList.onCurrentIndexChanged() } } } }