From 6367e0763166d7a1d4ed968811bb464cf4d2d6c3 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 23 Mar 2021 22:27:10 +0100 Subject: [PATCH 01/49] Add preference to enable loading multiple objects into a single instance --- cura/SingleInstance.py | 7 +++++-- resources/qml/Preferences/GeneralPage.qml | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/cura/SingleInstance.py b/cura/SingleInstance.py index 6fcf0da6cf..2be1f36e13 100644 --- a/cura/SingleInstance.py +++ b/cura/SingleInstance.py @@ -18,6 +18,8 @@ class SingleInstance: self._single_instance_server = None + self._application.getPreferences().addPreference("cura/single_instance_clear_before_load", True) + # Starts a client that checks for a single instance server and sends the files that need to opened if the server # exists. Returns True if the single instance server is found, otherwise False. def startClient(self) -> bool: @@ -42,8 +44,9 @@ class SingleInstance: # "command" field is required and holds the name of the command to execute. # Other fields depend on the command. - payload = {"command": "clear-all"} - single_instance_socket.write(bytes(json.dumps(payload) + "\n", encoding = "ascii")) + if self._application.getPreferences().getValue("cura/single_instance_clear_before_load"): + payload = {"command": "clear-all"} + single_instance_socket.write(bytes(json.dumps(payload) + "\n", encoding = "ascii")) payload = {"command": "focus"} single_instance_socket.write(bytes(json.dumps(payload) + "\n", encoding = "ascii")) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index c0c443eec2..0c9fd9361a 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -74,6 +74,8 @@ UM.PreferencesPage UM.Preferences.resetPreference("cura/single_instance") singleInstanceCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/single_instance")) + UM.Preferences.resetPreference("cura/single_instance_clear_before_load") + singleInstanceClearBeforeLoadCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/single_instance_clear_before_load")) UM.Preferences.resetPreference("physics/automatic_push_free") pushFreeCheckbox.checked = boolCheck(UM.Preferences.getValue("physics/automatic_push_free")) @@ -578,6 +580,22 @@ UM.PreferencesPage } } + UM.TooltipArea + { + width: childrenRect.width + height: childrenRect.height + text: catalog.i18nc("@info:tooltip","Should the build plate be cleared before loading a new model in the single instance of Cura?") + enabled: singleInstanceCheckbox.checked + + CheckBox + { + id: singleInstanceClearBeforeLoadCheckbox + text: catalog.i18nc("@option:check","Clear buildplate before loading model into the single instance") + checked: boolCheck(UM.Preferences.getValue("cura/single_instance_clear_before_load")) + onCheckedChanged: UM.Preferences.setValue("cura/single_instance_clear_before_load", checked) + } + } + UM.TooltipArea { width: childrenRect.width From 4e89ee0cccabdef3c0ec8209ad9208466eef0633 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 14 Sep 2021 16:05:04 +0200 Subject: [PATCH 02/49] Check against the correct SDK version Since the `self.setLastOutputName` is available in 4.12 (SDK 7.8.0) onwards. CURA-8566 --- plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py b/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py index 82caab7d50..81891ff430 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py @@ -109,8 +109,8 @@ class DigitalFactoryOutputDevice(ProjectOutputDevice): def _onWriteStarted(self, new_name: Optional[str] = None) -> None: self._writing = True - if new_name and Version(ApplicationMetadata.CuraSDKVersion) >= Version("7.7.0"): - # setLastOutputName is only supported sdk version 7.7.0 and up + if new_name and Version(ApplicationMetadata.CuraSDKVersion) >= Version("7.8.0"): + # setLastOutputName is only supported in sdk version 7.8.0 and up self.setLastOutputName(new_name) self.writeStarted.emit(self) From 395aa58a3ff5c97f3eee6eca9b0715b6ce1618d2 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 14 Sep 2021 16:07:23 +0200 Subject: [PATCH 03/49] Revert "Merge branch 'master' of https://github.com/Ultimaker/Cura" This reverts commit 6caa6576106878e9983b48266201d2e32f40ef18, reversing changes made to 4e89ee0cccabdef3c0ec8209ad9208466eef0633. --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7799f93980..2b1cfc37e0 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,6 @@ plugins/CuraCloudPlugin plugins/CuraDrivePlugin plugins/CuraLiveScriptingPlugin plugins/CuraOpenSCADPlugin -plugins/CuraRemoteSupport plugins/CuraPrintProfileCreator plugins/CuraSolidWorksPlugin plugins/CuraVariSlicePlugin From 98eba288850ddbb010aa40e722f7a6f9bcb60486 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Wed, 15 Sep 2021 12:25:13 +0200 Subject: [PATCH 04/49] Revert "Revert "Set the job name whenever the workspaceLoaded is called"" This reverts commit a6a69c249cfc96e19ace64ec01aa7e4fc07a76d1. --- cura/UI/PrintInformation.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py index d6bd336558..852763cbfd 100644 --- a/cura/UI/PrintInformation.py +++ b/cura/UI/PrintInformation.py @@ -67,7 +67,7 @@ class PrintInformation(QObject): self._application.globalContainerStackChanged.connect(self._updateJobName) self._application.globalContainerStackChanged.connect(self.setToZeroPrintInformation) self._application.fileLoaded.connect(self.setBaseName) - self._application.workspaceLoaded.connect(self.setProjectName) + self._application.workspaceLoaded.connect(self._onWorkspaceLoaded) self._application.getMachineManager().rootMaterialChanged.connect(self._onActiveMaterialsChanged) self._application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferencesChanged) @@ -439,3 +439,7 @@ class PrintInformation(QObject): """Listen to scene changes to check if we need to reset the print information""" self.setToZeroPrintInformation(self._active_build_plate) + + def _onWorkspaceLoaded(self, new_name: str) -> None: + """Update the job name whenever a new workspace is loaded.""" + self.setJobName(os.path.splitext(os.path.basename(new_name))[0]) From 87add2c8def1c31ce059d689fb727157c680315c Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Wed, 15 Sep 2021 12:26:18 +0200 Subject: [PATCH 05/49] Revert "Revert "Use optional last output (file) name from output-dev to set project name."" This reverts commit 24ff3692bd5b73828a1c5a58cdd55400cdddad9c. --- cura/UI/PrintInformation.py | 16 ++++++++++++---- .../src/DigitalFactoryOutputDevice.py | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py index 852763cbfd..9640326c91 100644 --- a/cura/UI/PrintInformation.py +++ b/cura/UI/PrintInformation.py @@ -13,6 +13,7 @@ from UM.Qt.Duration import Duration from UM.Scene.SceneNode import SceneNode from UM.i18n import i18nCatalog from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError +from UM.OutputDevice import OutputDevice if TYPE_CHECKING: from cura.CuraApplication import CuraApplication @@ -67,7 +68,8 @@ class PrintInformation(QObject): self._application.globalContainerStackChanged.connect(self._updateJobName) self._application.globalContainerStackChanged.connect(self.setToZeroPrintInformation) self._application.fileLoaded.connect(self.setBaseName) - self._application.workspaceLoaded.connect(self._onWorkspaceLoaded) + self._application.workspaceLoaded.connect(self.setProjectName) + self._application.getOutputDeviceManager().writeStarted.connect(self._onOutputStart) self._application.getMachineManager().rootMaterialChanged.connect(self._onActiveMaterialsChanged) self._application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferencesChanged) @@ -440,6 +442,12 @@ class PrintInformation(QObject): self.setToZeroPrintInformation(self._active_build_plate) - def _onWorkspaceLoaded(self, new_name: str) -> None: - """Update the job name whenever a new workspace is loaded.""" - self.setJobName(os.path.splitext(os.path.basename(new_name))[0]) + def _onOutputStart(self, output_device: OutputDevice) -> None: + """If this is the sort of output 'device' (like local or online file storage, rather than a printer), + the user could have altered the file-name, and thus the project name should be altered as well.""" + new_name = output_device.getLastOutputName() + if new_name is not None: + if len(os.path.dirname(new_name)) > 0: + self.setProjectName(new_name) + else: + self.setJobName(new_name) diff --git a/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py b/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py index 81891ff430..0a10ea034c 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py @@ -111,7 +111,7 @@ class DigitalFactoryOutputDevice(ProjectOutputDevice): self._writing = True if new_name and Version(ApplicationMetadata.CuraSDKVersion) >= Version("7.8.0"): # setLastOutputName is only supported in sdk version 7.8.0 and up - self.setLastOutputName(new_name) + self.setLastOutputName(new_name) # On saving, the user can change the name, this should propagate. self.writeStarted.emit(self) def _onWriteFinished(self) -> None: From 52c224c779eb5214f419e7956db96d53bb752508 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Wed, 15 Sep 2021 12:26:30 +0200 Subject: [PATCH 06/49] Revert "Revert "Only change project name when saving to project files."" This reverts commit 9e2b556ce8f28294f9b44a3d8801af42043d3956. --- cura/UI/PrintInformation.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py index 9640326c91..2bbd12c69f 100644 --- a/cura/UI/PrintInformation.py +++ b/cura/UI/PrintInformation.py @@ -13,7 +13,8 @@ from UM.Qt.Duration import Duration from UM.Scene.SceneNode import SceneNode from UM.i18n import i18nCatalog from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError -from UM.OutputDevice import OutputDevice +from UM.OutputDevice.OutputDevice import OutputDevice +from UM.OutputDevice.ProjectOutputDevice import ProjectOutputDevice if TYPE_CHECKING: from cura.CuraApplication import CuraApplication @@ -445,9 +446,10 @@ class PrintInformation(QObject): def _onOutputStart(self, output_device: OutputDevice) -> None: """If this is the sort of output 'device' (like local or online file storage, rather than a printer), the user could have altered the file-name, and thus the project name should be altered as well.""" - new_name = output_device.getLastOutputName() - if new_name is not None: - if len(os.path.dirname(new_name)) > 0: - self.setProjectName(new_name) - else: - self.setJobName(new_name) + if isinstance(output_device, ProjectOutputDevice): + new_name = output_device.getLastOutputName() + if new_name is not None: + if len(os.path.dirname(new_name)) > 0: + self.setProjectName(new_name) + else: + self.setJobName(new_name) From 6d9978e8f3ca07541096cc36498c3adface76c84 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Wed, 15 Sep 2021 14:37:53 +0200 Subject: [PATCH 07/49] Always set the project name as the one provided by the user There was an inconsistent behavior between saving a project file to disk (where the printer short name was readded after saving) and saving to the DigitalLibrary (where the printer short was NOT added again). This commit fixes that by making sure that whatever the user put as the name of the file, will be the name of the project within Cura. CURA-8566 --- cura/UI/PrintInformation.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py index 2bbd12c69f..2135c6fe81 100644 --- a/cura/UI/PrintInformation.py +++ b/cura/UI/PrintInformation.py @@ -449,7 +449,4 @@ class PrintInformation(QObject): if isinstance(output_device, ProjectOutputDevice): new_name = output_device.getLastOutputName() if new_name is not None: - if len(os.path.dirname(new_name)) > 0: - self.setProjectName(new_name) - else: - self.setJobName(new_name) + self.setJobName(os.path.splitext(os.path.basename(new_name))[0]) From 11b1998156632fc2ebd2b6b93fc2f27ae6bfc3ae Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 15 Sep 2021 16:22:58 +0200 Subject: [PATCH 08/49] Fix single instance CURA-7916 Fixes #3116 --- cura/CuraApplication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index c133657a1f..08861af7c4 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -320,7 +320,7 @@ class CuraApplication(QtApplication): super().initialize() self._preferences.addPreference("cura/single_instance", False) - self._use_single_instance = self._preferences.getValue("cura/single_instance") + self._use_single_instance = self._preferences.getValue("cura/single_instance") or self._cli_args.single_instance self.__sendCommandToSingleInstance() self._initializeSettingDefinitions() From 0a080a1def4773ad2a142430f096ae58f77c9a75 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 17 Sep 2021 15:15:25 +0200 Subject: [PATCH 09/49] Increase SDK version to 7.8.0 We need to check for this new version because of the new functionality needed by the Digital Library plug-in. Contributes to issue CURA-8566. --- cura/ApplicationMetadata.py | 2 +- plugins/UFPReader/plugin.json | 2 +- resources/bundled_packages/cura.json | 214 +++++++++++++-------------- 3 files changed, 109 insertions(+), 109 deletions(-) diff --git a/cura/ApplicationMetadata.py b/cura/ApplicationMetadata.py index ce20255691..70f36619e8 100644 --- a/cura/ApplicationMetadata.py +++ b/cura/ApplicationMetadata.py @@ -13,7 +13,7 @@ DEFAULT_CURA_DEBUG_MODE = False # Each release has a fixed SDK version coupled with it. It doesn't make sense to make it configurable because, for # example Cura 3.2 with SDK version 6.1 will not work. So the SDK version is hard-coded here and left out of the # CuraVersion.py.in template. -CuraSDKVersion = "7.7.0" +CuraSDKVersion = "7.8.0" try: from cura.CuraVersion import CuraAppName # type: ignore diff --git a/plugins/UFPReader/plugin.json b/plugins/UFPReader/plugin.json index be0ea40073..08df39c938 100644 --- a/plugins/UFPReader/plugin.json +++ b/plugins/UFPReader/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for reading Ultimaker Format Packages.", - "supported_sdk_versions": ["7.7.0"], + "supported_sdk_versions": ["7.8.0"], "i18n-catalog": "cura" } \ No newline at end of file diff --git a/resources/bundled_packages/cura.json b/resources/bundled_packages/cura.json index 641a6dca66..f1af8a7a90 100644 --- a/resources/bundled_packages/cura.json +++ b/resources/bundled_packages/cura.json @@ -6,7 +6,7 @@ "display_name": "3MF Reader", "description": "Provides support for reading 3MF files.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -23,7 +23,7 @@ "display_name": "3MF Writer", "description": "Provides support for writing 3MF files.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -40,7 +40,7 @@ "display_name": "AMF Reader", "description": "Provides support for reading AMF files.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "fieldOfView", @@ -57,7 +57,7 @@ "display_name": "Cura Backups", "description": "Backup and restore your configuration.", "package_version": "1.2.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -74,7 +74,7 @@ "display_name": "CuraEngine Backend", "description": "Provides the link to the CuraEngine slicing backend.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -91,7 +91,7 @@ "display_name": "Cura Profile Reader", "description": "Provides support for importing Cura profiles.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -108,7 +108,7 @@ "display_name": "Cura Profile Writer", "description": "Provides support for exporting Cura profiles.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -125,7 +125,7 @@ "display_name": "Ultimaker Digital Library", "description": "Connects to the Digital Library, allowing Cura to open files from and save files to the Digital Library.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -142,7 +142,7 @@ "display_name": "Firmware Update Checker", "description": "Checks for firmware updates.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -159,7 +159,7 @@ "display_name": "Firmware Updater", "description": "Provides a machine actions for updating firmware.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -176,7 +176,7 @@ "display_name": "Compressed G-code Reader", "description": "Reads g-code from a compressed archive.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -193,7 +193,7 @@ "display_name": "Compressed G-code Writer", "description": "Writes g-code to a compressed archive.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -210,7 +210,7 @@ "display_name": "G-Code Profile Reader", "description": "Provides support for importing profiles from g-code files.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -227,7 +227,7 @@ "display_name": "G-Code Reader", "description": "Allows loading and displaying G-code files.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "VictorLarchenko", @@ -244,7 +244,7 @@ "display_name": "G-Code Writer", "description": "Writes g-code to a file.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -261,7 +261,7 @@ "display_name": "Image Reader", "description": "Enables ability to generate printable geometry from 2D image files.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -278,7 +278,7 @@ "display_name": "Legacy Cura Profile Reader", "description": "Provides support for importing profiles from legacy Cura versions.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -295,7 +295,7 @@ "display_name": "Machine Settings Action", "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "fieldOfView", @@ -312,7 +312,7 @@ "display_name": "Model Checker", "description": "Checks models and print configuration for possible printing issues and give suggestions.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -329,7 +329,7 @@ "display_name": "Monitor Stage", "description": "Provides a monitor stage in Cura.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -346,7 +346,7 @@ "display_name": "Per-Object Settings Tool", "description": "Provides the per-model settings.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -363,7 +363,7 @@ "display_name": "Post Processing", "description": "Extension that allows for user created scripts for post processing.", "package_version": "2.2.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -380,7 +380,7 @@ "display_name": "Prepare Stage", "description": "Provides a prepare stage in Cura.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -397,7 +397,7 @@ "display_name": "Preview Stage", "description": "Provides a preview stage in Cura.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -414,7 +414,7 @@ "display_name": "Removable Drive Output Device", "description": "Provides removable drive hotplugging and writing support.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -431,7 +431,7 @@ "display_name": "Sentry Logger", "description": "Logs certain events so that they can be used by the crash reporter", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -448,7 +448,7 @@ "display_name": "Simulation View", "description": "Provides the Simulation view.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -465,7 +465,7 @@ "display_name": "Slice Info", "description": "Submits anonymous slice info. Can be disabled through preferences.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -482,7 +482,7 @@ "display_name": "Solid View", "description": "Provides a normal solid mesh view.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -499,7 +499,7 @@ "display_name": "Support Eraser Tool", "description": "Creates an eraser mesh to block the printing of support in certain places.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -516,7 +516,7 @@ "display_name": "Trimesh Reader", "description": "Provides support for reading model files.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -533,7 +533,7 @@ "display_name": "Toolbox", "description": "Find, manage and install new Cura packages.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -550,7 +550,7 @@ "display_name": "UFP Reader", "description": "Provides support for reading Ultimaker Format Packages.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -567,7 +567,7 @@ "display_name": "UFP Writer", "description": "Provides support for writing Ultimaker Format Packages.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -584,7 +584,7 @@ "display_name": "Ultimaker Machine Actions", "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -601,7 +601,7 @@ "display_name": "UM3 Network Printing", "description": "Manages network connections to Ultimaker 3 printers.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -618,7 +618,7 @@ "display_name": "USB Printing", "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", "package_version": "1.0.2", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -635,7 +635,7 @@ "display_name": "Version Upgrade 2.1 to 2.2", "description": "Upgrades configurations from Cura 2.1 to Cura 2.2.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -652,7 +652,7 @@ "display_name": "Version Upgrade 2.2 to 2.4", "description": "Upgrades configurations from Cura 2.2 to Cura 2.4.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -669,7 +669,7 @@ "display_name": "Version Upgrade 2.5 to 2.6", "description": "Upgrades configurations from Cura 2.5 to Cura 2.6.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -686,7 +686,7 @@ "display_name": "Version Upgrade 2.6 to 2.7", "description": "Upgrades configurations from Cura 2.6 to Cura 2.7.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -703,7 +703,7 @@ "display_name": "Version Upgrade 2.7 to 3.0", "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -720,7 +720,7 @@ "display_name": "Version Upgrade 3.0 to 3.1", "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -737,7 +737,7 @@ "display_name": "Version Upgrade 3.2 to 3.3", "description": "Upgrades configurations from Cura 3.2 to Cura 3.3.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -754,7 +754,7 @@ "display_name": "Version Upgrade 3.3 to 3.4", "description": "Upgrades configurations from Cura 3.3 to Cura 3.4.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -771,7 +771,7 @@ "display_name": "Version Upgrade 3.4 to 3.5", "description": "Upgrades configurations from Cura 3.4 to Cura 3.5.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -788,7 +788,7 @@ "display_name": "Version Upgrade 3.5 to 4.0", "description": "Upgrades configurations from Cura 3.5 to Cura 4.0.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -805,7 +805,7 @@ "display_name": "Version Upgrade 4.0 to 4.1", "description": "Upgrades configurations from Cura 4.0 to Cura 4.1.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -822,7 +822,7 @@ "display_name": "Version Upgrade 4.1 to 4.2", "description": "Upgrades configurations from Cura 4.1 to Cura 4.2.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -839,7 +839,7 @@ "display_name": "Version Upgrade 4.2 to 4.3", "description": "Upgrades configurations from Cura 4.2 to Cura 4.3.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -856,7 +856,7 @@ "display_name": "Version Upgrade 4.3 to 4.4", "description": "Upgrades configurations from Cura 4.3 to Cura 4.4.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -873,7 +873,7 @@ "display_name": "Version Upgrade 4.4 to 4.5", "description": "Upgrades configurations from Cura 4.4 to Cura 4.5.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -890,7 +890,7 @@ "display_name": "Version Upgrade 4.5 to 4.6", "description": "Upgrades configurations from Cura 4.5 to Cura 4.6.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -907,7 +907,7 @@ "display_name": "Version Upgrade 4.6.0 to 4.6.2", "description": "Upgrades configurations from Cura 4.6.0 to Cura 4.6.2.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -924,7 +924,7 @@ "display_name": "Version Upgrade 4.6.2 to 4.7", "description": "Upgrades configurations from Cura 4.6.2 to Cura 4.7.", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -941,7 +941,7 @@ "display_name": "Version Upgrade 4.7.0 to 4.8.0", "description": "Upgrades configurations from Cura 4.7.0 to Cura 4.8.0", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -958,7 +958,7 @@ "display_name": "Version Upgrade 4.8.0 to 4.9.0", "description": "Upgrades configurations from Cura 4.8.0 to Cura 4.9.0", "package_version": "1.0.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -976,7 +976,7 @@ "description": "Upgrades configurations from Cura 4.9 to Cura 4.10", "package_version": "1.0.0", "sdk_version": 7, - "sdk_version_semver": "7.7.0", + "sdk_version_semver": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -993,7 +993,7 @@ "display_name": "X3D Reader", "description": "Provides support for reading X3D files.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "SevaAlekseyev", @@ -1010,7 +1010,7 @@ "display_name": "XML Material Profiles", "description": "Provides capabilities to read and write XML-based material profiles.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -1027,7 +1027,7 @@ "display_name": "X-Ray View", "description": "Provides the X-Ray view.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -1044,7 +1044,7 @@ "display_name": "Generic ABS", "description": "The generic ABS profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1062,7 +1062,7 @@ "display_name": "Generic BAM", "description": "The generic BAM profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1080,7 +1080,7 @@ "display_name": "Generic CFF CPE", "description": "The generic CFF CPE profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1098,7 +1098,7 @@ "display_name": "Generic CFF PA", "description": "The generic CFF PA profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1116,7 +1116,7 @@ "display_name": "Generic CPE", "description": "The generic CPE profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1134,7 +1134,7 @@ "display_name": "Generic CPE+", "description": "The generic CPE+ profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1152,7 +1152,7 @@ "display_name": "Generic GFF CPE", "description": "The generic GFF CPE profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1170,7 +1170,7 @@ "display_name": "Generic GFF PA", "description": "The generic GFF PA profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1188,7 +1188,7 @@ "display_name": "Generic HIPS", "description": "The generic HIPS profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1206,7 +1206,7 @@ "display_name": "Generic Nylon", "description": "The generic Nylon profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1224,7 +1224,7 @@ "display_name": "Generic PC", "description": "The generic PC profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1242,7 +1242,7 @@ "display_name": "Generic PETG", "description": "The generic PETG profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1260,7 +1260,7 @@ "display_name": "Generic PLA", "description": "The generic PLA profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1278,7 +1278,7 @@ "display_name": "Generic PP", "description": "The generic PP profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1296,7 +1296,7 @@ "display_name": "Generic PVA", "description": "The generic PVA profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1314,7 +1314,7 @@ "display_name": "Generic Tough PLA", "description": "The generic Tough PLA profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1332,7 +1332,7 @@ "display_name": "Generic TPU", "description": "The generic TPU profile which other profiles can be based upon.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1350,7 +1350,7 @@ "display_name": "Dagoma Chromatik PLA", "description": "Filament testé et approuvé pour les imprimantes 3D Dagoma. Chromatik est l'idéal pour débuter et suivre les tutoriels premiers pas. Il vous offre qualité et résistance pour chacune de vos impressions.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://dagoma.fr/boutique/filaments.html", "author": { "author_id": "Dagoma", @@ -1367,7 +1367,7 @@ "display_name": "FABtotum ABS", "description": "This material is easy to be extruded but it is not the simplest to use. It is one of the most used in 3D printing to get very well finished objects. It is not sustainable and its smoke can be dangerous if inhaled. The reason to prefer this filament to PLA is mainly because of its precision and mechanical specs. ABS (for plastic) stands for Acrylonitrile Butadiene Styrene and it is a thermoplastic which is widely used in everyday objects. It can be printed with any FFF 3D printer which can get to high temperatures as it must be extruded in a range between 220° and 245°, so it’s compatible with all versions of the FABtotum Personal fabricator.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40", "author": { "author_id": "FABtotum", @@ -1384,7 +1384,7 @@ "display_name": "FABtotum Nylon", "description": "When 3D printing started this material was not listed among the extrudable filaments. It is flexible as well as resistant to tractions. It is well known for its uses in textile but also in industries which require a strong and flexible material. There are different kinds of Nylon: 3D printing mostly uses Nylon 6 and Nylon 6.6, which are the most common. It requires higher temperatures to be printed, so a 3D printer must be able to reach them (around 240°C): the FABtotum, of course, can.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53", "author": { "author_id": "FABtotum", @@ -1401,7 +1401,7 @@ "display_name": "FABtotum PLA", "description": "It is the most common filament used for 3D printing. It is studied to be bio-degradable as it comes from corn starch’s sugar mainly. It is completely made of renewable sources and has no footprint on polluting. PLA stands for PolyLactic Acid and it is a thermoplastic that today is still considered the easiest material to be 3D printed. It can be extruded at lower temperatures: the standard range of FABtotum’s one is between 185° and 195°.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39", "author": { "author_id": "FABtotum", @@ -1418,7 +1418,7 @@ "display_name": "FABtotum TPU Shore 98A", "description": "", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66", "author": { "author_id": "FABtotum", @@ -1435,7 +1435,7 @@ "display_name": "Fiberlogy HD PLA", "description": "With our HD PLA you have many more options. You can use this material in two ways. Choose the one you like best. You can use it as a normal PLA and get prints characterized by a very good adhesion between the layers and high precision. You can also make your prints acquire similar properties to that of ABS – better impact resistance and high temperature resistance. All you need is an oven. Yes, an oven! By annealing our HD PLA in an oven, in accordance with the manual, you will avoid all the inconveniences of printing with ABS, such as unpleasant odour or hazardous fumes.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/", "author": { "author_id": "Fiberlogy", @@ -1452,7 +1452,7 @@ "display_name": "Filo3D PLA", "description": "Fast, safe and reliable printing. PLA is ideal for the fast and reliable printing of parts and prototypes with a great surface quality.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://dagoma.fr", "author": { "author_id": "Dagoma", @@ -1469,7 +1469,7 @@ "display_name": "IMADE3D JellyBOX PETG", "description": "", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1486,7 +1486,7 @@ "display_name": "IMADE3D JellyBOX PLA", "description": "", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1503,7 +1503,7 @@ "display_name": "Octofiber PLA", "description": "PLA material from Octofiber.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://nl.octofiber.com/3d-printing-filament/pla.html", "author": { "author_id": "Octofiber", @@ -1520,7 +1520,7 @@ "display_name": "PolyFlex™ PLA", "description": "PolyFlex™ is a highly flexible yet easy to print 3D printing material. Featuring good elasticity and a large strain-to- failure, PolyFlex™ opens up a completely new realm of applications.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "http://www.polymaker.com/shop/polyflex/", "author": { "author_id": "Polymaker", @@ -1537,7 +1537,7 @@ "display_name": "PolyMax™ PLA", "description": "PolyMax™ PLA is a 3D printing material with excellent mechanical properties and printing quality. PolyMax™ PLA has an impact resistance of up to nine times that of regular PLA, and better overall mechanical properties than ABS.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "http://www.polymaker.com/shop/polymax/", "author": { "author_id": "Polymaker", @@ -1554,7 +1554,7 @@ "display_name": "PolyPlus™ PLA True Colour", "description": "PolyPlus™ PLA is a premium PLA designed for all desktop FDM/FFF 3D printers. It is produced with our patented Jam-Free™ technology that ensures consistent extrusion and prevents jams.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "http://www.polymaker.com/shop/polyplus-true-colour/", "author": { "author_id": "Polymaker", @@ -1571,7 +1571,7 @@ "display_name": "PolyWood™ PLA", "description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.", "package_version": "1.0.1", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "http://www.polymaker.com/shop/polywood/", "author": { "author_id": "Polymaker", @@ -1588,7 +1588,7 @@ "display_name": "Ultimaker ABS", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1607,7 +1607,7 @@ "display_name": "Ultimaker Breakaway", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/breakaway", "author": { "author_id": "UltimakerPackages", @@ -1626,7 +1626,7 @@ "display_name": "Ultimaker CPE", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1645,7 +1645,7 @@ "display_name": "Ultimaker CPE+", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/cpe", "author": { "author_id": "UltimakerPackages", @@ -1664,7 +1664,7 @@ "display_name": "Ultimaker Nylon", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1683,7 +1683,7 @@ "display_name": "Ultimaker PC", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/pc", "author": { "author_id": "UltimakerPackages", @@ -1702,7 +1702,7 @@ "display_name": "Ultimaker PLA", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1721,7 +1721,7 @@ "display_name": "Ultimaker PP", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/pp", "author": { "author_id": "UltimakerPackages", @@ -1740,7 +1740,7 @@ "display_name": "Ultimaker PVA", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1759,7 +1759,7 @@ "display_name": "Ultimaker TPU 95A", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/tpu-95a", "author": { "author_id": "UltimakerPackages", @@ -1778,7 +1778,7 @@ "display_name": "Ultimaker Tough PLA", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://ultimaker.com/products/materials/tough-pla", "author": { "author_id": "UltimakerPackages", @@ -1797,7 +1797,7 @@ "display_name": "Vertex Delta ABS", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1814,7 +1814,7 @@ "display_name": "Vertex Delta PET", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1831,7 +1831,7 @@ "display_name": "Vertex Delta PLA", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1848,7 +1848,7 @@ "display_name": "Vertex Delta TPU", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.4.0", - "sdk_version": "7.7.0", + "sdk_version": "7.8.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", From a1ecea020c4efd6b8da837bd255819fdc8141d37 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 20 Sep 2021 15:13:34 +0200 Subject: [PATCH 10/49] Catch errors when backing up the preferences file The file may not exist. In fact, that may be the whole reason why people want to restore a back-up. Try it, and give an error if it fails. Fixes Sentry issue CURA-2QT. --- cura/Backups/Backup.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py index 85510e6b4c..02badedefa 100644 --- a/cura/Backups/Backup.py +++ b/cura/Backups/Backup.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import io @@ -168,7 +168,10 @@ class Backup: preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name)) backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name)) Logger.log("d", "Moving preferences file from %s to %s", backup_preferences_file, preferences_file) - shutil.move(backup_preferences_file, preferences_file) + try: + shutil.move(backup_preferences_file, preferences_file) + except EnvironmentError as e: + Logger.error(f"Unable to back-up preferences file: {type(e)} - {str(e)}") # Read the preferences from the newly restored configuration (or else the cached Preferences will override the restored ones) self._application.readPreferencesFromConfiguration() From 570fb3cf93f18c8b53be24f3b2eed7754f8d5bd7 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Mon, 20 Sep 2021 15:33:05 +0200 Subject: [PATCH 11/49] Introduce the ApplicationSwitcher widget It includes only the hardcoded model with the Ultimaker links for now. CURA-8421 --- .../ApplicationSwitcher/ApplicationButton.qml | 94 ++++++++++++++ .../ApplicationSwitcher.qml | 122 ++++++++++++++++++ resources/qml/MainWindow/MainWindowHeader.qml | 14 +- .../icons/default/ApplicationSwitcher.svg | 3 + .../themes/cura-light/icons/default/Bug.svg | 3 + resources/themes/cura-light/theme.json | 3 + 6 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 resources/qml/ApplicationSwitcher/ApplicationButton.qml create mode 100644 resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml create mode 100644 resources/themes/cura-light/icons/default/ApplicationSwitcher.svg create mode 100644 resources/themes/cura-light/icons/default/Bug.svg diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml new file mode 100644 index 0000000000..564fff747e --- /dev/null +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -0,0 +1,94 @@ +// Copyright (c) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Button +{ + id: base + + property alias iconSource: applicationIcon.source + property alias displayName: applicationDisplayName.text + property alias tooltipText: tooltip.text + property bool isExternalLink: false + + width: UM.Theme.getSize("application_switcher_item").width + height: UM.Theme.getSize("application_switcher_item").height + + background: Rectangle + { + color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") + border.color: parent.hovered ? UM.Theme.getColor("primary") : "transparent" + border.width: UM.Theme.getSize("default_lining").width + } + + UM.TooltipArea + { + id: tooltip + anchors.fill: parent + } + + Column + { + id: applicationButtonContent + anchors.centerIn: parent + spacing: UM.Theme.getSize("default_margin").width + + UM.RecolorImage + { + id: applicationIcon + anchors.horizontalCenter: parent.horizontalCenter + + color: UM.Theme.getColor("monitor_icon_primary") + width: UM.Theme.getSize("application_switcher_icon").width + height: width + + Item + { + id: externalLinkIndicator + + visible: base.isExternalLink + + anchors + { + bottom: parent.bottom + bottomMargin: - Math.round(height * 1 / 6) + right: parent.right + rightMargin: - Math.round(width * 5 / 6) + } + Rectangle + { + anchors.centerIn: parent + width: UM.Theme.getSize("small_button_icon").width + height: width + color: base.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") + radius: 0.5 * width + } + + UM.RecolorImage + { + id: externalLinkIcon + anchors.centerIn: parent + + width: UM.Theme.getSize("printer_status_icon").width + height: width + + color: UM.Theme.getColor("monitor_icon_primary") + + source: UM.Theme.getIcon("LinkExternal") + } + } + } + + Label + { + id: applicationDisplayName + anchors.horizontalCenter: parent.horizontalCenter + + } + } +} \ No newline at end of file diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml new file mode 100644 index 0000000000..ea2588cc36 --- /dev/null +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -0,0 +1,122 @@ +// Copyright (c) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.15 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Item +{ + id: applicationSwitcherWidget + width: appSwitcherButton.width + height: width + + + Button + { + id: appSwitcherButton + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + + width: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) + height: width + + background: UM.RecolorImage + { + width: UM.Theme.getSize("small_button_icon").width + height: width + anchors.verticalCenter: appSwitcherButton.verticalCenter + anchors.horizontalCenter: appSwitcherButton.horizontalCenter + color: UM.Theme.getColor("main_background") + + source: UM.Theme.getIcon("ApplicationSwitcher") + } + + onClicked: + { + if (popup.opened) + { + popup.close() + } else { + popup.open() + } + } + } + + Popup + { + id: popup + + y: parent.height + UM.Theme.getSize("default_arrow").height + x: parent.width - width + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + opacity: opened ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + padding: 0 + width: contentWidth + 2 * UM.Theme.getSize("wide_margin").width + height: contentHeight + 2 * UM.Theme.getSize("wide_margin").width + + contentItem: Item + { + id: projectListContainer + anchors.fill: parent + anchors.margins: UM.Theme.getSize("wide_margin").width + + Column + { + id: contentsColumn + anchors.top: parent.top + anchors.left: parent.left + + width: gridLayout.width + + Grid + { + id: gridLayout + columns: 3 + spacing: UM.Theme.getSize("default_margin").width + Repeater + { + id:gridgenerate + + model: + [ + { displayName: "Report issue1", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description1", link: "https://github.com/Ultimaker/Cura/issues/1" }, + { displayName: "My printers", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description2", link: "https://github.com/Ultimaker/Cura/issues/2" }, + { displayName: "Ultimaker.com", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description3", link: "https://ultimaker.com" }, + { displayName: "Report issue4", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description4", link: "https://github.com/Ultimaker/Cura/issues/4" }, + { displayName: "Report issue5", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description5", link: "https://github.com/Ultimaker/Cura/issues/5" } + ] + + delegate: ApplicationButton + { + displayName: modelData.displayName + iconSource: modelData.thumbnail + tooltipText: modelData.description + isExternalLink: (index % 2 == 0) + + onClicked: Qt.openUrlExternally(modelData.link) + } + } + } + } + + } + + background: UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + borderColor: UM.Theme.getColor("lining") + borderWidth: UM.Theme.getSize("default_lining").width + + target: Qt.point(width - (appSwitcherButton.width / 2), -10) + + arrowSize: UM.Theme.getSize("default_arrow").width + } + } +} \ No newline at end of file diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index c27f3b0a24..3e3e5da467 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -10,6 +10,7 @@ import UM 1.4 as UM import Cura 1.0 as Cura import "../Account" +import "../ApplicationSwitcher" Item { @@ -113,7 +114,7 @@ Item anchors { - right: accountWidget.left + right: applicationSwitcher.left rightMargin: UM.Theme.getSize("default_margin").width verticalCenter: parent.verticalCenter } @@ -138,6 +139,17 @@ Item } } + ApplicationSwitcher + { + id: applicationSwitcher + anchors + { + verticalCenter: parent.verticalCenter + right: accountWidget.left +// rightMargin: UM.Theme.getSize("default_margin").width + } + } + AccountWidget { id: accountWidget diff --git a/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg b/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg new file mode 100644 index 0000000000..966b80d64e --- /dev/null +++ b/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Bug.svg b/resources/themes/cura-light/icons/default/Bug.svg new file mode 100644 index 0000000000..9e4a8e6e45 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Bug.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index d50a748493..568b2d261b 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -499,6 +499,9 @@ "print_setup_icon": [1.2, 1.2], "drag_icon": [1.416, 0.25], + "application_switcher_item": [8, 9], + "application_switcher_icon": [3.75, 3.75], + "expandable_component_content_header": [0.0, 3.0], "configuration_selector": [35.0, 4.0], From 15884a66e8e9f0151fe8f0e05d9f4d93fdb716ef Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Mon, 20 Sep 2021 15:58:53 +0200 Subject: [PATCH 12/49] Warp and elide ApplicationButton display name To make sure that it properly fits in the available space. CURA-8421 --- .../qml/ApplicationSwitcher/ApplicationButton.qml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index 564fff747e..bec806eb1c 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -60,8 +60,10 @@ Button right: parent.right rightMargin: - Math.round(width * 5 / 6) } + Rectangle { + id: externalLinkIndicatorBackground anchors.centerIn: parent width: UM.Theme.getSize("small_button_icon").width height: width @@ -71,14 +73,12 @@ Button UM.RecolorImage { - id: externalLinkIcon + id: externalLinkIndicatorIcon anchors.centerIn: parent width: UM.Theme.getSize("printer_status_icon").width height: width - color: UM.Theme.getColor("monitor_icon_primary") - source: UM.Theme.getIcon("LinkExternal") } } @@ -87,8 +87,14 @@ Button Label { id: applicationDisplayName + anchors.horizontalCenter: parent.horizontalCenter + width: base.width - UM.Theme.getSize("default_margin").width + horizontalAlignment: Text.AlignHCenter + maximumLineCount: 2 + wrapMode: Text.Wrap + elide: Text.ElideRight } } } \ No newline at end of file From c518f0de933385b68dbca486bb37d1ddaf805a8e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 20 Sep 2021 16:36:26 +0200 Subject: [PATCH 13/49] Add links to Ultimaker's platform websites The links are not final since they will need some campaign tags. For the rest it should be more or less done. Contributes to issue CURA-8422. --- .../ApplicationSwitcher.qml | 59 +++++++++++++++++-- .../cura-light/icons/default/Browser.svg | 3 + .../themes/cura-light/icons/default/Bug.svg | 4 +- .../icons/default/FoodBeverages.svg | 3 + .../themes/cura-light/icons/default/Help.svg | 3 + .../cura-light/icons/default/Knowledge.svg | 3 + .../cura-light/icons/default/Library.svg | 3 + .../themes/cura-light/icons/default/Shop.svg | 3 + .../themes/cura-light/icons/default/Speak.svg | 3 + .../themes/cura-light/icons/high/Bug.svg | 3 + .../themes/cura-light/icons/high/Help.svg | 3 + .../themes/cura-light/icons/high/Library.svg | 3 + .../cura-light/icons/high/PrinterTriple.svg | 3 + .../themes/cura-light/icons/high/Shop.svg | 3 + .../themes/cura-light/icons/high/Speak.svg | 3 + 15 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 resources/themes/cura-light/icons/default/Browser.svg create mode 100644 resources/themes/cura-light/icons/default/FoodBeverages.svg create mode 100644 resources/themes/cura-light/icons/default/Help.svg create mode 100644 resources/themes/cura-light/icons/default/Knowledge.svg create mode 100644 resources/themes/cura-light/icons/default/Library.svg create mode 100644 resources/themes/cura-light/icons/default/Shop.svg create mode 100644 resources/themes/cura-light/icons/default/Speak.svg create mode 100644 resources/themes/cura-light/icons/high/Bug.svg create mode 100644 resources/themes/cura-light/icons/high/Help.svg create mode 100644 resources/themes/cura-light/icons/high/Library.svg create mode 100644 resources/themes/cura-light/icons/high/PrinterTriple.svg create mode 100644 resources/themes/cura-light/icons/high/Shop.svg create mode 100644 resources/themes/cura-light/icons/high/Speak.svg diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index ea2588cc36..3e11a37734 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -86,11 +86,60 @@ Item model: [ - { displayName: "Report issue1", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description1", link: "https://github.com/Ultimaker/Cura/issues/1" }, - { displayName: "My printers", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description2", link: "https://github.com/Ultimaker/Cura/issues/2" }, - { displayName: "Ultimaker.com", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description3", link: "https://ultimaker.com" }, - { displayName: "Report issue4", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description4", link: "https://github.com/Ultimaker/Cura/issues/4" }, - { displayName: "Report issue5", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description5", link: "https://github.com/Ultimaker/Cura/issues/5" } + { + displayName: catalog.i18nc("@label:button", "My printers"), + thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), + link: "https://digitalfactory.ultimaker.com/app/printers" + }, + { + displayName: "Digital Library", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Library", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), + link: "https://digitalfactory.ultimaker.com/app/library" + }, + { + displayName: catalog.i18nc("@label:button", "Print jobs"), + thumbnail: UM.Theme.getIcon("FoodBeverages"), + description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), + link: "https://digitalfactory.ultimaker.com/app/print-jobs" + }, + { + displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Shop", "high"), + description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), + link: "https://marketplace.ultimaker.com/" + }, + { + displayName: "Ultimaker Academy", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Knowledge"), + description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), + link: "https://academy.ultimaker.com/" + }, + { + displayName: catalog.i18nc("@label:button", "Ultimaker support"), + thumbnail: UM.Theme.getIcon("Help", "high"), + description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), + link: "https://support.ultimaker.com/" + }, + { + displayName: catalog.i18nc("@label:button", "Ask a question"), + thumbnail: UM.Theme.getIcon("Speak", "high"), + description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), + link: "https://community.ultimaker.com/" + }, + { + displayName: catalog.i18nc("@label:button", "Report a bug"), + thumbnail: UM.Theme.getIcon("Bug", "high"), + description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), + link: "https://github.com/Ultimaker/Cura/issues/new/choose" + }, + { + displayName: "Ultimaker.com", //Not translated, since it's a URL. + thumbnail: UM.Theme.getIcon("Browser"), + description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), + link: "https://ultimaker.com/" + } ] delegate: ApplicationButton diff --git a/resources/themes/cura-light/icons/default/Browser.svg b/resources/themes/cura-light/icons/default/Browser.svg new file mode 100644 index 0000000000..01365ec678 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Browser.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Bug.svg b/resources/themes/cura-light/icons/default/Bug.svg index 9e4a8e6e45..7ad9bb4f1c 100644 --- a/resources/themes/cura-light/icons/default/Bug.svg +++ b/resources/themes/cura-light/icons/default/Bug.svg @@ -1,3 +1,3 @@ - - + + diff --git a/resources/themes/cura-light/icons/default/FoodBeverages.svg b/resources/themes/cura-light/icons/default/FoodBeverages.svg new file mode 100644 index 0000000000..1e74b33955 --- /dev/null +++ b/resources/themes/cura-light/icons/default/FoodBeverages.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Help.svg b/resources/themes/cura-light/icons/default/Help.svg new file mode 100644 index 0000000000..84f94c2703 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Help.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Knowledge.svg b/resources/themes/cura-light/icons/default/Knowledge.svg new file mode 100644 index 0000000000..4f8798d5f1 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Knowledge.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Library.svg b/resources/themes/cura-light/icons/default/Library.svg new file mode 100644 index 0000000000..beb8c6e593 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Library.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Shop.svg b/resources/themes/cura-light/icons/default/Shop.svg new file mode 100644 index 0000000000..bfd5a4bf69 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Shop.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Speak.svg b/resources/themes/cura-light/icons/default/Speak.svg new file mode 100644 index 0000000000..8f308643a7 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Speak.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Bug.svg b/resources/themes/cura-light/icons/high/Bug.svg new file mode 100644 index 0000000000..a24963cd8e --- /dev/null +++ b/resources/themes/cura-light/icons/high/Bug.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Help.svg b/resources/themes/cura-light/icons/high/Help.svg new file mode 100644 index 0000000000..355b9dd468 --- /dev/null +++ b/resources/themes/cura-light/icons/high/Help.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Library.svg b/resources/themes/cura-light/icons/high/Library.svg new file mode 100644 index 0000000000..3ddc018543 --- /dev/null +++ b/resources/themes/cura-light/icons/high/Library.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/PrinterTriple.svg b/resources/themes/cura-light/icons/high/PrinterTriple.svg new file mode 100644 index 0000000000..65e4936bc2 --- /dev/null +++ b/resources/themes/cura-light/icons/high/PrinterTriple.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Shop.svg b/resources/themes/cura-light/icons/high/Shop.svg new file mode 100644 index 0000000000..7662cf4b9b --- /dev/null +++ b/resources/themes/cura-light/icons/high/Shop.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Speak.svg b/resources/themes/cura-light/icons/high/Speak.svg new file mode 100644 index 0000000000..68642bba2b --- /dev/null +++ b/resources/themes/cura-light/icons/high/Speak.svg @@ -0,0 +1,3 @@ + + + From a9968acd6d424723afca3b05c64560a18f785a97 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Mon, 20 Sep 2021 16:42:22 +0200 Subject: [PATCH 14/49] Fix misalignment of images if the displayName spans to next line When the displayname of the app is long and it spans to the next line, it was pushing the icon up in the column, making it seem like it is misaligned. This is now fixed and the icons should be aligned regardless if the display name has one or two lines. CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationButton.qml | 4 ++-- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 2 +- .../themes/cura-light/icons/default/ApplicationSwitcher.svg | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index bec806eb1c..d1d94eb4a2 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -36,7 +36,6 @@ Button { id: applicationButtonContent anchors.centerIn: parent - spacing: UM.Theme.getSize("default_margin").width UM.RecolorImage { @@ -91,8 +90,9 @@ Button anchors.horizontalCenter: parent.horizontalCenter width: base.width - UM.Theme.getSize("default_margin").width + height: base.height - applicationIcon.height - 2 * UM.Theme.getSize("default_margin").width // Account for the top and bottom margins horizontalAlignment: Text.AlignHCenter - maximumLineCount: 2 + verticalAlignment: Text.AlignVCenter wrapMode: Text.Wrap elide: Text.ElideRight } diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index ea2588cc36..8d4d7306f9 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -26,7 +26,7 @@ Item background: UM.RecolorImage { - width: UM.Theme.getSize("small_button_icon").width + width: parent.width height: width anchors.verticalCenter: appSwitcherButton.verticalCenter anchors.horizontalCenter: appSwitcherButton.horizontalCenter diff --git a/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg b/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg index 966b80d64e..207171b8f7 100644 --- a/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg +++ b/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg @@ -1,3 +1,3 @@ - - + + From d844c5f70a9981585a25a44f9bb6f42a699c9054 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Mon, 20 Sep 2021 16:57:16 +0200 Subject: [PATCH 15/49] Fix alignment of the ApplicationSwitcher button The sign in button has a different size when you are logged in, where the account avatar was being drawn in the middle of the Sign In button. This was causing a weird alignment of the ApplicationSwitcher next to it, as it was adding an extra margin. This is now fixed by making sure that the width of the button that has to do with account adjusts according to whether you are logged in or not. This makes the ApplicationSwitcher icon move when you log in but looks more natural relatively to the account button. CURA-8421 --- resources/qml/Account/AccountWidget.qml | 8 ++++---- resources/qml/MainWindow/MainWindowHeader.qml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index ef1622daee..6433822497 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -12,8 +12,8 @@ Item property var profile: Cura.API.account.userProfile property var loggedIn: Cura.API.account.isLoggedIn - height: signInButton.height > accountWidget.height ? signInButton.height : accountWidget.height - width: signInButton.width > accountWidget.width ? signInButton.width : accountWidget.width + height: signInButton.visible ? signInButton.height : accountWidget.height + width: signInButton.visible ? signInButton.width : accountWidget.width Button { @@ -54,7 +54,7 @@ Item id: accountWidget anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: signInButton.horizontalCenter +// anchors.horizontalCenter: signInButton.horizontalCenter implicitHeight: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) implicitWidth: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) @@ -142,7 +142,7 @@ Item borderColor: UM.Theme.getColor("lining") borderWidth: UM.Theme.getSize("default_lining").width - target: Qt.point(width - (signInButton.width / 2), -10) + target: Qt.point(width - ((signInButton.visible ? signInButton.width : accountWidget.width) / 2), -10) arrowSize: UM.Theme.getSize("default_arrow").width } diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index 3e3e5da467..3302c916bb 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -146,7 +146,7 @@ Item { verticalCenter: parent.verticalCenter right: accountWidget.left -// rightMargin: UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("default_margin").width } } From fea8ecd55f7acc72d8eb35037c16aec8b227e22c Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Mon, 20 Sep 2021 17:19:37 +0200 Subject: [PATCH 16/49] Rename the qml elements and the theme entries used in AppSwitcher To some more sensible names (hopefully). CURA-8421 --- .../ApplicationSwitcher/ApplicationButton.qml | 8 +++--- .../ApplicationSwitcher.qml | 28 +++++++++---------- resources/themes/cura-light/theme.json | 3 ++ 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index d1d94eb4a2..c722b172af 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -42,7 +42,7 @@ Button id: applicationIcon anchors.horizontalCenter: parent.horizontalCenter - color: UM.Theme.getColor("monitor_icon_primary") + color: UM.Theme.getColor("icon") width: UM.Theme.getSize("application_switcher_icon").width height: width @@ -64,7 +64,7 @@ Button { id: externalLinkIndicatorBackground anchors.centerIn: parent - width: UM.Theme.getSize("small_button_icon").width + width: UM.Theme.getSize("icon_indicator_background").width height: width color: base.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") radius: 0.5 * width @@ -75,9 +75,9 @@ Button id: externalLinkIndicatorIcon anchors.centerIn: parent - width: UM.Theme.getSize("printer_status_icon").width + width: UM.Theme.getSize("icon_indicator").width height: width - color: UM.Theme.getColor("monitor_icon_primary") + color: UM.Theme.getColor("icon") source: UM.Theme.getIcon("LinkExternal") } } diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 8d4d7306f9..c09c6e9547 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -11,13 +11,12 @@ import Cura 1.1 as Cura Item { id: applicationSwitcherWidget - width: appSwitcherButton.width + width: applicationSwitcherButton.width height: width - Button { - id: appSwitcherButton + id: applicationSwitcherButton anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter @@ -28,8 +27,8 @@ Item { width: parent.width height: width - anchors.verticalCenter: appSwitcherButton.verticalCenter - anchors.horizontalCenter: appSwitcherButton.horizontalCenter + anchors.verticalCenter: applicationSwitcherButton.verticalCenter + anchors.horizontalCenter: applicationSwitcherButton.horizontalCenter color: UM.Theme.getColor("main_background") source: UM.Theme.getIcon("ApplicationSwitcher") @@ -37,18 +36,18 @@ Item onClicked: { - if (popup.opened) + if (applicationSwitcherPopup.opened) { - popup.close() + applicationSwitcherPopup.close() } else { - popup.open() + applicationSwitcherPopup.open() } } } Popup { - id: popup + id: applicationSwitcherPopup y: parent.height + UM.Theme.getSize("default_arrow").height x: parent.width - width @@ -63,7 +62,7 @@ Item contentItem: Item { - id: projectListContainer + id: applicationsContainer anchors.fill: parent anchors.margins: UM.Theme.getSize("wide_margin").width @@ -73,17 +72,16 @@ Item anchors.top: parent.top anchors.left: parent.left - width: gridLayout.width + width: ultimakerPlatformLinksGrid.width Grid { - id: gridLayout + id: ultimakerPlatformLinksGrid columns: 3 spacing: UM.Theme.getSize("default_margin").width + Repeater { - id:gridgenerate - model: [ { displayName: "Report issue1", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description1", link: "https://github.com/Ultimaker/Cura/issues/1" }, @@ -114,7 +112,7 @@ Item borderColor: UM.Theme.getColor("lining") borderWidth: UM.Theme.getSize("default_lining").width - target: Qt.point(width - (appSwitcherButton.width / 2), -10) + target: Qt.point(width - (applicationSwitcherButton.width / 2), -10) arrowSize: UM.Theme.getSize("default_arrow").width } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 568b2d261b..daa12b3390 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -574,6 +574,9 @@ "favorites_button": [2, 2], "favorites_button_icon": [1.2, 1.2], + "icon_indicator_background": [1.5, 1.5], + "icon_indicator": [1, 1], + "printer_status_icon": [1.0, 1.0], "printer_sync_icon": [1.2, 1.2], From 0d932991d45f2c9b691a21aa5cff7dde99f1b02c Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Mon, 20 Sep 2021 17:24:06 +0200 Subject: [PATCH 17/49] Rename ApplicationSwitcher.svg to BlockGrid.svg Since it is the original filename in the design. CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 2 +- .../icons/default/{ApplicationSwitcher.svg => BlockGrid.svg} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename resources/themes/cura-light/icons/default/{ApplicationSwitcher.svg => BlockGrid.svg} (100%) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index c09c6e9547..5096f53030 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -31,7 +31,7 @@ Item anchors.horizontalCenter: applicationSwitcherButton.horizontalCenter color: UM.Theme.getColor("main_background") - source: UM.Theme.getIcon("ApplicationSwitcher") + source: UM.Theme.getIcon("BlockGrid") } onClicked: diff --git a/resources/themes/cura-light/icons/default/ApplicationSwitcher.svg b/resources/themes/cura-light/icons/default/BlockGrid.svg similarity index 100% rename from resources/themes/cura-light/icons/default/ApplicationSwitcher.svg rename to resources/themes/cura-light/icons/default/BlockGrid.svg From fe640d42cfc87fea996fd0c147221022cc2280cd Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 09:33:30 +0200 Subject: [PATCH 18/49] Don't crash if a material fails to be written in the zip This fixes Sentry issue CURA-2WS. --- cura/Machines/Models/MaterialManagementModel.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py index 6663dbdae1..40d81004fe 100644 --- a/cura/Machines/Models/MaterialManagementModel.py +++ b/cura/Machines/Models/MaterialManagementModel.py @@ -296,4 +296,7 @@ class MaterialManagementModel(QObject): material = registry.findContainers(id = metadata["id"])[0] suffix = registry.getMimeTypeForContainer(type(material)).preferredSuffix filename = metadata["id"] + "." + suffix - archive.writestr(filename, material.serialize()) + try: + archive.writestr(filename, material.serialize()) + except OSError as e: + Logger.log("e", f"An error has occurred while writing the material \'{metadata['id']}\' in the file \'{filename}\': {e}.") From ee564782b52d5dc9212bfcd482c7dcac2230c847 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 11:06:45 +0200 Subject: [PATCH 19/49] Remove comment CURA-8421 --- resources/qml/Account/AccountWidget.qml | 1 - resources/qml/ApplicationSwitcher/ApplicationButton.qml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index 6433822497..3cef820997 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -54,7 +54,6 @@ Item id: accountWidget anchors.verticalCenter: parent.verticalCenter -// anchors.horizontalCenter: signInButton.horizontalCenter implicitHeight: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) implicitWidth: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index c722b172af..a6176f3153 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -97,4 +97,4 @@ Button elide: Text.ElideRight } } -} \ No newline at end of file +} From 6df9f9f72cc209c47e96c4204c04edcf096b3685 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 11:32:38 +0200 Subject: [PATCH 20/49] Remove debugging code So that all platform links have the link icon indicator in the bottom right corner. CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 5096f53030..a98916ced9 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -96,7 +96,7 @@ Item displayName: modelData.displayName iconSource: modelData.thumbnail tooltipText: modelData.description - isExternalLink: (index % 2 == 0) + isExternalLink: true onClicked: Qt.openUrlExternally(modelData.link) } From df7ddd305cedfb03f35f3940e2c9989408f71a33 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 21 Sep 2021 13:17:08 +0200 Subject: [PATCH 21/49] Add tracking tags to Ultimaker website links Contributes to issue CURA-8422. --- .../ApplicationSwitcher/ApplicationSwitcher.qml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 1dc3a65e69..38c720cd20 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -88,43 +88,43 @@ Item displayName: catalog.i18nc("@label:button", "My printers"), thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), - link: "https://digitalfactory.ultimaker.com/app/printers" + link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" }, { displayName: "Digital Library", //Not translated, since it's a brand name. thumbnail: UM.Theme.getIcon("Library", "high"), description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), - link: "https://digitalfactory.ultimaker.com/app/library" + link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" }, { displayName: catalog.i18nc("@label:button", "Print jobs"), thumbnail: UM.Theme.getIcon("FoodBeverages"), description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), - link: "https://digitalfactory.ultimaker.com/app/print-jobs" + link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" }, { displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. thumbnail: UM.Theme.getIcon("Shop", "high"), description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), - link: "https://marketplace.ultimaker.com/" + link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" }, { displayName: "Ultimaker Academy", //Not translated, since it's a brand name. thumbnail: UM.Theme.getIcon("Knowledge"), description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), - link: "https://academy.ultimaker.com/" + link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" }, { displayName: catalog.i18nc("@label:button", "Ultimaker support"), thumbnail: UM.Theme.getIcon("Help", "high"), description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), - link: "https://support.ultimaker.com/" + link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" }, { displayName: catalog.i18nc("@label:button", "Ask a question"), thumbnail: UM.Theme.getIcon("Speak", "high"), description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), - link: "https://community.ultimaker.com/" + link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" }, { displayName: catalog.i18nc("@label:button", "Report a bug"), @@ -136,7 +136,7 @@ Item displayName: "Ultimaker.com", //Not translated, since it's a URL. thumbnail: UM.Theme.getIcon("Browser"), description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), - link: "https://ultimaker.com/" + link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" } ] From 58f4d44694ef708f4a0399c428d3f129c9733df5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 21 Sep 2021 13:40:40 +0200 Subject: [PATCH 22/49] Don't crash when switching to printer with fewer extruders This seems to have happened with an UM2+C. Fixes Sentry issue CURA-2R5. --- cura/Settings/MachineManager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ac9d704afd..d8e17ec305 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Ultimaker B.V. +# Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import time @@ -1398,6 +1398,8 @@ class MachineManager(QObject): # previous one). self._global_container_stack.setUserChanges(global_user_changes) for i, user_changes in enumerate(per_extruder_user_changes): + if i >= len(self._global_container_stack.extruderList): # New printer has fewer extruders. + break self._global_container_stack.extruderList[i].setUserChanges(per_extruder_user_changes[i]) @pyqtSlot(QObject) From 9ab41c062bcba7622d6a50b9a13d69a9692a79d1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 21 Sep 2021 14:20:59 +0200 Subject: [PATCH 23/49] Handle encoding errors in back-up zips Seems to happen when there's files in there with badly-encoded characters in the file names. Fixes Sentry issue CURA-2S7. --- cura/Backups/Backup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py index 02badedefa..90a354c0a3 100644 --- a/cura/Backups/Backup.py +++ b/cura/Backups/Backup.py @@ -206,6 +206,8 @@ class Backup: archive.extract(archive_filename, target_path) except (PermissionError, EnvironmentError): Logger.logException("e", f"Unable to extract the file {archive_filename} from the backup due to permission or file system errors.") + except UnicodeEncodeError: + Logger.error(f"Unable to extract the file {archive_filename} because of an encoding error.") CuraApplication.getInstance().processEvents() return True From e2d19668e4ec693834b61d557c62109bc6b844d5 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 15:00:25 +0200 Subject: [PATCH 24/49] Change the hover colors of the AppSwitcher button So that they are more subtle. CURA-8421 --- .../ApplicationSwitcher.qml | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index a98916ced9..45d00f3744 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -23,15 +23,25 @@ Item width: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) height: width - background: UM.RecolorImage + background: Item { - width: parent.width - height: width - anchors.verticalCenter: applicationSwitcherButton.verticalCenter - anchors.horizontalCenter: applicationSwitcherButton.horizontalCenter - color: UM.Theme.getColor("main_background") + anchors.fill: parent - source: UM.Theme.getIcon("BlockGrid") + Rectangle + { + anchors.fill: parent + radius: UM.Theme.getSize("action_button_radius").width + color: applicationSwitcherButton.hovered ? UM.Theme.getColor("primary_text") : "transparent" + opacity: applicationSwitcherButton.hovered ? 0.2 : 0 + } + + UM.RecolorImage + { + anchors.fill: parent + color: UM.Theme.getColor("primary_text") + + source: UM.Theme.getIcon("BlockGrid") + } } onClicked: From ab77efd9c493e452222f2a33c9ee13de09b71f49 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 15:07:04 +0200 Subject: [PATCH 25/49] Move the popup so that the arrow isn't drawn exactly on the corner CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 45d00f3744..bbce9dbc9f 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -60,7 +60,9 @@ Item id: applicationSwitcherPopup y: parent.height + UM.Theme.getSize("default_arrow").height - x: parent.width - width + + // Move the x position by the default margin so that the arrow isn't drawn exactly on the corner + x: parent.width - width + UM.Theme.getSize("default_margin").width closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent @@ -122,7 +124,8 @@ Item borderColor: UM.Theme.getColor("lining") borderWidth: UM.Theme.getSize("default_lining").width - target: Qt.point(width - (applicationSwitcherButton.width / 2), -10) + // Move the target by the default margin so that the arrow isn't drawn exactly on the corner + target: Qt.point(width - UM.Theme.getSize("default_margin").width - (applicationSwitcherButton.width / 2), -10) arrowSize: UM.Theme.getSize("default_arrow").width } From c91509418e9b9dd52ba1260ca721377e5f63cb9d Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 15:36:31 +0200 Subject: [PATCH 26/49] Make all the top right buttons uniform Instead of inverting the fill and the text color in those buttons when hovering on those buttons, they will now show a light background fill when hovered. CURA-8421 --- resources/qml/Account/AccountWidget.qml | 27 +++++++++++++++---- resources/qml/MainWindow/MainWindowHeader.qml | 14 ++++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index 3cef820997..ceb3988ca4 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -32,9 +32,17 @@ Item background: Rectangle { radius: UM.Theme.getSize("action_button_radius").width - color: signInButton.hovered ? UM.Theme.getColor("primary_text") : UM.Theme.getColor("main_window_header_background") + color: UM.Theme.getColor("main_window_header_background") border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("primary_text") + + Rectangle + { + anchors.fill: parent + radius: parent.radius + color: UM.Theme.getColor("primary_text") + opacity: signInButton.hovered ? 0.2 : 0 + } } contentItem: Label @@ -42,7 +50,7 @@ Item id: label text: signInButton.text font: UM.Theme.getFont("default") - color: signInButton.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + color: UM.Theme.getColor("primary_text") width: contentWidth verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering @@ -89,9 +97,18 @@ Item width: Math.min(accountWidget.width, accountWidget.height) height: width radius: width - color: accountWidget.hovered ? UM.Theme.getColor("primary_text") : "transparent" - border.width: 1 + color: UM.Theme.getColor("main_window_header_background") + border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("primary_text") + + Rectangle + { + id: initialCircleFill + anchors.fill: parent + radius: parent.radius + color: UM.Theme.getColor("primary_text") + opacity: accountWidget.hovered ? 0.2 : 0 + } } Label @@ -101,7 +118,7 @@ Item anchors.horizontalCenter: parent.horizontalCenter text: accountWidget.text font: UM.Theme.getFont("large_bold") - color: accountWidget.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + color: UM.Theme.getColor("primary_text") verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter renderType: Text.NativeRendering diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index 3302c916bb..5282731537 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -95,10 +95,20 @@ Item background: Rectangle { + id: marketplaceButtonBorder radius: UM.Theme.getSize("action_button_radius").width - color: marketplaceButton.hovered ? UM.Theme.getColor("primary_text") : UM.Theme.getColor("main_window_header_background") + color: UM.Theme.getColor("main_window_header_background") border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("primary_text") + + Rectangle + { + id: marketplaceButtonFill + anchors.fill: parent + radius: parent.radius + color: UM.Theme.getColor("primary_text") + opacity: marketplaceButton.hovered ? 0.2 : 0 + } } contentItem: Label @@ -106,7 +116,7 @@ Item id: label text: marketplaceButton.text font: UM.Theme.getFont("default") - color: marketplaceButton.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + color: UM.Theme.getColor("primary_text") width: contentWidth verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering From ed0fc260513d87d9cab91199df62441882f79a60 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 15:51:01 +0200 Subject: [PATCH 27/49] Fix unthemed label Since in dark mode it stays black and it disappears in the background. CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationButton.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index a6176f3153..e3bee3d5fc 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -95,6 +95,7 @@ Button verticalAlignment: Text.AlignVCenter wrapMode: Text.Wrap elide: Text.ElideRight + color: UM.Theme.getColor("primary_text") } } } From 0626eccb92def48dde8e05dbb5e7ad10cddba002 Mon Sep 17 00:00:00 2001 From: HOELLII <59396522+HOELLII@users.noreply.github.com> Date: Tue, 21 Sep 2021 15:58:29 +0200 Subject: [PATCH 28/49] Add Profile for Creality Ender 6 (#10437) CURA-8582 --- .../definitions/creality_ender6.def.json | 41 +++++++++++++++++++ .../variants/creality_ender6_0.2.inst.cfg | 12 ++++++ .../variants/creality_ender6_0.3.inst.cfg | 12 ++++++ .../variants/creality_ender6_0.4.inst.cfg | 12 ++++++ .../variants/creality_ender6_0.5.inst.cfg | 12 ++++++ .../variants/creality_ender6_0.6.inst.cfg | 12 ++++++ .../variants/creality_ender6_0.8.inst.cfg | 12 ++++++ .../variants/creality_ender6_1.0.inst.cfg | 12 ++++++ 8 files changed, 125 insertions(+) create mode 100644 resources/definitions/creality_ender6.def.json create mode 100644 resources/variants/creality_ender6_0.2.inst.cfg create mode 100644 resources/variants/creality_ender6_0.3.inst.cfg create mode 100644 resources/variants/creality_ender6_0.4.inst.cfg create mode 100644 resources/variants/creality_ender6_0.5.inst.cfg create mode 100644 resources/variants/creality_ender6_0.6.inst.cfg create mode 100644 resources/variants/creality_ender6_0.8.inst.cfg create mode 100644 resources/variants/creality_ender6_1.0.inst.cfg diff --git a/resources/definitions/creality_ender6.def.json b/resources/definitions/creality_ender6.def.json new file mode 100644 index 0000000000..7d1c8ff9f4 --- /dev/null +++ b/resources/definitions/creality_ender6.def.json @@ -0,0 +1,41 @@ +{ + "name": "Creality Ender-6", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality Ender-6" }, + "machine_start_gcode": { "default_value": "\nG28 ;Home\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n"}, + "machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG28 X Y ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" }, + "machine_width": { "default_value": 260 }, + "machine_depth": { "default_value": 260 }, + "machine_height": { "default_value": 400 }, + "z_seam_type": { "value": "'sharpest_corner'"}, + "z_seam_corner": { "value": "'z_seam_corner_inner'"}, + "infill_sparse_density": { "value": "10"}, + "infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'grid'"}, + "infill_overlap":{"value": 10}, + "material_print_temperature":{"value": 220}, + "material_bed_temperature":{"value": 50}, + "retraction_amount":{"value": 10}, + "speed_travel": { "value": 80.0 }, + "coasting_enable": { "value": true}, + "coasting_min_volume": { "value": 0.5}, + "machine_head_with_fans_polygon": { "default_value": [ + [-26, 34], + [-26, -32], + [32, -32], + [32, 34] + ] + }, + + "gantry_height": { "value": 25 }, + + "speed_print": { "value": 50.0 }, + "speed_wall": { "value": 30.0 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} diff --git a/resources/variants/creality_ender6_0.2.inst.cfg b/resources/variants/creality_ender6_0.2.inst.cfg new file mode 100644 index 0000000000..6580f5eb5a --- /dev/null +++ b/resources/variants/creality_ender6_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_ender6 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_ender6_0.3.inst.cfg b/resources/variants/creality_ender6_0.3.inst.cfg new file mode 100644 index 0000000000..32b960ab84 --- /dev/null +++ b/resources/variants/creality_ender6_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_ender6 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_ender6_0.4.inst.cfg b/resources/variants/creality_ender6_0.4.inst.cfg new file mode 100644 index 0000000000..632f2de40f --- /dev/null +++ b/resources/variants/creality_ender6_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_ender6 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_ender6_0.5.inst.cfg b/resources/variants/creality_ender6_0.5.inst.cfg new file mode 100644 index 0000000000..9a4e44cb67 --- /dev/null +++ b/resources/variants/creality_ender6_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_ender6 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_ender6_0.6.inst.cfg b/resources/variants/creality_ender6_0.6.inst.cfg new file mode 100644 index 0000000000..e03ba4f3aa --- /dev/null +++ b/resources/variants/creality_ender6_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_ender6 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_ender6_0.8.inst.cfg b/resources/variants/creality_ender6_0.8.inst.cfg new file mode 100644 index 0000000000..508247756d --- /dev/null +++ b/resources/variants/creality_ender6_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_ender6 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_ender6_1.0.inst.cfg b/resources/variants/creality_ender6_1.0.inst.cfg new file mode 100644 index 0000000000..f13a49d8e0 --- /dev/null +++ b/resources/variants/creality_ender6_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_ender6 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 From a3d04bc752ba0d6a343277b3a2f7b6d1dc399f48 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 16:16:14 +0200 Subject: [PATCH 29/49] Use the correct color for the label CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationButton.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index e3bee3d5fc..dd3195b268 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -95,7 +95,7 @@ Button verticalAlignment: Text.AlignVCenter wrapMode: Text.Wrap elide: Text.ElideRight - color: UM.Theme.getColor("primary_text") + color: UM.Theme.getColor("text") } } } From 2f75e299f5129dd4890eec1abf7193a74cbe5d8e Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 17:31:37 +0200 Subject: [PATCH 30/49] Set the width in the parent item Fixes review comment https://github.com/Ultimaker/Cura/pull/10491#discussion_r713127038. CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 326c0c79e8..3a5e24ff97 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -11,17 +11,14 @@ import Cura 1.1 as Cura Item { id: applicationSwitcherWidget - width: applicationSwitcherButton.width + width: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) height: width Button { id: applicationSwitcherButton - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) - height: width + anchors.fill: parent background: Item { From c73f815b6964aee7c9eedf97d20e33c0edef8085 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 17:32:06 +0200 Subject: [PATCH 31/49] Use anchors instead of setting the width Fixes review comment https://github.com/Ultimaker/Cura/pull/10491#discussion_r713119985. CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationButton.qml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index dd3195b268..153a8996b9 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -35,7 +35,9 @@ Button Column { id: applicationButtonContent - anchors.centerIn: parent + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter UM.RecolorImage { @@ -87,9 +89,9 @@ Button { id: applicationDisplayName - anchors.horizontalCenter: parent.horizontalCenter + anchors.left: parent.left + anchors.right: parent.right - width: base.width - UM.Theme.getSize("default_margin").width height: base.height - applicationIcon.height - 2 * UM.Theme.getSize("default_margin").width // Account for the top and bottom margins horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter From 96436fbedd04c61f5f70ff578ead512a0663e857 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Tue, 21 Sep 2021 17:36:04 +0200 Subject: [PATCH 32/49] Remove unnecessary anchor Fixes review comment https://github.com/Ultimaker/Cura/pull/10491#discussion_r713124155. CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 3a5e24ff97..24ca0e3e3d 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -22,8 +22,6 @@ Item background: Item { - anchors.fill: parent - Rectangle { anchors.fill: parent From e0b38f278266d70d5699910f2717c4b372e3b75d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:29:47 +0200 Subject: [PATCH 33/49] Add animation to hover effect CURA-8421 --- .../ApplicationSwitcher/ApplicationButton.qml | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index 153a8996b9..be8e6e4baf 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -15,14 +15,17 @@ Button property alias displayName: applicationDisplayName.text property alias tooltipText: tooltip.text property bool isExternalLink: false + property color backgroundColor: hovered ? UM.Theme.getColor("primary") : "transparent" + Behavior on backgroundColor { ColorAnimation { duration: 200; } } + width: UM.Theme.getSize("application_switcher_item").width height: UM.Theme.getSize("application_switcher_item").height background: Rectangle { - color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") - border.color: parent.hovered ? UM.Theme.getColor("primary") : "transparent" + color: backgroundColor + border.color: backgroundColor border.width: UM.Theme.getSize("default_lining").width } @@ -62,16 +65,6 @@ Button rightMargin: - Math.round(width * 5 / 6) } - Rectangle - { - id: externalLinkIndicatorBackground - anchors.centerIn: parent - width: UM.Theme.getSize("icon_indicator_background").width - height: width - color: base.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") - radius: 0.5 * width - } - UM.RecolorImage { id: externalLinkIndicatorIcon From dc181a3426051e94dca09981922ffd2131e35579 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:33:13 +0200 Subject: [PATCH 34/49] Simplify QML of application button CURA-8421 --- .../ApplicationSwitcher/ApplicationButton.qml | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index be8e6e4baf..f90103ab7e 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -51,10 +51,9 @@ Button width: UM.Theme.getSize("application_switcher_icon").width height: width - Item + UM.RecolorImage { - id: externalLinkIndicator - + id: externalLinkIndicatorIcon visible: base.isExternalLink anchors @@ -64,17 +63,10 @@ Button right: parent.right rightMargin: - Math.round(width * 5 / 6) } - - UM.RecolorImage - { - id: externalLinkIndicatorIcon - anchors.centerIn: parent - - width: UM.Theme.getSize("icon_indicator").width - height: width - color: UM.Theme.getColor("icon") - source: UM.Theme.getIcon("LinkExternal") - } + width: UM.Theme.getSize("icon_indicator").width + height: width + color: UM.Theme.getColor("icon") + source: UM.Theme.getIcon("LinkExternal") } } From f55e3363d08d8dbe79204665fb83874c046596e0 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:35:09 +0200 Subject: [PATCH 35/49] Remove unneeded property change CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 24ca0e3e3d..5b07b13bca 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -26,7 +26,7 @@ Item { anchors.fill: parent radius: UM.Theme.getSize("action_button_radius").width - color: applicationSwitcherButton.hovered ? UM.Theme.getColor("primary_text") : "transparent" + color: UM.Theme.getColor("primary_text") opacity: applicationSwitcherButton.hovered ? 0.2 : 0 } From 9bf5d85be12e148aedc2cd118e58e888844cc7d2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:36:47 +0200 Subject: [PATCH 36/49] Add animation to hover effect CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 5b07b13bca..d89f283e18 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -28,6 +28,7 @@ Item radius: UM.Theme.getSize("action_button_radius").width color: UM.Theme.getColor("primary_text") opacity: applicationSwitcherButton.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100; } } } UM.RecolorImage From fd0804646a63192a4f3503b8d121b89edabbebbb Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:40:32 +0200 Subject: [PATCH 37/49] Simplify the QML of application switcher CURA-8421 --- .../ApplicationSwitcher.qml | 150 ++++++++---------- 1 file changed, 70 insertions(+), 80 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index d89f283e18..574061907e 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -64,9 +64,7 @@ Item opacity: opened ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } - padding: 0 - width: contentWidth + 2 * UM.Theme.getSize("wide_margin").width - height: contentHeight + 2 * UM.Theme.getSize("wide_margin").width + padding: UM.Theme.getSize("wide_margin").width contentItem: Item { @@ -74,93 +72,85 @@ Item anchors.fill: parent anchors.margins: UM.Theme.getSize("wide_margin").width - Column + Grid { - id: contentsColumn + id: ultimakerPlatformLinksGrid + columns: 3 + spacing: UM.Theme.getSize("default_margin").width anchors.top: parent.top anchors.left: parent.left - width: ultimakerPlatformLinksGrid.width - - Grid + Repeater { - id: ultimakerPlatformLinksGrid - columns: 3 - spacing: UM.Theme.getSize("default_margin").width - - Repeater - { - model: - [ - { - displayName: catalog.i18nc("@label:button", "My printers"), - thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), - link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" - }, - { - displayName: "Digital Library", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Library", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), - link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" - }, - { - displayName: catalog.i18nc("@label:button", "Print jobs"), - thumbnail: UM.Theme.getIcon("FoodBeverages"), - description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), - link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" - }, - { - displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Shop", "high"), - description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), - link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" - }, - { - displayName: "Ultimaker Academy", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Knowledge"), - description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), - link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" - }, - { - displayName: catalog.i18nc("@label:button", "Ultimaker support"), - thumbnail: UM.Theme.getIcon("Help", "high"), - description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), - link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" - }, - { - displayName: catalog.i18nc("@label:button", "Ask a question"), - thumbnail: UM.Theme.getIcon("Speak", "high"), - description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), - link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" - }, - { - displayName: catalog.i18nc("@label:button", "Report a bug"), - thumbnail: UM.Theme.getIcon("Bug", "high"), - description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), - link: "https://github.com/Ultimaker/Cura/issues/new/choose" - }, - { - displayName: "Ultimaker.com", //Not translated, since it's a URL. - thumbnail: UM.Theme.getIcon("Browser"), - description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), - link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" - } - ] - - delegate: ApplicationButton + model: + [ { - displayName: modelData.displayName - iconSource: modelData.thumbnail - tooltipText: modelData.description - isExternalLink: true - - onClicked: Qt.openUrlExternally(modelData.link) + displayName: catalog.i18nc("@label:button", "My printers"), + thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), + link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" + }, + { + displayName: "Digital Library", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Library", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), + link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" + }, + { + displayName: catalog.i18nc("@label:button", "Print jobs"), + thumbnail: UM.Theme.getIcon("FoodBeverages"), + description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), + link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" + }, + { + displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Shop", "high"), + description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), + link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" + }, + { + displayName: "Ultimaker Academy", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Knowledge"), + description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), + link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" + }, + { + displayName: catalog.i18nc("@label:button", "Ultimaker support"), + thumbnail: UM.Theme.getIcon("Help", "high"), + description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), + link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" + }, + { + displayName: catalog.i18nc("@label:button", "Ask a question"), + thumbnail: UM.Theme.getIcon("Speak", "high"), + description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), + link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" + }, + { + displayName: catalog.i18nc("@label:button", "Report a bug"), + thumbnail: UM.Theme.getIcon("Bug", "high"), + description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), + link: "https://github.com/Ultimaker/Cura/issues/new/choose" + }, + { + displayName: "Ultimaker.com", //Not translated, since it's a URL. + thumbnail: UM.Theme.getIcon("Browser"), + description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), + link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" } + ] + + delegate: ApplicationButton + { + displayName: modelData.displayName + iconSource: modelData.thumbnail + tooltipText: modelData.description + isExternalLink: true + + onClicked: Qt.openUrlExternally(modelData.link) } } } - } background: UM.PointingRectangle From 0c9ef1e64787ec27cb1bbf318c86fb50aa53566d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:43:49 +0200 Subject: [PATCH 38/49] Move ApplicationSwitcherPopup to it's own file CURA-8421 --- .../ApplicationSwitcher.qml | 109 +--------------- .../ApplicationSwitcherPopup.qml | 119 ++++++++++++++++++ 2 files changed, 120 insertions(+), 108 deletions(-) create mode 100644 resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml index 574061907e..a8ea2312a5 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -50,119 +50,12 @@ Item } } } - - Popup + ApplicationSwitcherPopup { id: applicationSwitcherPopup - y: parent.height + UM.Theme.getSize("default_arrow").height // Move the x position by the default margin so that the arrow isn't drawn exactly on the corner x: parent.width - width + UM.Theme.getSize("default_margin").width - - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - - opacity: opened ? 1 : 0 - Behavior on opacity { NumberAnimation { duration: 100 } } - padding: UM.Theme.getSize("wide_margin").width - - contentItem: Item - { - id: applicationsContainer - anchors.fill: parent - anchors.margins: UM.Theme.getSize("wide_margin").width - - Grid - { - id: ultimakerPlatformLinksGrid - columns: 3 - spacing: UM.Theme.getSize("default_margin").width - anchors.top: parent.top - anchors.left: parent.left - - Repeater - { - model: - [ - { - displayName: catalog.i18nc("@label:button", "My printers"), - thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), - link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" - }, - { - displayName: "Digital Library", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Library", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), - link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" - }, - { - displayName: catalog.i18nc("@label:button", "Print jobs"), - thumbnail: UM.Theme.getIcon("FoodBeverages"), - description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), - link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" - }, - { - displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Shop", "high"), - description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), - link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" - }, - { - displayName: "Ultimaker Academy", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Knowledge"), - description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), - link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" - }, - { - displayName: catalog.i18nc("@label:button", "Ultimaker support"), - thumbnail: UM.Theme.getIcon("Help", "high"), - description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), - link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" - }, - { - displayName: catalog.i18nc("@label:button", "Ask a question"), - thumbnail: UM.Theme.getIcon("Speak", "high"), - description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), - link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" - }, - { - displayName: catalog.i18nc("@label:button", "Report a bug"), - thumbnail: UM.Theme.getIcon("Bug", "high"), - description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), - link: "https://github.com/Ultimaker/Cura/issues/new/choose" - }, - { - displayName: "Ultimaker.com", //Not translated, since it's a URL. - thumbnail: UM.Theme.getIcon("Browser"), - description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), - link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" - } - ] - - delegate: ApplicationButton - { - displayName: modelData.displayName - iconSource: modelData.thumbnail - tooltipText: modelData.description - isExternalLink: true - - onClicked: Qt.openUrlExternally(modelData.link) - } - } - } - } - - background: UM.PointingRectangle - { - color: UM.Theme.getColor("tool_panel_background") - borderColor: UM.Theme.getColor("lining") - borderWidth: UM.Theme.getSize("default_lining").width - - // Move the target by the default margin so that the arrow isn't drawn exactly on the corner - target: Qt.point(width - UM.Theme.getSize("default_margin").width - (applicationSwitcherButton.width / 2), -10) - - arrowSize: UM.Theme.getSize("default_arrow").width - } } } \ No newline at end of file diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml new file mode 100644 index 0000000000..25d4539cf9 --- /dev/null +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml @@ -0,0 +1,119 @@ +// Copyright (c) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.15 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Popup +{ + id: applicationSwitcherPopup + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + opacity: opened ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + padding: UM.Theme.getSize("wide_margin").width + + contentItem: Item + { + id: applicationsContainer + anchors.fill: parent + anchors.margins: UM.Theme.getSize("wide_margin").width + + Grid + { + id: ultimakerPlatformLinksGrid + columns: 3 + spacing: UM.Theme.getSize("default_margin").width + anchors.top: parent.top + anchors.left: parent.left + + Repeater + { + model: + [ + { + displayName: catalog.i18nc("@label:button", "My printers"), + thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), + link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" + }, + { + displayName: "Digital Library", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Library", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), + link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" + }, + { + displayName: catalog.i18nc("@label:button", "Print jobs"), + thumbnail: UM.Theme.getIcon("FoodBeverages"), + description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), + link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" + }, + { + displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Shop", "high"), + description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), + link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" + }, + { + displayName: "Ultimaker Academy", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Knowledge"), + description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), + link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" + }, + { + displayName: catalog.i18nc("@label:button", "Ultimaker support"), + thumbnail: UM.Theme.getIcon("Help", "high"), + description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), + link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" + }, + { + displayName: catalog.i18nc("@label:button", "Ask a question"), + thumbnail: UM.Theme.getIcon("Speak", "high"), + description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), + link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" + }, + { + displayName: catalog.i18nc("@label:button", "Report a bug"), + thumbnail: UM.Theme.getIcon("Bug", "high"), + description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), + link: "https://github.com/Ultimaker/Cura/issues/new/choose" + }, + { + displayName: "Ultimaker.com", //Not translated, since it's a URL. + thumbnail: UM.Theme.getIcon("Browser"), + description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), + link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" + } + ] + + delegate: ApplicationButton + { + displayName: modelData.displayName + iconSource: modelData.thumbnail + tooltipText: modelData.description + isExternalLink: true + + onClicked: Qt.openUrlExternally(modelData.link) + } + } + } + } + + background: UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + borderColor: UM.Theme.getColor("lining") + borderWidth: UM.Theme.getSize("default_lining").width + + // Move the target by the default margin so that the arrow isn't drawn exactly on the corner + target: Qt.point(width - UM.Theme.getSize("default_margin").width - (applicationSwitcherButton.width / 2), -10) + + arrowSize: UM.Theme.getSize("default_arrow").width + } +} \ No newline at end of file From 90bfdce3bb1f5854e1a63d82dfc72bca01277a28 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:45:53 +0200 Subject: [PATCH 39/49] Further simplify the qml of applicationSwitcherPopup CURA-8421 --- .../ApplicationSwitcherPopup.qml | 147 ++++++++---------- 1 file changed, 69 insertions(+), 78 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml index 25d4539cf9..db19c827df 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml @@ -18,89 +18,80 @@ Popup Behavior on opacity { NumberAnimation { duration: 100 } } padding: UM.Theme.getSize("wide_margin").width - contentItem: Item + contentItem: Grid { - id: applicationsContainer - anchors.fill: parent - anchors.margins: UM.Theme.getSize("wide_margin").width + id: ultimakerPlatformLinksGrid + columns: 3 + spacing: UM.Theme.getSize("default_margin").width - Grid + Repeater { - id: ultimakerPlatformLinksGrid - columns: 3 - spacing: UM.Theme.getSize("default_margin").width - anchors.top: parent.top - anchors.left: parent.left - - Repeater - { - model: - [ - { - displayName: catalog.i18nc("@label:button", "My printers"), - thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), - link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" - }, - { - displayName: "Digital Library", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Library", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), - link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" - }, - { - displayName: catalog.i18nc("@label:button", "Print jobs"), - thumbnail: UM.Theme.getIcon("FoodBeverages"), - description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), - link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" - }, - { - displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Shop", "high"), - description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), - link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" - }, - { - displayName: "Ultimaker Academy", //Not translated, since it's a brand name. - thumbnail: UM.Theme.getIcon("Knowledge"), - description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), - link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" - }, - { - displayName: catalog.i18nc("@label:button", "Ultimaker support"), - thumbnail: UM.Theme.getIcon("Help", "high"), - description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), - link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" - }, - { - displayName: catalog.i18nc("@label:button", "Ask a question"), - thumbnail: UM.Theme.getIcon("Speak", "high"), - description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), - link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" - }, - { - displayName: catalog.i18nc("@label:button", "Report a bug"), - thumbnail: UM.Theme.getIcon("Bug", "high"), - description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), - link: "https://github.com/Ultimaker/Cura/issues/new/choose" - }, - { - displayName: "Ultimaker.com", //Not translated, since it's a URL. - thumbnail: UM.Theme.getIcon("Browser"), - description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), - link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" - } - ] - - delegate: ApplicationButton + model: + [ { - displayName: modelData.displayName - iconSource: modelData.thumbnail - tooltipText: modelData.description - isExternalLink: true - - onClicked: Qt.openUrlExternally(modelData.link) + displayName: catalog.i18nc("@label:button", "My printers"), + thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), + link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" + }, + { + displayName: "Digital Library", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Library", "high"), + description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), + link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" + }, + { + displayName: catalog.i18nc("@label:button", "Print jobs"), + thumbnail: UM.Theme.getIcon("FoodBeverages"), + description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), + link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" + }, + { + displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Shop", "high"), + description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), + link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" + }, + { + displayName: "Ultimaker Academy", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Knowledge"), + description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), + link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" + }, + { + displayName: catalog.i18nc("@label:button", "Ultimaker support"), + thumbnail: UM.Theme.getIcon("Help", "high"), + description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), + link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" + }, + { + displayName: catalog.i18nc("@label:button", "Ask a question"), + thumbnail: UM.Theme.getIcon("Speak", "high"), + description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), + link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" + }, + { + displayName: catalog.i18nc("@label:button", "Report a bug"), + thumbnail: UM.Theme.getIcon("Bug", "high"), + description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), + link: "https://github.com/Ultimaker/Cura/issues/new/choose" + }, + { + displayName: "Ultimaker.com", //Not translated, since it's a URL. + thumbnail: UM.Theme.getIcon("Browser"), + description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), + link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" } + ] + + delegate: ApplicationButton + { + displayName: modelData.displayName + iconSource: modelData.thumbnail + tooltipText: modelData.description + isExternalLink: true + + onClicked: Qt.openUrlExternally(modelData.link) } } } From aa905a80fec6dfa22c06619b57b87682033063d3 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 09:48:27 +0200 Subject: [PATCH 40/49] Add animations to hover effect CURA-8421 --- resources/qml/Account/AccountWidget.qml | 2 ++ resources/qml/MainWindow/MainWindowHeader.qml | 1 + 2 files changed, 3 insertions(+) diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index ceb3988ca4..b058ead22f 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -42,6 +42,7 @@ Item radius: parent.radius color: UM.Theme.getColor("primary_text") opacity: signInButton.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } } } @@ -108,6 +109,7 @@ Item radius: parent.radius color: UM.Theme.getColor("primary_text") opacity: accountWidget.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } } } diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index 5282731537..815ddff732 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -108,6 +108,7 @@ Item radius: parent.radius color: UM.Theme.getColor("primary_text") opacity: marketplaceButton.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } } } From 5a8396651e7f6d90f424b799873f5989eb718303 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 12:59:43 +0200 Subject: [PATCH 41/49] Update the copy of the tooltips CURA-8422 --- .../ApplicationSwitcherPopup.qml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml index db19c827df..7d08b766a8 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml @@ -31,55 +31,55 @@ Popup { displayName: catalog.i18nc("@label:button", "My printers"), thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your printers in the Digital Factory."), + description: catalog.i18nc("@tooltip:button", "Monitor printers in Ultimaker Digital Factory."), link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" }, { displayName: "Digital Library", //Not translated, since it's a brand name. thumbnail: UM.Theme.getIcon("Library", "high"), - description: catalog.i18nc("@tooltip:button", "Manage your files in the Digital Library."), + description: catalog.i18nc("@tooltip:button", "Create print projects in Digital Library."), link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" }, { displayName: catalog.i18nc("@label:button", "Print jobs"), thumbnail: UM.Theme.getIcon("FoodBeverages"), - description: catalog.i18nc("@tooltip:button", "Manage things that are being printed."), + description: catalog.i18nc("@tooltip:button", "Monitor print jobs and reprint from your print history."), link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" }, { displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. thumbnail: UM.Theme.getIcon("Shop", "high"), - description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with new plug-ins and profiles."), + description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with plugins and material profiles."), link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" }, { displayName: "Ultimaker Academy", //Not translated, since it's a brand name. thumbnail: UM.Theme.getIcon("Knowledge"), - description: catalog.i18nc("@tooltip:button", "Become an expert in 3D printing."), + description: catalog.i18nc("@tooltip:button", "Become a 3D printing expert with Ultimaker e-learning."), link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" }, { displayName: catalog.i18nc("@label:button", "Ultimaker support"), thumbnail: UM.Theme.getIcon("Help", "high"), - description: catalog.i18nc("@tooltip:button", "Get help with how to use Ultimaker Cura."), + description: catalog.i18nc("@tooltip:button", "Learn how to get started with Ultimaker Cura."), link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" }, { displayName: catalog.i18nc("@label:button", "Ask a question"), thumbnail: UM.Theme.getIcon("Speak", "high"), - description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker community."), + description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker Community."), link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" }, { displayName: catalog.i18nc("@label:button", "Report a bug"), thumbnail: UM.Theme.getIcon("Bug", "high"), - description: catalog.i18nc("@tooltip:button", "Notify the developers that something is going wrong."), + description: catalog.i18nc("@tooltip:button", "Let developers know that something is going wrong."), link: "https://github.com/Ultimaker/Cura/issues/new/choose" }, { displayName: "Ultimaker.com", //Not translated, since it's a URL. thumbnail: UM.Theme.getIcon("Browser"), - description: catalog.i18nc("@tooltip:button", "Visit Ultimaker's website."), + description: catalog.i18nc("@tooltip:button", "Visit the Ultimaker website."), link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" } ] From 9b3103e62410e3ac1147fd11f514eac42f72e4a9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 13:00:45 +0200 Subject: [PATCH 42/49] Fix typo in changelog Found it when making the same typo in search. --- resources/texts/change_log.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index 6dc8835de1..d089d2c16b 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -98,7 +98,7 @@ When double clicking on a file in the open project dialog in Digital Factory it - Fixed a bug when the seam was not placed in sharpest corner. - Fixed the gantry height for S-line printers. - Fixed a bug where a model is partially below build plate if center selected model is used. -- Fixed a bug where a tootip arrow appeared when the "Manage printers" button is hovered. +- Fixed a bug where a tooltip arrow appeared when the "Manage printers" button is hovered. - Fixed a bug where assemblies were not arranged in the center of the build plate. * Printer definitions, profiles and materials. From e39675e447a149fe7dfe7cc74d805c4a1676e763 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 13:44:45 +0200 Subject: [PATCH 43/49] Use styled tooltip CURA-8422 --- resources/qml/ApplicationSwitcher/ApplicationButton.qml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index f90103ab7e..3ea5dc6f37 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -18,7 +18,7 @@ Button property color backgroundColor: hovered ? UM.Theme.getColor("primary") : "transparent" Behavior on backgroundColor { ColorAnimation { duration: 200; } } - + hoverEnabled: true width: UM.Theme.getSize("application_switcher_item").width height: UM.Theme.getSize("application_switcher_item").height @@ -29,10 +29,11 @@ Button border.width: UM.Theme.getSize("default_lining").width } - UM.TooltipArea + Cura.ToolTip { id: tooltip - anchors.fill: parent + tooltipText: base.text + visible: base.hovered } Column From 7d46e0a96c306a2a30f9e22947254f20f8292713 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 13:52:54 +0200 Subject: [PATCH 44/49] Fix styling of application button Fixes previous mistake that I made while simplifying the QML CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationButton.qml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index f90103ab7e..f4a3129798 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -15,8 +15,10 @@ Button property alias displayName: applicationDisplayName.text property alias tooltipText: tooltip.text property bool isExternalLink: false - property color backgroundColor: hovered ? UM.Theme.getColor("primary") : "transparent" + property color borderColor: hovered ? UM.Theme.getColor("primary") : "transparent" + property color backgroundColor: hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") Behavior on backgroundColor { ColorAnimation { duration: 200; } } + Behavior on borderColor { ColorAnimation { duration: 200; } } width: UM.Theme.getSize("application_switcher_item").width @@ -24,8 +26,8 @@ Button background: Rectangle { - color: backgroundColor - border.color: backgroundColor + color:backgroundColor + border.color: borderColor border.width: UM.Theme.getSize("default_lining").width } From 0656e11afa28235aeee42e5219172e2e76f10f3d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 22 Sep 2021 13:52:54 +0200 Subject: [PATCH 45/49] Fix styling of application button Fixes previous mistake that I made while simplifying the QML CURA-8421 --- resources/qml/ApplicationSwitcher/ApplicationButton.qml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml index 3ea5dc6f37..bcf780753c 100644 --- a/resources/qml/ApplicationSwitcher/ApplicationButton.qml +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -15,8 +15,10 @@ Button property alias displayName: applicationDisplayName.text property alias tooltipText: tooltip.text property bool isExternalLink: false - property color backgroundColor: hovered ? UM.Theme.getColor("primary") : "transparent" + property color borderColor: hovered ? UM.Theme.getColor("primary") : "transparent" + property color backgroundColor: hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") Behavior on backgroundColor { ColorAnimation { duration: 200; } } + Behavior on borderColor { ColorAnimation { duration: 200; } } hoverEnabled: true width: UM.Theme.getSize("application_switcher_item").width @@ -24,8 +26,8 @@ Button background: Rectangle { - color: backgroundColor - border.color: backgroundColor + color:backgroundColor + border.color: borderColor border.width: UM.Theme.getSize("default_lining").width } From 426e3064d2e913f70be9ada112201b89c1ba0aeb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Sep 2021 14:59:27 +0200 Subject: [PATCH 46/49] Don't crash when material file can't be opened for sending to printer It seems that due to the threaded nature, the limit to the number of open file handlers could be reached here. Or it could just be locked or something of course. Fixes Sentry issue CURA-2V2. --- plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py index 96a2b78e8f..877eaebcb7 100644 --- a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py +++ b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py @@ -133,6 +133,9 @@ class SendMaterialJob(Job): except FileNotFoundError: Logger.error("Unable to send material {material_id}, since it has been deleted in the meanwhile.".format(material_id = material_id)) return + except EnvironmentError as e: + Logger.error(f"Unable to send material {material_id}. We can't open that file for reading: {str(e)}") + return # Add the material signature file if needed. signature_file_path = "{}.sig".format(file_path) From b020f8efd429929edbcac9b39cd1c618ff3f7799 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Sep 2021 15:28:53 +0200 Subject: [PATCH 47/49] Also update version number of Digital Library in bundled versions Otherwise we still get an update notification when starting from factory defaults. The plug-in's real version is 1.1.0 now. --- resources/bundled_packages/cura.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/bundled_packages/cura.json b/resources/bundled_packages/cura.json index f1af8a7a90..c39684bc1f 100644 --- a/resources/bundled_packages/cura.json +++ b/resources/bundled_packages/cura.json @@ -124,7 +124,7 @@ "package_type": "plugin", "display_name": "Ultimaker Digital Library", "description": "Connects to the Digital Library, allowing Cura to open files from and save files to the Digital Library.", - "package_version": "1.0.0", + "package_version": "1.1.0", "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { From 5266cbb950af2d407dd1e04a9fc0c81f8ba9b942 Mon Sep 17 00:00:00 2001 From: Konstantinos Karmas Date: Thu, 23 Sep 2021 12:53:57 +0200 Subject: [PATCH 48/49] Initiate an account sync immediately after pressing "Add cloud printer" It was a bit weird that the sync didn't happen immediately and you had to wait for 30seconds until the printer appeared. --- resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml index 49d5b57021..1209071320 100644 --- a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml +++ b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml @@ -205,6 +205,7 @@ Item height: UM.Theme.getSize("message_action_button").height onClicked: { CuraApplication.getDiscoveredCloudPrintersModel().clear() + Cura.API.account.sync(true) base.addCloudPrinterButtonClicked() } } From 43f1df17238a244c1d7dafb4e75d4205115ed2e2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Sep 2021 15:31:33 +0200 Subject: [PATCH 49/49] Show error when failing to save archive It could be that you don't have permission to save the archive. Instead of crashing Cura, show an error to the user. Fixes Sentry issue CURA-2VS. --- cura/Machines/Models/MaterialManagementModel.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py index 40d81004fe..c75e16cd63 100644 --- a/cura/Machines/Models/MaterialManagementModel.py +++ b/cura/Machines/Models/MaterialManagementModel.py @@ -9,6 +9,7 @@ import zipfile # To export all materials in a .zip archive. from UM.i18n import i18nCatalog from UM.Logger import Logger +from UM.Message import Message from UM.Signal import postponeSignals, CompressTechnique import cura.CuraApplication # Imported like this to prevent circular imports. @@ -287,7 +288,17 @@ class MaterialManagementModel(QObject): """ registry = CuraContainerRegistry.getInstance() - archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED) + try: + archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED) + except OSError as e: + Logger.log("e", f"Can't write to destination {file_path.toLocalFile()}: {type(e)} - {str(e)}") + error_message = Message( + text = catalog.i18nc("@message:text", "Could not save material archive to {}:").format(file_path.toLocalFile()) + " " + str(e), + title = catalog.i18nc("@message:title", "Failed to save material archive"), + message_type = Message.MessageType.ERROR + ) + error_message.show() + return for metadata in registry.findInstanceContainersMetadata(type = "material"): if metadata["base_file"] != metadata["id"]: # Only process base files. continue