mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-09-28 15:13:13 +08:00
Fix profile manager to support not supported custom profiles
CURA-4796 Profile manager should be able to show custom profiles that are based on the not supported profile correctly.
This commit is contained in:
parent
1d104f367d
commit
a3c2635648
@ -805,6 +805,7 @@ class CuraApplication(QtApplication):
|
|||||||
|
|
||||||
qmlRegisterUncreatableType(CuraApplication, "Cura", 1, 0, "ResourceTypes", "Just an Enum type")
|
qmlRegisterUncreatableType(CuraApplication, "Cura", 1, 0, "ResourceTypes", "Just an Enum type")
|
||||||
|
|
||||||
|
qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer")
|
||||||
qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel")
|
qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel")
|
||||||
qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
||||||
qmlRegisterSingletonType(ProfilesModel, "Cura", 1, 0, "ProfilesModel", ProfilesModel.createProfilesModel)
|
qmlRegisterSingletonType(ProfilesModel, "Cura", 1, 0, "ProfilesModel", ProfilesModel.createProfilesModel)
|
||||||
|
@ -45,4 +45,4 @@ class QualityAndUserProfilesModel(ProfilesModel):
|
|||||||
for q in quality_list:
|
for q in quality_list:
|
||||||
if q.getId() != "empty_quality":
|
if q.getId() != "empty_quality":
|
||||||
result[q.getId()] = q
|
result[q.getId()] = q
|
||||||
return result, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet.
|
return result, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet.
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
# Copyright (c) 2017 Ultimaker B.V.
|
# Copyright (c) 2017 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
import collections
|
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
|
||||||
|
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
@ -42,6 +40,8 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
|||||||
self.addRoleName(self.UserValueRole, "user_value")
|
self.addRoleName(self.UserValueRole, "user_value")
|
||||||
self.addRoleName(self.CategoryRole, "category")
|
self.addRoleName(self.CategoryRole, "category")
|
||||||
|
|
||||||
|
self._empty_quality = self._container_registry.findInstanceContainers(id = "empty_quality")[0]
|
||||||
|
|
||||||
def setExtruderId(self, extruder_id):
|
def setExtruderId(self, extruder_id):
|
||||||
if extruder_id != self._extruder_id:
|
if extruder_id != self._extruder_id:
|
||||||
self._extruder_id = extruder_id
|
self._extruder_id = extruder_id
|
||||||
@ -107,77 +107,87 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
|||||||
else:
|
else:
|
||||||
quality_changes_container = containers[0]
|
quality_changes_container = containers[0]
|
||||||
|
|
||||||
criteria = {
|
if quality_changes_container.getMetaDataEntry("quality_type") == "not_supported":
|
||||||
"type": "quality",
|
quality_container = self._empty_quality
|
||||||
"quality_type": quality_changes_container.getMetaDataEntry("quality_type"),
|
else:
|
||||||
"definition": quality_changes_container.getDefinition().getId()
|
criteria = {
|
||||||
}
|
"type": "quality",
|
||||||
|
"quality_type": quality_changes_container.getMetaDataEntry("quality_type"),
|
||||||
|
"definition": quality_changes_container.getDefinition().getId()
|
||||||
|
}
|
||||||
|
|
||||||
quality_container = self._container_registry.findInstanceContainers(**criteria)
|
quality_container = self._container_registry.findInstanceContainers(**criteria)
|
||||||
if not quality_container:
|
if not quality_container:
|
||||||
Logger.log("w", "Could not find a quality container matching quality changes %s", quality_changes_container.getId())
|
Logger.log("w", "Could not find a quality container matching quality changes %s", quality_changes_container.getId())
|
||||||
return
|
return
|
||||||
quality_container = quality_container[0]
|
|
||||||
|
quality_container = quality_container[0]
|
||||||
|
|
||||||
quality_type = quality_container.getMetaDataEntry("quality_type")
|
quality_type = quality_container.getMetaDataEntry("quality_type")
|
||||||
definition_id = Application.getInstance().getMachineManager().getQualityDefinitionId(quality_container.getDefinition())
|
|
||||||
definition = quality_container.getDefinition()
|
|
||||||
|
|
||||||
# Check if the definition container has a translation file.
|
if quality_type == "not_supported":
|
||||||
definition_suffix = ContainerRegistry.getMimeTypeForContainer(type(definition)).preferredSuffix
|
containers = []
|
||||||
catalog = i18nCatalog(os.path.basename(definition_id + "." + definition_suffix))
|
else:
|
||||||
if catalog.hasTranslationLoaded():
|
definition_id = Application.getInstance().getMachineManager().getQualityDefinitionId(quality_container.getDefinition())
|
||||||
self._i18n_catalog = catalog
|
definition = quality_container.getDefinition()
|
||||||
|
|
||||||
for file_name in quality_container.getDefinition().getInheritedFiles():
|
# Check if the definition container has a translation file.
|
||||||
catalog = i18nCatalog(os.path.basename(file_name))
|
definition_suffix = ContainerRegistry.getMimeTypeForContainer(type(definition)).preferredSuffix
|
||||||
|
catalog = i18nCatalog(os.path.basename(definition_id + "." + definition_suffix))
|
||||||
if catalog.hasTranslationLoaded():
|
if catalog.hasTranslationLoaded():
|
||||||
self._i18n_catalog = catalog
|
self._i18n_catalog = catalog
|
||||||
|
|
||||||
criteria = {"type": "quality", "quality_type": quality_type, "definition": definition_id}
|
for file_name in quality_container.getDefinition().getInheritedFiles():
|
||||||
|
catalog = i18nCatalog(os.path.basename(file_name))
|
||||||
|
if catalog.hasTranslationLoaded():
|
||||||
|
self._i18n_catalog = catalog
|
||||||
|
|
||||||
if self._material_id and self._material_id != "empty_material":
|
criteria = {"type": "quality", "quality_type": quality_type, "definition": definition_id}
|
||||||
criteria["material"] = self._material_id
|
|
||||||
|
|
||||||
criteria["extruder"] = self._extruder_id
|
if self._material_id and self._material_id != "empty_material":
|
||||||
|
criteria["material"] = self._material_id
|
||||||
|
|
||||||
containers = self._container_registry.findInstanceContainers(**criteria)
|
criteria["extruder"] = self._extruder_id
|
||||||
if not containers:
|
|
||||||
# Try again, this time without extruder
|
|
||||||
new_criteria = criteria.copy()
|
|
||||||
new_criteria.pop("extruder")
|
|
||||||
containers = self._container_registry.findInstanceContainers(**new_criteria)
|
|
||||||
|
|
||||||
if not containers and "material" in criteria:
|
|
||||||
# Try again, this time without material
|
|
||||||
criteria.pop("material", None)
|
|
||||||
containers = self._container_registry.findInstanceContainers(**criteria)
|
containers = self._container_registry.findInstanceContainers(**criteria)
|
||||||
|
if not containers:
|
||||||
|
# Try again, this time without extruder
|
||||||
|
new_criteria = criteria.copy()
|
||||||
|
new_criteria.pop("extruder")
|
||||||
|
containers = self._container_registry.findInstanceContainers(**new_criteria)
|
||||||
|
|
||||||
if not containers:
|
if not containers and "material" in criteria:
|
||||||
# Try again, this time without material or extruder
|
# Try again, this time without material
|
||||||
criteria.pop("extruder") # "material" has already been popped
|
criteria.pop("material", None)
|
||||||
containers = self._container_registry.findInstanceContainers(**criteria)
|
containers = self._container_registry.findInstanceContainers(**criteria)
|
||||||
|
|
||||||
if not containers:
|
if not containers:
|
||||||
Logger.log("w", "Could not find any quality containers matching the search criteria %s" % str(criteria))
|
# Try again, this time without material or extruder
|
||||||
return
|
criteria.pop("extruder") # "material" has already been popped
|
||||||
|
containers = self._container_registry.findInstanceContainers(**criteria)
|
||||||
|
|
||||||
|
if not containers:
|
||||||
|
Logger.log("w", "Could not find any quality containers matching the search criteria %s" % str(criteria))
|
||||||
|
return
|
||||||
|
|
||||||
if quality_changes_container:
|
if quality_changes_container:
|
||||||
criteria = {"type": "quality_changes", "quality_type": quality_type, "definition": definition_id, "name": quality_changes_container.getName()}
|
if quality_type == "not_supported":
|
||||||
if self._extruder_definition_id != "":
|
criteria = {"type": "quality_changes", "quality_type": quality_type, "name": quality_changes_container.getName()}
|
||||||
extruder_definitions = self._container_registry.findDefinitionContainers(id = self._extruder_definition_id)
|
|
||||||
if extruder_definitions:
|
|
||||||
criteria["extruder"] = Application.getInstance().getMachineManager().getQualityDefinitionId(extruder_definitions[0])
|
|
||||||
criteria["name"] = quality_changes_container.getName()
|
|
||||||
else:
|
else:
|
||||||
criteria["extruder"] = None
|
criteria = {"type": "quality_changes", "quality_type": quality_type, "definition": definition_id, "name": quality_changes_container.getName()}
|
||||||
|
if self._extruder_definition_id != "":
|
||||||
|
extruder_definitions = self._container_registry.findDefinitionContainers(id = self._extruder_definition_id)
|
||||||
|
if extruder_definitions:
|
||||||
|
criteria["extruder"] = Application.getInstance().getMachineManager().getQualityDefinitionId(extruder_definitions[0])
|
||||||
|
criteria["name"] = quality_changes_container.getName()
|
||||||
|
else:
|
||||||
|
criteria["extruder"] = None
|
||||||
|
|
||||||
changes = self._container_registry.findInstanceContainers(**criteria)
|
changes = self._container_registry.findInstanceContainers(**criteria)
|
||||||
if changes:
|
if changes:
|
||||||
containers.extend(changes)
|
containers.extend(changes)
|
||||||
|
|
||||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||||
is_multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
|
||||||
|
|
||||||
current_category = ""
|
current_category = ""
|
||||||
for definition in definition_container.findDefinitions():
|
for definition in definition_container.findDefinitions():
|
||||||
@ -213,15 +223,14 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
|||||||
if profile_value is None and user_value is None:
|
if profile_value is None and user_value is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if is_multi_extrusion:
|
settable_per_extruder = global_container_stack.getProperty(definition.key, "settable_per_extruder")
|
||||||
settable_per_extruder = global_container_stack.getProperty(definition.key, "settable_per_extruder")
|
# If a setting is not settable per extruder (global) and we're looking at an extruder tab, don't show this value.
|
||||||
# If a setting is not settable per extruder (global) and we're looking at an extruder tab, don't show this value.
|
if self._extruder_id != "" and not settable_per_extruder:
|
||||||
if self._extruder_id != "" and not settable_per_extruder:
|
continue
|
||||||
continue
|
|
||||||
|
|
||||||
# If a setting is settable per extruder (not global) and we're looking at global tab, don't show this value.
|
# If a setting is settable per extruder (not global) and we're looking at global tab, don't show this value.
|
||||||
if self._extruder_id == "" and settable_per_extruder:
|
if self._extruder_id == "" and settable_per_extruder:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
label = definition.label
|
label = definition.label
|
||||||
if self._i18n_catalog:
|
if self._i18n_catalog:
|
||||||
|
@ -213,8 +213,8 @@ UM.ManagementPage
|
|||||||
ProfileTab
|
ProfileTab
|
||||||
{
|
{
|
||||||
title: catalog.i18nc("@title:tab", "Global Settings");
|
title: catalog.i18nc("@title:tab", "Global Settings");
|
||||||
quality: base.currentItem != null ? base.currentItem.id : "";
|
quality: Cura.MachineManager.activeMachine.qualityChanges.id
|
||||||
material: Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeMachineId]
|
material: Cura.MachineManager.activeMachine.material.id
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater
|
Repeater
|
||||||
|
Loading…
x
Reference in New Issue
Block a user