12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # Copyright (c) 2024 Ultimaker B.V.
- # Cura is released under the terms of the LGPLv3 or higher.
- from PyQt6.QtCore import Qt, pyqtSignal
- from UM import i18nCatalog
- from UM.Logger import Logger
- from UM.Settings.SettingDefinition import SettingDefinition
- from UM.Qt.ListModel import ListModel
- class SpecificSettingsModel(ListModel):
- CategoryRole = Qt.ItemDataRole.UserRole + 1
- LabelRole = Qt.ItemDataRole.UserRole + 2
- ValueRole = Qt.ItemDataRole.UserRole + 3
- def __init__(self, parent = None):
- super().__init__(parent = parent)
- self.addRoleName(self.CategoryRole, "category")
- self.addRoleName(self.LabelRole, "label")
- self.addRoleName(self.ValueRole, "value")
- self._i18n_catalog = i18nCatalog("cura")
- self._update()
- modelChanged = pyqtSignal()
- def addSettingsFromStack(self, stack, category, settings):
- for setting, value in settings.items():
- unit = stack.getProperty(setting, "unit")
- setting_type = stack.getProperty(setting, "type")
- if setting_type is not None:
- # This is not very good looking, but will do for now
- value = str(SettingDefinition.settingValueToString(setting_type, value))
- if unit:
- value += " " + str(unit)
- if setting_type == "enum":
- options = stack.getProperty(setting, "options")
- msgctxt = f"{str(setting)} option {str(value)}"
- msgid = options[stack.getProperty(setting, "value")]
- value = self._i18n_catalog.i18nc(msgctxt, msgid)
- else:
- value = str(value)
- self.appendItem({
- "category": category,
- "label": stack.getProperty(setting, "label"),
- "value": value
- })
- self.modelChanged.emit()
- def _update(self):
- Logger.debug(f"Updating {self.__class__.__name__}")
- self.setItems([])
- self.modelChanged.emit()
- return
|