# Copyright (c) 2015 Ultimaker B.V. # Uranium is released under the terms of the AGPLv3 or higher. from PyQt5.QtCore import Qt, pyqtSlot, QUrl from UM.Application import Application from UM.Qt.ListModel import ListModel from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Scene.SceneNode import SceneNode #from UM.Settings.SettingOverrideDecorator import SettingOverrideDecorator #from UM.Settings.ProfileOverrideDecorator import ProfileOverrideDecorator from . import SettingOverrideModel class PerObjectSettingsModel(ListModel): IdRole = Qt.UserRole + 1 # ID of the node def __init__(self, parent = None): super().__init__(parent) self._scene = Application.getInstance().getController().getScene() self._root = self._scene.getRoot() self.addRoleName(self.IdRole,"id") self._updateModel() @pyqtSlot("quint64", str) def setObjectProfile(self, object_id, profile_name): self.setProperty(self.find("id", object_id), "profile", profile_name) profile = None '''if profile_name != "global": profile = Application.getInstance().getMachineManager().findProfile(profile_name) node = self._scene.findObject(object_id) if profile: if not node.getDecorator(ProfileOverrideDecorator): node.addDecorator(ProfileOverrideDecorator()) node.callDecoration("setProfile", profile) else: if node.getDecorator(ProfileOverrideDecorator): node.removeDecorator(ProfileOverrideDecorator)''' @pyqtSlot("quint64", str) def addOverride(self, object_id, key): machine = Application.getInstance().getMachineManager().getActiveMachineInstance() if not machine: return node = self._scene.findObject(object_id) #if not node.getDecorator(SettingOverrideDecorator): # node.addDecorator(SettingOverrideDecorator()) node.callDecoration("addSetting", key) @pyqtSlot("quint64", str) def removerOverride(self, object_id, key): node = self._scene.findObject(object_id) node.callDecoration("removeSetting", key) #if len(node.callDecoration("getAllSettings")) == 0: # node.removeDecorator(SettingOverrideDecorator) def _updateModel(self): self.clear() for node in BreadthFirstIterator(self._root): if type(node) is not SceneNode or not node.isSelectable(): continue node_stack = node.callDecoration("getStack") if not node_stack: self.appendItem({ "id": id(node) })