From fda4badab154e4dcf74e7ec3eca26c5800f9205d Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 21 Dec 2017 15:08:46 +0100 Subject: [PATCH] Checked build plates in context menu now actually match the selected item's build plates; changed collapse arrow. CURA-4525 --- cura/BuildPlateModel.py | 16 ++++++++++++++++ resources/qml/Menus/ContextMenu.qml | 7 +++++-- resources/qml/ObjectsList.qml | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cura/BuildPlateModel.py b/cura/BuildPlateModel.py index a29dd65de4..c832a7c522 100644 --- a/cura/BuildPlateModel.py +++ b/cura/BuildPlateModel.py @@ -2,6 +2,7 @@ from UM.Qt.ListModel import ListModel from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode +from UM.Scene.Selection import Selection from UM.Logger import Logger from UM.Application import Application @@ -9,13 +10,17 @@ from UM.Application import Application class BuildPlateModel(ListModel): maxBuildPlateChanged = pyqtSignal() activeBuildPlateChanged = pyqtSignal() + selectionChanged = pyqtSignal() def __init__(self): super().__init__() Application.getInstance().getController().getScene().sceneChanged.connect(self.updateMaxBuildPlate) # it may be a bit inefficient when changing a lot simultaneously + Application.getInstance().getController().getScene().sceneChanged.connect(self._updateSelectedObjectBuildPlateNumbers) + Selection.selectionChanged.connect(self._updateSelectedObjectBuildPlateNumbers) self._max_build_plate = 1 # default self._active_build_plate = -1 + self._selection_build_plates = [] @pyqtSlot(int) def setActiveBuildPlate(self, nr): @@ -60,3 +65,14 @@ class BuildPlateModel(ListModel): @staticmethod def createBuildPlateModel(): return BuildPlateModel() + + def _updateSelectedObjectBuildPlateNumbers(self, *args): + result = set() + for node in Selection.getAllSelectedObjects(): + result.add(node.callDecoration("getBuildPlateNumber")) + self._selection_build_plates = list(result) + self.selectionChanged.emit() + + @pyqtProperty("QVariantList", notify = selectionChanged) + def selectionBuildPlates(self): + return self._selection_build_plates diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index a80de2d8a7..910f0a951a 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -49,7 +49,7 @@ Menu text: Cura.BuildPlateModel.getItem(index).name; onTriggered: CuraActions.setBuildPlateForSelection(Cura.BuildPlateModel.getItem(index).buildPlateNumber); checkable: true - checked: Cura.BuildPlateModel.getItem(index).buildPlateNumber == Cura.BuildPlateModel.activeBuildPlate + checked: Cura.BuildPlateModel.selectionBuildPlates.indexOf(Cura.BuildPlateModel.getItem(index).buildPlateNumber) != -1; visible: UM.Preferences.getValue("cura/use_multi_build_plate") } onObjectAdded: base.insertItem(index, object); @@ -57,7 +57,10 @@ Menu } MenuItem { text: "New build plate"; - onTriggered: CuraActions.setBuildPlateForSelection(Cura.BuildPlateModel.maxBuildPlate + 1); + onTriggered: { + CuraActions.setBuildPlateForSelection(Cura.BuildPlateModel.maxBuildPlate + 1); + checked = false; + } checkable: true checked: false visible: UM.Preferences.getValue("cura/use_multi_build_plate") diff --git a/resources/qml/ObjectsList.qml b/resources/qml/ObjectsList.qml index b67c0c0bec..ac99d6b0ef 100644 --- a/resources/qml/ObjectsList.qml +++ b/resources/qml/ObjectsList.qml @@ -56,7 +56,7 @@ Rectangle sourceSize.width: width sourceSize.height: width color: UM.Theme.getColor("setting_control_text") - source: collapsed ? UM.Theme.getIcon("arrow_top") : UM.Theme.getIcon("arrow_bottom") + source: collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") } label: Label{ } }