diff --git a/cura/Machines/Models/DiscoveredPrintersModel.py b/cura/Machines/Models/DiscoveredPrintersModel.py index aa372a49e8..e6bedbebde 100644 --- a/cura/Machines/Models/DiscoveredPrintersModel.py +++ b/cura/Machines/Models/DiscoveredPrintersModel.py @@ -66,12 +66,23 @@ class DiscoveredPrinter(QObject): @pyqtProperty(bool, notify = machineTypeChanged) def isUnknownMachineType(self) -> bool: - return self.readableMachineType.lower() == "unknown" + return self.readableMachineType == catalog.i18nc("@label", "Unknown") @pyqtProperty(QObject, constant = True) def device(self) -> "NetworkedPrinterOutputDevice": return self._device + @pyqtProperty(bool, constant = True) + def isHostOfGroup(self) -> bool: + return getattr(self._device, "clusterSize", 1) > 0 + + @pyqtProperty(str, constant = True) + def sectionName(self) -> str: + if self.isUnknownMachineType or not self.isHostOfGroup: + return catalog.i18nc("@label", "The printer(s) below cannot be connected because they are part of a group") + else: + return catalog.i18nc("@label", "Available network printers") + # # Discovered printers are all the printers that were found on the network, which provide a more convenient way @@ -90,7 +101,7 @@ class DiscoveredPrintersModel(QObject): @pyqtProperty(list, notify = discoveredPrintersChanged) def discoveredPrinters(self) -> List["DiscoveredPrinter"]: item_list = list(x for x in self._discovered_printer_by_ip_dict.values()) - item_list.sort(key = lambda x: x.device.name) + item_list.sort(key = lambda x: (int(not x.isUnknownMachineType), getattr(x.device, "clusterSize", 1), x.device.name), reverse = True) return item_list def addDiscoveredPrinter(self, ip_address: str, key: str, name: str, create_callback: Callable[[str], None], diff --git a/resources/qml/PrinterSelector/MachineSelectorButton.qml b/resources/qml/PrinterSelector/MachineSelectorButton.qml index 98e2042448..c37823ba82 100644 --- a/resources/qml/PrinterSelector/MachineSelectorButton.qml +++ b/resources/qml/PrinterSelector/MachineSelectorButton.qml @@ -53,7 +53,7 @@ Button verticalCenter: parent.verticalCenter } text: machineSelectorButton.text - color: UM.Theme.getColor("text") + color: enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("small_button_text") font: UM.Theme.getFont("medium") visible: text != "" renderType: Text.NativeRendering diff --git a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml index 924eeb930d..78443385c2 100644 --- a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml +++ b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml @@ -71,6 +71,10 @@ Item anchors.fill: parent model: CuraApplication.getDiscoveredPrintersModel().discoveredPrinters + section.property: "modelData.sectionName" + section.criteria: ViewSection.FullString + section.delegate: sectionHeading + Component.onCompleted: { // Select the first one that's not "unknown" by default. @@ -84,6 +88,23 @@ Item } } + Component + { + id: sectionHeading + + Label + { + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("setting_control").height + text: section + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("small_button_text") + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + } + } + delegate: MachineSelectorButton { text: modelData.device.name @@ -93,7 +114,7 @@ Item anchors.rightMargin: UM.Theme.getSize("default_margin").width outputDevice: modelData.device - enabled: !modelData.isUnknownMachineType + enabled: !modelData.isUnknownMachineType && modelData.isHostOfGroup printerTypeLabelAutoFit: true