diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index b846d98299..86da9bf57f 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -18,6 +18,8 @@ from enum import IntEnum import os # To get the username import gzip +from cura.Settings.CuraContainerRegistry import CuraContainerRegistry + class AuthState(IntEnum): NotAuthenticated = 1 @@ -319,12 +321,27 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._manager.authenticationRequired.connect(self._onAuthenticationRequired) if self._properties.get(b"temporary", b"false") != b"true": - CuraApplication.getInstance().getMachineManager().checkCorrectGroupName(self.getId(), self.name) + self._checkCorrectGroupName(self.getId(), self.name) def _registerOnFinishedCallback(self, reply: QNetworkReply, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: if on_finished is not None: self._onFinishedCallbacks[reply.url().toString() + str(reply.operation())] = on_finished + ## This method checks if the name of the group stored in the definition container is correct. + # After updating from 3.2 to 3.3 some group names may be temporary. If there is a mismatch in the name of the group + # then all the container stacks are updated, both the current and the hidden ones. + def _checkCorrectGroupName(self, device_id: str, group_name: str) -> None: + global_container_stack = CuraApplication.getInstance().getGlobalContainerStack() + active_machine_network_name = CuraApplication.getInstance().getMachineManager().activeMachineNetworkKey() + if global_container_stack and device_id == active_machine_network_name: + # Check if the group_name is correct. If not, update all the containers connected to the same printer + if CuraApplication.getInstance().getMachineManager().activeMachineNetworkGroupName != group_name: + metadata_filter = {"um_network_key": active_machine_network_name} + containers = CuraContainerRegistry.getInstance().findContainerStacks(type="machine", + **metadata_filter) + for container in containers: + container.setMetaDataEntry("group_name", group_name) + def _handleOnFinished(self, reply: QNetworkReply) -> None: # Due to garbage collection, we need to cache certain bits of post operations. # As we don't want to keep them around forever, delete them if we get a reply. diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 3cee636d1d..736cb06d49 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -683,11 +683,6 @@ class MachineManager(QObject): return False return True - ## Check if a container is read_only - @pyqtSlot(str, result = bool) - def isReadOnly(self, container_id: str) -> bool: - return CuraContainerRegistry.getInstance().isReadOnly(container_id) - ## Copy the value of the setting of the current extruder to all other extruders as well as the global container. @pyqtSlot(str) def copyValueToExtruders(self, key: str) -> None: @@ -1065,9 +1060,6 @@ class MachineManager(QObject): def _onMaterialNameChanged(self) -> None: self.activeMaterialChanged.emit() - def _onQualityNameChanged(self) -> None: - self.activeQualityChanged.emit() - def _getContainerChangedSignals(self) -> List[Signal]: if self._global_container_stack is None: return [] @@ -1463,31 +1455,6 @@ class MachineManager(QObject): if self.hasUserSettings and self._application.getPreferences().getValue("cura/active_mode") == 1: self._application.discardOrKeepProfileChanges() - ## Find all container stacks that has the pair 'key = value' in its metadata and replaces the value with 'new_value' - def replaceContainersMetadata(self, key: str, value: str, new_value: str) -> None: - machines = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine") - for machine in machines: - if machine.getMetaDataEntry(key) == value: - machine.setMetaDataEntry(key, new_value) - - ## This method checks if the name of the group stored in the definition container is correct. - # After updating from 3.2 to 3.3 some group names may be temporary. If there is a mismatch in the name of the group - # then all the container stacks are updated, both the current and the hidden ones. - def checkCorrectGroupName(self, device_id: str, group_name: str) -> None: - if self._global_container_stack and device_id == self.activeMachineNetworkKey(): - # Check if the group_name is correct. If not, update all the containers connected to the same printer - if self.activeMachineNetworkGroupName != group_name: - metadata_filter = {"um_network_key": self.activeMachineNetworkKey()} - containers = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) - for container in containers: - container.setMetaDataEntry("group_name", group_name) - - ## This method checks if there is an instance connected to the given network_key - def existNetworkInstances(self, network_key: str) -> bool: - metadata_filter = {"um_network_key": network_key} - containers = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) - return bool(containers) - @pyqtSlot("QVariant") def setGlobalVariant(self, container_node: "ContainerNode") -> None: self.blurSettings.emit() diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index 09fcff9758..332c57ceb1 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -155,7 +155,7 @@ class WorkspaceDialog(QObject): def setNumSettingsOverriddenByQualityChanges(self, num_settings_overridden_by_quality_changes): self._num_settings_overridden_by_quality_changes = num_settings_overridden_by_quality_changes - self.numSettingsOverriddenByQualityChangesChanged.emit() + self.numSettingsOverridenByQualityChangesChanged.emit() @pyqtProperty(str, notify=qualityNameChanged) def qualityName(self): diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml index 957d8170cf..6a035cc624 100644 --- a/plugins/SimulationView/SimulationViewMenuComponent.qml +++ b/plugins/SimulationView/SimulationViewMenuComponent.qml @@ -177,7 +177,6 @@ Cura.ExpandableComponent height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height width: parent.width visible: !UM.SimulationView.compatibilityMode - enabled: index < 4 onClicked: { diff --git a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml index e238132680..81649fdfef 100644 --- a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml +++ b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml @@ -26,7 +26,7 @@ UM.Dialog minimumWidth: 450 * screenScaleFactor minimumHeight: 150 * screenScaleFactor - modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal + modality: Qt.WindowModal Column { diff --git a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py index a2a319b46a..28e7b60a0e 100644 --- a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py +++ b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py @@ -115,7 +115,7 @@ class DiscoverUM3Action(MachineAction): previous_connect_group_name = meta_data["group_name"] global_container_stack.setMetaDataEntry("group_name", group_name) # Find all the places where there is the same group name and change it accordingly - CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "group_name", value = previous_connect_group_name, new_value = group_name) + self._replaceContainersMetadata(key = "group_name", value = previous_connect_group_name, new_value = group_name) else: global_container_stack.setMetaDataEntry("group_name", group_name) # Set the default value for "hidden", which is used when you have a group with multiple types of printers @@ -125,6 +125,13 @@ class DiscoverUM3Action(MachineAction): # Ensure that the connection states are refreshed. self._network_plugin.refreshConnections() + ## Find all container stacks that has the pair 'key = value' in its metadata and replaces the value with 'new_value' + def _replaceContainersMetadata(self, key: str, value: str, new_value: str) -> None: + machines = CuraContainerRegistry.getInstance().findContainerStacks(type="machine") + for machine in machines: + if machine.getMetaDataEntry(key) == value: + machine.setMetaDataEntry(key, new_value) + # Associates the currently active machine with the given printer device. The network connection information will be # stored into the metadata of the currently active machine. @pyqtSlot(QObject) @@ -150,7 +157,9 @@ class DiscoverUM3Action(MachineAction): @pyqtSlot(str, result = bool) def existsKey(self, key: str) -> bool: - return CuraApplication.getInstance().getMachineManager().existNetworkInstances(network_key = key) + metadata_filter = {"um_network_key": key} + containers = CuraContainerRegistry.getInstance().findContainerStacks(type="machine", **metadata_filter) + return bool(containers) @pyqtSlot() def loadConfigurationFromPrinter(self) -> None: diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index c35e845993..81c14aa01a 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -282,7 +282,7 @@ Item { id: groupObjectsAction text: catalog.i18nc("@action:inmenu menubar:edit","&Group Models"); - enabled: UM.Scene.numObjectsSelected > 1 ? true: false + enabled: UM.Selection.selectionCount > 1 ? true: false iconName: "object-group" shortcut: "Ctrl+G"; onTriggered: CuraApplication.groupSelected(); @@ -302,7 +302,7 @@ Item { id: unGroupObjectsAction text: catalog.i18nc("@action:inmenu menubar:edit","Ungroup Models"); - enabled: UM.Scene.isGroupSelected + enabled: UM.Selection.isGroupSelected iconName: "object-ungroup" shortcut: "Ctrl+Shift+G"; onTriggered: CuraApplication.ungroupSelected(); @@ -312,7 +312,7 @@ Item { id: mergeObjectsAction text: catalog.i18nc("@action:inmenu menubar:edit","&Merge Models"); - enabled: UM.Scene.numObjectsSelected > 1 ? true: false + enabled: UM.Selection.selectionCount > 1 ? true: false iconName: "merge"; shortcut: "Ctrl+Alt+G"; onTriggered: CuraApplication.mergeSelected(); diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 3a43c5647f..a47ab28755 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -563,7 +563,7 @@ UM.MainWindow //: File open dialog title title: catalog.i18nc("@title:window","Open file(s)") - modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal; + modality: Qt.WindowModal selectMultiple: true nameFilters: UM.MeshFileHandler.supportedReadFileTypes; folder: CuraApplication.getDefaultPath("dialog_load_path") diff --git a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml index 6b1856723b..f6436f62c5 100644 --- a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml +++ b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml @@ -26,7 +26,7 @@ UM.Dialog minimumHeight: maximumHeight minimumWidth: maximumWidth - modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal + modality: Qt.WindowModal property var fileUrl diff --git a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml index 3dcd4b6236..0df914805a 100644 --- a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml @@ -25,7 +25,7 @@ UM.Dialog minimumHeight: height minimumWidth: width - modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal; + modality: Qt.WindowModal property var fileUrls: [] property int spacerHeight: 10 * screenScaleFactor