From 34840d42bdb2ef9ba2bd6b60e82ab2a6bc1726ef Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 29 Jul 2016 16:38:27 +0200 Subject: [PATCH 1/3] Sort printers by category instead of by manufacturer Always show Ultimaker on top. CURA-1593 --- resources/qml/AddMachineDialog.qml | 65 ++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/AddMachineDialog.qml index 38221030ea..350435d1ca 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/AddMachineDialog.qml @@ -16,12 +16,23 @@ UM.Dialog { id: base title: catalog.i18nc("@title:window", "Add Printer") - property string activeManufacturer: "Ultimaker"; + property string preferredCategory: "Ultimaker" + property string activeCategory: preferredCategory + + onVisibilityChanged: + { + // Reset selection and machine name + if (visible) { + activeCategory = preferredCategory; + machineList.currentIndex = 0; + machineName.text = getMachineName(); + } + } signal machineAdded(string id) function getMachineName() { - var name = machineList.model.getItem(machineList.currentIndex).name + var name = machineList.model.get(machineList.currentIndex).name return name } @@ -36,16 +47,32 @@ UM.Dialog right: parent.right; bottom: parent.bottom; } + ListView { id: machineList - model: UM.DefinitionContainersModel + model: ListModel { - id: machineDefinitionsModel - filter: {"visible":true} + id: sortedMachineDefinitionsModel + Component.onCompleted: { + // DefinitionContainersModel is sorted alphabetically, but we want the preferred + // category on top so we create a custom-sorted ListModel from it. + var items = []; + for(var i in machineDefinitionsModel.items) { + var item = machineDefinitionsModel.getItem(i); + if (item["category"] == preferredCategory) + sortedMachineDefinitionsModel.append(item); + else + items.push(item); + } + for(var i in items) { + sortedMachineDefinitionsModel.append(items[i]); + } + } } - section.property: "manufacturer" + + section.property: "category" section.delegate: Button { text: section @@ -76,16 +103,25 @@ UM.Dialog sourceSize.width: width sourceSize.height: width color: palette.windowText - source: base.activeManufacturer == section ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_right") + source: base.activeCategory == section ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_right") } } } onClicked: { - base.activeManufacturer = section; - machineList.currentIndex = machineList.model.find("manufacturer", section) - machineName.text = getMachineName() + base.activeCategory = section; + if (machineList.model.get(machineList.currentIndex).category != section) { + // Find the first machine from this category + for(var i = 0; i < sortedMachineDefinitionsModel.count; i++) { + var item = sortedMachineDefinitionsModel.get(i); + if (item.category == section) { + machineList.currentIndex = i; + break; + } + } + } + machineName.text = getMachineName(); } } @@ -114,7 +150,7 @@ UM.Dialog states: State { name: "collapsed"; - when: base.activeManufacturer != model.manufacturer; + when: base.activeCategory != model.category; PropertyChanges { target: machineButton; opacity: 0; height: 0; } } @@ -161,7 +197,7 @@ UM.Dialog onClicked: { base.visible = false - var item = machineList.model.getItem(machineList.currentIndex); + var item = machineList.model.get(machineList.currentIndex); Cura.MachineManager.addMachine(machineName.text, item.id) base.machineAdded(item.id) // Emit signal that the user added a machine. } @@ -174,6 +210,11 @@ UM.Dialog id: catalog; name: "cura"; } + UM.DefinitionContainersModel + { + id: machineDefinitionsModel + filter: { "visible": true } + } SystemPalette { id: palette } ExclusiveGroup { id: printerGroup; } } From 0a75aa7496bc78439180bb7eb4120ea5401da13a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 29 Jul 2016 16:40:58 +0200 Subject: [PATCH 2/3] Fix category of PrintrBot simple definition CURA-1593 --- resources/definitions/printrbot_simple.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/printrbot_simple.def.json b/resources/definitions/printrbot_simple.def.json index 0116ba6244..a1963fe20e 100644 --- a/resources/definitions/printrbot_simple.def.json +++ b/resources/definitions/printrbot_simple.def.json @@ -7,6 +7,7 @@ "visible": true, "author": "Calvindog717", "manufacturer": "PrintrBot", + "category": "Other", "file_formats": "text/x-gcode" }, From 228f5be35aa3143feff35d96f55d3d5ba15a65f5 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 29 Jul 2016 17:13:30 +0200 Subject: [PATCH 3/3] Fix order of machine actions on manage printers page MachineActionManager now uses lists instead of dicts because dicts don't maintain the order. --- cura/MachineActionManager.py | 10 ++++++---- resources/definitions/ultimaker_original.def.json | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cura/MachineActionManager.py b/cura/MachineActionManager.py index b50bb95e7f..6061a2e49b 100644 --- a/cura/MachineActionManager.py +++ b/cura/MachineActionManager.py @@ -57,9 +57,10 @@ class MachineActionManager(QObject): def addRequiredAction(self, definition_id, action_key): if action_key in self._machine_actions: if definition_id in self._required_actions: - self._required_actions[definition_id] |= {self._machine_actions[action_key]} + if self._machine_actions[action_key] not in self._required_actions[definition_id]: + self._required_actions[definition_id].append(self._machine_actions[action_key]) else: - self._required_actions[definition_id] = {self._machine_actions[action_key]} + self._required_actions[definition_id] = [self._machine_actions[action_key]] else: raise UnknownMachineActionError("Action %s, which is required for %s is not known." % (action_key, definition_id)) @@ -67,9 +68,10 @@ class MachineActionManager(QObject): def addSupportedAction(self, definition_id, action_key): if action_key in self._machine_actions: if definition_id in self._supported_actions: - self._supported_actions[definition_id] |= {self._machine_actions[action_key]} + if self._machine_actions[action_key] not in self._supported_actions[definition_id]: + self._supported_actions[definition_id].append(self._machine_actions[action_key]) else: - self._supported_actions[definition_id] = {self._machine_actions[action_key]} + self._supported_actions[definition_id] = [self._machine_actions[action_key]] else: Logger.log("w", "Unable to add %s to %s, as the action is not recognised", action_key, definition_id) diff --git a/resources/definitions/ultimaker_original.def.json b/resources/definitions/ultimaker_original.def.json index d2174ece80..0815aeee02 100644 --- a/resources/definitions/ultimaker_original.def.json +++ b/resources/definitions/ultimaker_original.def.json @@ -15,7 +15,7 @@ "preferred_material": "*pla*", "preferred_quality": "*normal*", "first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"], - "supported_actions": ["UMOCheckup", "UpgradeFirmware", "BedLevel", "UMOUpgradeSelection"] + "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"] }, "overrides": {