123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty
- import UM.Qt.ListModel
- from . import ExtruderManager
- class ExtrudersModel(UM.Qt.ListModel.ListModel):
-
- IdRole = Qt.UserRole + 1
-
- NameRole = Qt.UserRole + 2
-
- ColorRole = Qt.UserRole + 3
-
-
-
-
-
- IndexRole = Qt.UserRole + 4
-
-
- defaultColors = ["#ffc924", "#86ec21", "#22eeee", "#245bff", "#9124ff", "#ff24c8"]
-
-
-
-
- def __init__(self, parent = None):
- super().__init__(parent)
- self.addRoleName(self.IdRole, "id")
- self.addRoleName(self.NameRole, "name")
- self.addRoleName(self.ColorRole, "color")
- self.addRoleName(self.IndexRole, "index")
- self._add_global = False
- self._simple_names = False
- self._active_extruder_stack = None
-
- UM.Application.getInstance().globalContainerStackChanged.connect(self._updateExtruders)
- manager = ExtruderManager.getInstance()
- self._updateExtruders()
- manager.activeExtruderChanged.connect(self._onActiveExtruderChanged)
- self._onActiveExtruderChanged()
- def setAddGlobal(self, add):
- if add != self._add_global:
- self._add_global = add
- self._updateExtruders()
- self.addGlobalChanged.emit()
- addGlobalChanged = pyqtSignal()
- @pyqtProperty(bool, fset = setAddGlobal, notify = addGlobalChanged)
- def addGlobal(self):
- return self._add_global
-
- def setSimpleNames(self, simple_names):
- if simple_names != self._simple_names:
- self._simple_names = simple_names
- self.simpleNamesChanged.emit()
- self._updateExtruders()
-
- simpleNamesChanged = pyqtSignal()
-
- @pyqtProperty(bool, fset = setSimpleNames, notify = simpleNamesChanged)
- def simpleNames(self):
- return self._simple_names
- def _onActiveExtruderChanged(self):
- manager = ExtruderManager.getInstance()
- active_extruder_stack = manager.getActiveExtruderStack()
- if self._active_extruder_stack != active_extruder_stack:
- if self._active_extruder_stack:
- self._active_extruder_stack.containersChanged.disconnect(self._onExtruderStackContainersChanged)
- if active_extruder_stack:
-
- active_extruder_stack.containersChanged.connect(self._onExtruderStackContainersChanged)
- self._active_extruder_stack = active_extruder_stack
- def _onExtruderStackContainersChanged(self, container):
-
- if container.getMetaDataEntry("type") == "material":
- self._updateExtruders()
- modelChanged = pyqtSignal()
-
-
-
- def _updateExtruders(self):
- changed = False
- if self.rowCount() != 0:
- changed = True
- items = []
- global_container_stack = UM.Application.getInstance().getGlobalContainerStack()
- if global_container_stack:
- if self._add_global:
- material = global_container_stack.findContainer({ "type": "material" })
- color = material.getMetaDataEntry("color_code", default = self.defaultColors[0]) if material else self.defaultColors[0]
- item = {
- "id": global_container_stack.getId(),
- "name": "Global",
- "color": color,
- "index": -1
- }
- items.append(item)
- changed = True
- manager = ExtruderManager.getInstance()
- for extruder in manager.getMachineExtruders(global_container_stack.getId()):
- extruder_name = extruder.getName()
- material = extruder.findContainer({ "type": "material" })
- if material and not self._simple_names:
- extruder_name = "%s (%s)" % (material.getName(), extruder_name)
- position = extruder.getMetaDataEntry("position", default = "0")
- try:
- position = int(position)
- except ValueError:
- position = -1
- default_color = self.defaultColors[position] if position >= 0 and position < len(self.defaultColors) else self.defaultColors[0]
- color = material.getMetaDataEntry("color_code", default = default_color) if material else default_color
- item = {
- "id": extruder.getId(),
- "name": extruder_name,
- "color": color,
- "index": position
- }
- items.append(item)
- changed = True
- if changed:
- items.sort(key = lambda i: i["index"])
- self.setItems(items)
- self.modelChanged.emit()
|