diff --git a/cura/Machines/Models/CompatibleMachineModel.py b/cura/Machines/Models/CompatibleMachineModel.py index a0a6fd8bb2..c87245e495 100644 --- a/cura/Machines/Models/CompatibleMachineModel.py +++ b/cura/Machines/Models/CompatibleMachineModel.py @@ -3,16 +3,15 @@ # TODO?: documentation -from typing import Optional +from typing import Optional, Dict -from PyQt6.QtCore import Qt, QTimer, QObject, pyqtSlot, pyqtProperty, pyqtSignal +from PyQt6.QtCore import Qt, QObject, pyqtSlot, pyqtProperty, pyqtSignal from UM.Qt.ListModel import ListModel from UM.Settings.ContainerStack import ContainerStack from UM.i18n import i18nCatalog from UM.Util import parseBool -from cura.PrinterOutput.PrinterOutputDevice import ConnectionType from cura.Settings.CuraContainerRegistry import CuraContainerRegistry @@ -64,10 +63,19 @@ class CompatibleMachineModel(ListModel): continue self.addItem(container_stack) - def addItem(self, container_stack: ContainerStack, machine_count: int = 0) -> None: + def addItem(self, container_stack: ContainerStack) -> None: extruders = CuraContainerRegistry.getInstance().findContainerStacks(type="extruder_train", machine=container_stack.getId()) self.appendItem({ "name": container_stack.getName(), "id": container_stack.getId(), - "extruders": [extruder.getMetaData().copy() for extruder in extruders] + "extruders": [self.getExtruderModel(extruder) for extruder in extruders] }) + + def getExtruderModel(self, extruders: ContainerStack) -> Dict: + # Temp Dummy Data + extruder_model = { + "core": "AA 0.4", + "materials": [{"name": "Ultimaker Blue", "color": "blue"}, {"name": "Ultimaker Red", "color": "red"}, {"name": "Ultimaker Orange", "color": "orange"}] + } + return extruder_model + diff --git a/resources/qml/Dialogs/ChoosePrinterDialog.qml b/resources/qml/Dialogs/ChoosePrinterDialog.qml index cddf38d347..2bfdc79b23 100644 --- a/resources/qml/Dialogs/ChoosePrinterDialog.qml +++ b/resources/qml/Dialogs/ChoosePrinterDialog.qml @@ -3,6 +3,7 @@ import QtQuick 2.2 import QtQuick.Controls 2.9 +import QtQuick.Layouts 2.10 import UM 1.5 as UM import Cura 1.0 as Cura @@ -11,23 +12,31 @@ UM.Dialog { id: base - property string machine_id_filter: "" + backgroundColor: UM.Theme.getColor("background_2") - Column + property string machine_id_filter: "" + ScrollView { anchors.fill: parent - - Repeater + Column { - id: contents + anchors.fill: parent + spacing: UM.Theme.getSize("default_margin").height - model: Cura.CompatibleMachineModel + Repeater { - filter: machine_id_filter - } - delegate: UM.Label - { - text: model.name + id: contents + + model: Cura.CompatibleMachineModel + { + filter: machine_id_filter + } + + delegate: Cura.PrintSelectorCard + { + name: model.name + extruders: model.extruders + } } } } diff --git a/resources/qml/PrinterSelector/PrintSelectorCard.qml b/resources/qml/PrinterSelector/PrintSelectorCard.qml new file mode 100644 index 0000000000..98927040f0 --- /dev/null +++ b/resources/qml/PrinterSelector/PrintSelectorCard.qml @@ -0,0 +1,134 @@ +import QtQuick 2.2 +import QtQuick.Controls 2.9 +import QtQuick.Layouts 2.10 + +import UM 1.5 as UM +import Cura 1.0 as Cura + +Rectangle { + property alias name: printerTitle.text + property var extruders + + width: parent.width + height: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height + + color: UM.Theme.getColor("background_1") + border.color: UM.Theme.getColor("border_main") + border.width: UM.Theme.getSize("default_lining").width + + RowLayout + { + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: UM.Theme.getSize("default_margin").width + + Cura.IconWithText + { + id: printerTitle + + Layout.preferredWidth: parent.width / 3 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop + Layout.fillHeight: false + + source: UM.Theme.getIcon("Printer") + spacing: UM.Theme.getSize("thin_margin").width + iconSize: UM.Theme.getSize("medium_button_icon").width + font: UM.Theme.getFont("medium_bold") + } + + ColumnLayout + { + id: extruderInformation + Layout.fillWidth: true + Layout.preferredWidth: parent.width / 2 + Layout.alignment: Qt.AlignTop + spacing: UM.Theme.getSize("default_margin").width + + Repeater + { + model: extruders + + Item + { + height: childrenRect.height + + Cura.ExtruderIcon + { + id: extruderIcon + anchors.top: parent.top + anchors.left: parent.left + materialColor: modelData.materials.length == 1 ? modelData.materials[0].color : "white" + iconSize: UM.Theme.getSize("medium_button_icon").width + } + + UM.Label + { + id: extruderCore + anchors.verticalCenter: extruderIcon.verticalCenter + anchors.left: extruderIcon.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + text: modelData.core + font: UM.Theme.getFont("default_bold") + } + + UM.Label + { + id: singleMaterialText + anchors.left: extruderCore.right + anchors.verticalCenter: extruderCore.verticalCenter + text: modelData.materials.length == 1 ? modelDatamaterials[0].name : "test" + visible: modelData.materials.length == 1 + } + + ColumnLayout + { + id: multiMaterialText + anchors.top: extruderCore.bottom + anchors.left: extruderCore.left + anchors.topMargin: UM.Theme.getSize("narrow_margin").height + Repeater + { + model: modelData.materials + visible: modelData.materials.length > 1 + UM.Label + { + text: modelData.name + } + } + } + } + } + } + + Button + { + id: PrintButton + + implicitWidth: UM.Theme.getSize("medium_button").width + implicitHeight: implicitWidth + Layout.alignment: Qt.AlignTop + padding: 0 + + background: Rectangle + { + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("border_accent_1") + color: control.hovered ? UM.Theme.getColor("toolbar_button_hover"): UM.Theme.getColor("background_1") + } + + contentItem: Item + { + UM.ColorImage + { + anchors.centerIn: parent + source: UM.Theme.getIcon("Printer") + color: UM.Theme.getColor("border_accent_1") + width: UM.Theme.getSize("small_button_icon").width + height: width + } + } + } + } +} \ No newline at end of file diff --git a/resources/qml/qmldir b/resources/qml/qmldir index 6ec3ca91c8..d5184f1d8c 100644 --- a/resources/qml/qmldir +++ b/resources/qml/qmldir @@ -17,6 +17,7 @@ PrinterTypeLabel 1.0 PrinterTypeLabel.qml ViewsSelector 1.0 ViewsSelector.qml SettingView 1.0 SettingView.qml ProfileMenu 1.0 ProfileMenu.qml +PrintSelectorCard 1.0 PrintSelectorCard.qml # Cura/WelcomePages