mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 07:27:29 -06:00
Added reset profiles/materials and uninstall functionality and dialog. CURA-5389
This commit is contained in:
parent
675c5064ed
commit
5af5aa9e35
4 changed files with 154 additions and 18 deletions
|
@ -102,6 +102,9 @@ class Toolbox(QObject, Extension):
|
|||
self._active_package = None # type: Optional[Dict[str, Any]]
|
||||
|
||||
self._dialog = None #type: Optional[QObject]
|
||||
self._confirm_reset_dialog = None #type: Optional[QObject]
|
||||
self._resetUninstallVariables()
|
||||
|
||||
self._restart_required = False #type: bool
|
||||
|
||||
# variables for the license agreement dialog
|
||||
|
@ -130,6 +133,13 @@ class Toolbox(QObject, Extension):
|
|||
filterChanged = pyqtSignal()
|
||||
metadataChanged = pyqtSignal()
|
||||
showLicenseDialog = pyqtSignal()
|
||||
uninstallVariablesChanged = pyqtSignal()
|
||||
|
||||
def _resetUninstallVariables(self):
|
||||
self._package_id_to_uninstall = None
|
||||
self._package_name_to_uninstall = ""
|
||||
self._package_used_materials = []
|
||||
self._package_used_qualities = []
|
||||
|
||||
@pyqtSlot(result = str)
|
||||
def getLicenseDialogPluginName(self) -> str:
|
||||
|
@ -235,7 +245,6 @@ class Toolbox(QObject, Extension):
|
|||
dialog = self._application.createQmlComponent(path, {"toolbox": self})
|
||||
return dialog
|
||||
|
||||
|
||||
def _convertPluginMetadata(self, plugin: Dict[str, Any]) -> Dict[str, Any]:
|
||||
formatted = {
|
||||
"package_id": plugin["id"],
|
||||
|
@ -298,24 +307,57 @@ class Toolbox(QObject, Extension):
|
|||
# If the package is in use, you'll get a confirmation dialog to set everything to default
|
||||
@pyqtSlot(str)
|
||||
def checkPackageUsageAndUninstall(self, plugin_id: str) -> None:
|
||||
print("checkPackageUsageAndUninstall...")
|
||||
package_used_materials, package_used_qualities = self._package_manager.packageUsed(plugin_id)
|
||||
if package_used_materials or package_used_qualities:
|
||||
# Set up "uninstall variables" for resetMaterialsQualitiesAndUninstall
|
||||
self._package_id_to_uninstall = plugin_id
|
||||
package_info = self._package_manager.getInstalledPackageInfo(plugin_id)
|
||||
self._package_name_to_uninstall = package_info.get("display_name", package_info.get("package_id"))
|
||||
self._package_used_materials = package_used_materials
|
||||
self._package_used_qualities = package_used_qualities
|
||||
# Ask change to default material / profile
|
||||
# Cancel: just return
|
||||
# Confirm: change to default material / profile
|
||||
material_manager = CuraApplication.getInstance().getMaterialManager()
|
||||
quality_manager = CuraApplication.getInstance().getQualityManager()
|
||||
machine_manager = CuraApplication.getInstance().getMachineManager()
|
||||
for global_stack, extruder_nr in package_used_materials:
|
||||
default_material_node = material_manager.getDefaultMaterial(global_stack, extruder_nr, global_stack.extruders[extruder_nr].variant.getName())
|
||||
machine_manager.setMaterial(extruder_nr, default_material_node, global_stack = global_stack)
|
||||
for global_stack, extruder_nr in package_used_qualities:
|
||||
default_quality_group = quality_manager.getDefaultQualityType(global_stack)
|
||||
machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack)
|
||||
# Change to default material / profile
|
||||
self.uninstall(plugin_id)
|
||||
return
|
||||
if self._confirm_reset_dialog is None:
|
||||
self._confirm_reset_dialog = self._createDialog("ToolboxConfirmUninstallResetDialog.qml")
|
||||
self.uninstallVariablesChanged.emit()
|
||||
self._confirm_reset_dialog.show()
|
||||
else:
|
||||
# Plain uninstall
|
||||
self.uninstall(plugin_id)
|
||||
|
||||
@pyqtProperty(str, notify = uninstallVariablesChanged)
|
||||
def pluginToUninstall(self):
|
||||
return self._package_name_to_uninstall
|
||||
|
||||
@pyqtProperty(str, notify = uninstallVariablesChanged)
|
||||
def uninstallUsedMaterials(self):
|
||||
return "\n".join(["%s (%s)" % (str(global_stack.getName()), material) for global_stack, extruder_nr, material in self._package_used_materials])
|
||||
|
||||
@pyqtProperty(str, notify = uninstallVariablesChanged)
|
||||
def uninstallUsedQualities(self):
|
||||
return "\n".join(["%s (%s)" % (str(global_stack.getName()), quality) for global_stack, extruder_nr, quality in self._package_used_qualities])
|
||||
|
||||
@pyqtSlot()
|
||||
def closeConfirmResetDialog(self):
|
||||
if self._confirm_reset_dialog is not None:
|
||||
self._confirm_reset_dialog.close()
|
||||
|
||||
## Uses "uninstall variables" to reset qualities and materials, then uninstall
|
||||
# It's used as an action on Confirm reset on Uninstall
|
||||
@pyqtSlot()
|
||||
def resetMaterialsQualitiesAndUninstall(self):
|
||||
application = CuraApplication.getInstance()
|
||||
material_manager = application.getMaterialManager()
|
||||
quality_manager = application.getQualityManager()
|
||||
machine_manager = application.getMachineManager()
|
||||
for global_stack, extruder_nr, _ in self._package_used_materials:
|
||||
default_material_node = material_manager.getDefaultMaterial(global_stack, extruder_nr, global_stack.extruders[extruder_nr].variant.getName())
|
||||
machine_manager.setMaterial(extruder_nr, default_material_node, global_stack = global_stack)
|
||||
for global_stack, extruder_nr, _ in self._package_used_qualities:
|
||||
default_quality_group = quality_manager.getDefaultQualityType(global_stack)
|
||||
machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack)
|
||||
self.uninstall(self._package_id_to_uninstall)
|
||||
self._resetUninstallVariables()
|
||||
self.closeConfirmResetDialog()
|
||||
|
||||
@pyqtSlot(str)
|
||||
def uninstall(self, plugin_id: str) -> None:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue