Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGhostkeeper <rubend@tutanota.com>2021-10-06 15:22:18 +0300
committerGhostkeeper <rubend@tutanota.com>2021-10-06 15:22:18 +0300
commitb98da6b538c014137d7cff7256ccf7b86dd60e6c (patch)
tree185d191d6bd46a6954891e6ac1b4505a6f993e91 /cura/Machines/Models
parentd16217c674cb7ea379037f9b4487678bf4a20586 (diff)
parent89070237d93b1258eec768df462f32d6f1ccc8b7 (diff)
Merge branch 'master' into CURA-8609_sync_materials_to_printer
Conflicts: cura/Machines/Models/MaterialManagementModel.py -> Both master and my branch added an __init__ function. I merged the two __init__s to do both things that need to be done.
Diffstat (limited to 'cura/Machines/Models')
-rw-r--r--cura/Machines/Models/MaterialManagementModel.py58
1 files changed, 57 insertions, 1 deletions
diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py
index 8f1d421ffb..35b3f077ab 100644
--- a/cura/Machines/Models/MaterialManagementModel.py
+++ b/cura/Machines/Models/MaterialManagementModel.py
@@ -2,7 +2,8 @@
# Cura is released under the terms of the LGPLv3 or higher.
import copy # To duplicate materials.
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QUrl
+from PyQt5.QtGui import QDesktopServices
from typing import Any, Dict, Optional, TYPE_CHECKING
import uuid # To generate new GUIDs for new materials.
import zipfile # To export all materials in a .zip archive.
@@ -22,6 +23,7 @@ if TYPE_CHECKING:
catalog = i18nCatalog("cura")
+
class MaterialManagementModel(QObject):
favoritesChanged = pyqtSignal(str)
"""Triggered when a favorite is added or removed.
@@ -32,6 +34,60 @@ class MaterialManagementModel(QObject):
def __init__(self, parent: QObject = None):
super().__init__(parent)
self._sync_all_dialog = None # type: Optional[QObject]
+ self._checkIfNewMaterialsWereInstalled()
+
+ def _checkIfNewMaterialsWereInstalled(self) -> None:
+ """
+ Checks whether new material packages were installed in the latest startup. If there were, then it shows
+ a message prompting the user to sync the materials with their printers.
+ """
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ for package_id, package_data in application.getPackageManager().getPackagesInstalledOnStartup().items():
+ if package_data["package_info"]["package_type"] == "material":
+ # At least one new material was installed
+ self._showSyncNewMaterialsMessage()
+ break
+
+ def _showSyncNewMaterialsMessage(self) -> None:
+ sync_materials_message = Message(
+ text = catalog.i18nc("@action:button",
+ "Please sync the material profiles with your printers before starting to print."),
+ title = catalog.i18nc("@action:button", "New materials installed"),
+ message_type = Message.MessageType.WARNING,
+ lifetime = 0
+ )
+
+ sync_materials_message.addAction(
+ "sync",
+ name = catalog.i18nc("@action:button", "Sync materials with printers"),
+ icon = "",
+ description = "Sync your newly installed materials with your printers.",
+ button_align = Message.ActionButtonAlignment.ALIGN_RIGHT
+ )
+
+ sync_materials_message.addAction(
+ "learn_more",
+ name = catalog.i18nc("@action:button", "Learn more"),
+ icon = "",
+ description = "Learn more about syncing your newly installed materials with your printers.",
+ button_align = Message.ActionButtonAlignment.ALIGN_LEFT,
+ button_style = Message.ActionButtonStyle.LINK
+ )
+ sync_materials_message.actionTriggered.connect(self._onSyncMaterialsMessageActionTriggered)
+
+ # Show the message only if there are printers that support material export
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ global_stacks = container_registry.findContainerStacks(type = "machine")
+ if any([stack.supportsMaterialExport for stack in global_stacks]):
+ sync_materials_message.show()
+
+ def _onSyncMaterialsMessageActionTriggered(self, sync_message: Message, sync_message_action: str):
+ if sync_message_action == "sync":
+ QDesktopServices.openUrl(QUrl("https://example.com/openSyncAllWindow"))
+ # self.openSyncAllWindow()
+ sync_message.hide()
+ elif sync_message_action == "learn_more":
+ QDesktopServices.openUrl(QUrl("https://support.ultimaker.com/hc/en-us/articles/360013137919?utm_source=cura&utm_medium=software&utm_campaign=sync-material-printer-message"))
@pyqtSlot("QVariant", result = bool)
def canMaterialBeRemoved(self, material_node: "MaterialNode") -> bool: