From 6bb1b7ec8063fbc1eac2d689cdebe75d0376964a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 2 Dec 2016 11:54:28 +0100 Subject: [PATCH] Number of settings & mode are now displayed in open Project CURA-1263 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 14 +- plugins/3MFReader/WorkspaceDialog.py | 30 ++++ plugins/3MFReader/WorkspaceDialog.qml | 167 ++++++++++++-------- 3 files changed, 141 insertions(+), 70 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 8e3f8e64aa..f920cbe8fb 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -103,8 +103,18 @@ class ThreeMFWorkspaceReader(WorkspaceReader): quality_changes_conflict = True break Job.yieldThread() + + num_visible_settings = 0 try: - archive.open("Cura/preferences.cfg") + temp_preferences = Preferences() + temp_preferences.readFromFile(io.TextIOWrapper(archive.open("Cura/preferences.cfg"))) # We need to wrap it, else the archive parser breaks. + + visible_settings_string = temp_preferences.getValue("general/visible_settings") + if visible_settings_string is not None: + num_visible_settings = len(visible_settings_string.split(";")) + active_mode = temp_preferences.getValue("cura/active_mode") + if not active_mode: + active_mode = Preferences.getInstance().getValue("cura/active_mode") except KeyError: # If there is no preferences file, it's not a workspace, so notify user of failure. Logger.log("w", "File %s is not a valid workspace.", file_name) @@ -114,6 +124,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._dialog.setMachineConflict(machine_conflict) self._dialog.setQualityChangesConflict(quality_changes_conflict) self._dialog.setMaterialConflict(material_conflict) + self._dialog.setNumVisibleSettings(num_visible_settings) + self._dialog.setActiveMode(active_mode) self._dialog.show() # Block until the dialog is closed. diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index bf9dce8264..9fc6459af4 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -3,10 +3,12 @@ from PyQt5.QtQml import QQmlComponent, QQmlContext from UM.PluginRegistry import PluginRegistry from UM.Application import Application from UM.Logger import Logger +from UM.i18n import i18nCatalog import os import threading import time +i18n_catalog = i18nCatalog("cura") class WorkspaceDialog(QObject): showDialogSignal = pyqtSignal() @@ -28,10 +30,38 @@ class WorkspaceDialog(QObject): self._has_quality_changes_conflict = False self._has_machine_conflict = False self._has_material_conflict = False + self._num_visible_settings = 0 + self._active_mode = "" machineConflictChanged = pyqtSignal() qualityChangesConflictChanged = pyqtSignal() materialConflictChanged = pyqtSignal() + numVisibleSettingsChanged = pyqtSignal() + activeModeChanged = pyqtSignal() + + @pyqtProperty(str, notify=activeModeChanged) + def activeMode(self): + return self._active_mode + + def setActiveMode(self, active_mode): + if active_mode == 0: + self._active_mode = i18n_catalog.i18nc("@title:tab", "Recommended") + else: + self._active_mode = i18n_catalog.i18nc("@title:tab", "Custom") + self.activeModeChanged.emit() + + @pyqtProperty(int, constant = True) + def totalNumberOfSettings(self): + # TODO: actually calculate this. + return 200 + + @pyqtProperty(int, notify = numVisibleSettingsChanged) + def numVisibleSettings(self): + return self._num_visible_settings + + def setNumVisibleSettings(self, num_visible_settings): + self._num_visible_settings = num_visible_settings + self.numVisibleSettingsChanged.emit() @pyqtProperty(bool, notify = machineConflictChanged) def machineConflict(self): diff --git a/plugins/3MFReader/WorkspaceDialog.qml b/plugins/3MFReader/WorkspaceDialog.qml index 3896e94869..fbec1180c6 100644 --- a/plugins/3MFReader/WorkspaceDialog.qml +++ b/plugins/3MFReader/WorkspaceDialog.qml @@ -12,13 +12,13 @@ UM.Dialog { title: catalog.i18nc("@title:window", "Import workspace conflict") - width: 350 * Screen.devicePixelRatio; - minimumWidth: 350 * Screen.devicePixelRatio; - maximumWidth: 350 * Screen.devicePixelRatio; + width: 500 * Screen.devicePixelRatio; + minimumWidth: 500 * Screen.devicePixelRatio; + maximumWidth: 500 * Screen.devicePixelRatio; - height: 250 * Screen.devicePixelRatio; - minimumHeight: 250 * Screen.devicePixelRatio; - maximumHeight: 250 * Screen.devicePixelRatio; + height: 350 * Screen.devicePixelRatio; + minimumHeight: 350 * Screen.devicePixelRatio; + maximumHeight: 350 * Screen.devicePixelRatio; onClosing: manager.notifyClosed() onVisibleChanged: @@ -96,6 +96,26 @@ UM.Dialog text: catalog.i18nc("@action:label", "TOCHANGE") width: parent.width / 3 } + + UM.TooltipArea + { + id: machineResolveTooltip + width: parent.width / 3 + height: visible ? 25 : 0 + text: catalog.i18nc("@info:tooltip", "How should the conflict in the machine be resolved?") + ComboBox + { + model: resolveStrategiesModel + textRole: "label" + id: machineResolveComboBox + width: parent.width + enabled: manager.machineConflict + onActivated: + { + manager.setResolveStrategy("machine", resolveStrategiesModel.get(index).key) + } + } + } } Label @@ -118,60 +138,20 @@ UM.Dialog text: catalog.i18nc("@action:label", "TOCHANGE") width: parent.width / 3 } - } - UM.TooltipArea - { - id: machineResolveTooltip - width: parent.width - height: visible ? 25 : 0 - text: catalog.i18nc("@info:tooltip", "How should the conflict in the machine be resolved?") - visible: manager.machineConflict - Row + UM.TooltipArea { - width: parent.width - height: childrenRect.height - Label - { - text: catalog.i18nc("@action:label","Machine") - width: 150 - } - - ComboBox - { - model: resolveStrategiesModel - textRole: "label" - id: machineResolveComboBox - width: 150 - onActivated: - { - manager.setResolveStrategy("machine", resolveStrategiesModel.get(index).key) - } - } - } - } - UM.TooltipArea - { - id: qualityChangesResolveTooltip - width: parent.width - height: visible ? 25 : 0 - text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?") - visible: manager.qualityChangesConflict - Row - { - width: parent.width - height: childrenRect.height - Label - { - text: catalog.i18nc("@action:label","Profile") - width: 150 - } - + id: qualityChangesResolveTooltip + width: parent.width / 3 + height: visible ? 25 : 0 + text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?") ComboBox { model: resolveStrategiesModel textRole: "label" id: qualityChangesResolveComboBox + enabled: manager.qualityChangesConflict + width: parent.width onActivated: { manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(index).key) @@ -179,28 +159,41 @@ UM.Dialog } } } - UM.TooltipArea - { - id: materialResolveTooltip - width: parent.width - height: visible ? 25 : 0 - text: catalog.i18nc("@info:tooltip", "How should the conflict in the material(s) be resolved?") - visible: manager.materialConflict - Row - { - width: parent.width - height: childrenRect.height - Label - { - text: catalog.i18nc("@action:label","Material") - width: 150 - } + Label + { + text: catalog.i18nc("@action:label", "Material settings") + font.bold: true + } + + Row + { + width: parent.width + height: childrenRect.height + Label + { + text: catalog.i18nc("@action:label", "Type") + width: parent.width / 3 + } + Label + { + text: catalog.i18nc("@action:label", "TOCHANGE") + width: parent.width / 3 + } + + UM.TooltipArea + { + id: materialResolveTooltip + width: parent.width / 3 + height: visible ? 25 : 0 + text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?") ComboBox { model: resolveStrategiesModel textRole: "label" id: materialResolveComboBox + enabled: manager.materialConflict + width: parent.width onActivated: { manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key) @@ -208,6 +201,42 @@ UM.Dialog } } } + + Label + { + text: catalog.i18nc("@action:label", "Setting visibility") + font.bold: true + } + Row + { + width: parent.width + height: childrenRect.height + Label + { + text: catalog.i18nc("@action:label", "Mode") + width: parent.width / 3 + } + Label + { + text: manager.activeMode + width: parent.width / 3 + } + } + Row + { + width: parent.width + height: childrenRect.height + Label + { + text: catalog.i18nc("@action:label", "Visible settings:") + width: parent.width / 3 + } + Label + { + text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings) + width: parent.width / 3 + } + } } } rightButtons: [