diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 1454dc9a47..4a5300f9f0 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -54,6 +54,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): else: Logger.log("w", "Could not find reader that was able to read the scene data for 3MF workspace") return WorkspaceReader.PreReadResult.failed + machine_name = "" # Check if there are any conflicts, so we can ask the user. archive = zipfile.ZipFile(file_name, "r") @@ -95,6 +96,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): quality_name = "" quality_type = "" num_settings_overriden_by_quality_changes = 0 # How many settings are changed by the quality changes + num_user_settings = 0 for instance_container_file in instance_container_files: container_id = self._stripFileToId(instance_container_file) instance_container = InstanceContainer(container_id) @@ -117,6 +119,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if quality_name == "": quality_name = instance_container.getName() quality_type = instance_container.getName() + elif container_type == "user": + num_user_settings += len(instance_container._instances) Job.yieldThread() num_visible_settings = 0 try: @@ -142,6 +146,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._dialog.setQualityName(quality_name) self._dialog.setQualityType(quality_type) self._dialog.setNumSettingsOverridenByQualityChanges(num_settings_overriden_by_quality_changes) + self._dialog.setNumUserSettings(num_user_settings) self._dialog.setActiveMode(active_mode) self._dialog.setMachineName(machine_name) self._dialog.setMaterialLabels(material_labels) diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index e3425078e7..f8bec06dd4 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -36,6 +36,7 @@ class WorkspaceDialog(QObject): self._has_machine_conflict = False self._has_material_conflict = False self._num_visible_settings = 0 + self._num_user_settings = 0 self._active_mode = "" self._quality_name = "" self._num_settings_overriden_by_quality_changes = 0 @@ -55,6 +56,15 @@ class WorkspaceDialog(QObject): machineNameChanged = pyqtSignal() materialLabelsChanged = pyqtSignal() objectsOnPlateChanged = pyqtSignal() + numUserSettingsChanged = pyqtSignal() + + def setNumUserSettings(self, num_user_settings): + self._num_user_settings = num_user_settings + self.numVisibleSettingsChanged.emit() + + @pyqtProperty(int, notify=numUserSettingsChanged) + def numUserSettings(self): + return self._num_user_settings @pyqtProperty(bool, notify=objectsOnPlateChanged) def hasObjectsOnPlate(self): diff --git a/plugins/3MFReader/WorkspaceDialog.qml b/plugins/3MFReader/WorkspaceDialog.qml index fa69bc08c7..f9e5a02f8e 100644 --- a/plugins/3MFReader/WorkspaceDialog.qml +++ b/plugins/3MFReader/WorkspaceDialog.qml @@ -168,7 +168,23 @@ UM.Dialog Row { width: parent.width - height: childrenRect.height + height: manager.numUserSettings != 0 ? childrenRect.height : 0 + Label + { + text: catalog.i18nc("@action:label", "Not in profile") + width: parent.width / 3 + } + Label + { + text: catalog.i18nc("@action:label", "%1 override(s)").arg(manager.numUserSettings) + width: parent.width / 3 + } + visible: manager.numUserSettings != 0 + } + Row + { + width: parent.width + height: manager.numSettingsOverridenByQualityChanges != 0 ? childrenRect.height : 0 Label { text: catalog.i18nc("@action:label", "Derivative from")