mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-03 01:04:35 +08:00
112 lines
4.4 KiB
Python
112 lines
4.4 KiB
Python
from UM.Qt.ListModel import ListModel
|
|
|
|
from PyQt5.QtCore import pyqtSlot, Qt
|
|
from UM.Application import Application
|
|
from cura.Settings.ExtruderManager import ExtruderManager
|
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
|
from UM.i18n import i18nCatalog
|
|
|
|
import os
|
|
|
|
class UserChangesModel(ListModel):
|
|
KeyRole = Qt.UserRole + 1
|
|
LabelRole = Qt.UserRole + 2
|
|
ExtruderRole = Qt.UserRole +3
|
|
OriginalValueRole = Qt.UserRole + 4
|
|
UserValueRole = Qt.UserRole + 6
|
|
CategoryRole = Qt.UserRole + 7
|
|
|
|
def __init__(self, parent = None):
|
|
super().__init__(parent = parent)
|
|
self.addRoleName(self.KeyRole, "key")
|
|
self.addRoleName(self.LabelRole, "label")
|
|
self.addRoleName(self.ExtruderRole, "extruder")
|
|
self.addRoleName(self.OriginalValueRole, "original_value")
|
|
self.addRoleName(self.UserValueRole, "user_value")
|
|
self.addRoleName(self.CategoryRole, "category")
|
|
|
|
Application.getInstance().globalContainerStackChanged.connect(self._update)
|
|
self._i18n_catalog = None
|
|
|
|
self._update()
|
|
|
|
@pyqtSlot()
|
|
def forceUpdate(self):
|
|
self._update()
|
|
|
|
def _update(self):
|
|
items = []
|
|
global_stack = Application.getInstance().getGlobalContainerStack()
|
|
stacks = ExtruderManager.getInstance().getUsedExtruderStacks()
|
|
|
|
# Ensure that the global stack is in the list of stacks.
|
|
if global_stack.getProperty("machine_extruder_count", "value") > 1:
|
|
stacks.append(global_stack)
|
|
|
|
# Check if the definition container has a translation file and ensure it's loaded.
|
|
definition = global_stack.getBottom()
|
|
|
|
definition_suffix = ContainerRegistry.getMimeTypeForContainer(type(definition)).preferredSuffix
|
|
catalog = i18nCatalog(os.path.basename(definition.getId() + "." + definition_suffix))
|
|
|
|
if catalog.hasTranslationLoaded():
|
|
self._i18n_catalog = catalog
|
|
|
|
for file_name in definition.getInheritedFiles():
|
|
catalog = i18nCatalog(os.path.basename(file_name))
|
|
if catalog.hasTranslationLoaded():
|
|
self._i18n_catalog = catalog
|
|
|
|
for stack in stacks:
|
|
# Make a list of all containers in the stack.
|
|
containers = []
|
|
latest_stack = stack
|
|
while latest_stack:
|
|
containers.extend(latest_stack.getContainers())
|
|
latest_stack = latest_stack.getNextStack()
|
|
|
|
# Drop the user container.
|
|
user_changes = containers.pop(0)
|
|
|
|
for setting_key in user_changes.getAllKeys():
|
|
original_value = None
|
|
|
|
# Find the category of the instance by moving up until we find a category.
|
|
category = user_changes.getInstance(setting_key).definition
|
|
while category.type != "category":
|
|
category = category.parent
|
|
|
|
# Handle translation (and fallback if we weren't able to find any translation files.
|
|
if self._i18n_catalog:
|
|
category_label = self._i18n_catalog.i18nc(category.key + " label", category.label)
|
|
else:
|
|
category_label = category.label
|
|
|
|
if self._i18n_catalog:
|
|
label = self._i18n_catalog.i18nc(setting_key + " label", stack.getProperty(setting_key, "label"))
|
|
else:
|
|
label = stack.getProperty(setting_key, "label")
|
|
|
|
for container in containers:
|
|
if stack == global_stack:
|
|
resolve = global_stack.getProperty(setting_key, "resolve")
|
|
if resolve is not None:
|
|
original_value = resolve
|
|
break
|
|
|
|
original_value = container.getProperty(setting_key, "value")
|
|
if original_value is not None:
|
|
break
|
|
|
|
item_to_add = {"key": setting_key,
|
|
"label": label,
|
|
"user_value": user_changes.getProperty(setting_key, "value"),
|
|
"original_value": original_value,
|
|
"extruder": "",
|
|
"category": category_label}
|
|
|
|
if stack != global_stack:
|
|
item_to_add["extruder"] = stack.getName()
|
|
|
|
items.append(item_to_add)
|
|
self.setItems(items) |