diff --git a/cura/MachineAction.py b/cura/MachineAction.py index 773a1cad1a..0f05401c89 100644 --- a/cura/MachineAction.py +++ b/cura/MachineAction.py @@ -2,8 +2,9 @@ # Cura is released under the terms of the LGPLv3 or higher. import os +from typing import Optional -from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal +from PyQt5.QtCore import QObject, QUrl, pyqtSlot, pyqtProperty, pyqtSignal from UM.Logger import Logger from UM.PluginObject import PluginObject @@ -72,18 +73,26 @@ class MachineAction(QObject, PluginObject): return self._finished ## Protected helper to create a view object based on provided QML. - def _createViewFromQML(self) -> None: + def _createViewFromQML(self) -> Optional["QObject"]: plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId()) if plugin_path is None: Logger.log("e", "Cannot create QML view: cannot find plugin path for plugin [%s]", self.getPluginId()) - return + return None path = os.path.join(plugin_path, self._qml_url) from cura.CuraApplication import CuraApplication - self._view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self}) + view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self}) + return view - @pyqtProperty(QObject, constant = True) - def displayItem(self): - if not self._view: - self._createViewFromQML() - return self._view + @pyqtProperty(QUrl, constant = True) + def qmlPath(self) -> "QUrl": + plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId()) + if plugin_path is None: + Logger.log("e", "Cannot create QML view: cannot find plugin path for plugin [%s]", self.getPluginId()) + return QUrl("") + path = os.path.join(plugin_path, self._qml_url) + return QUrl.fromLocalFile(path) + + @pyqtSlot(result = QObject) + def getDisplayItem(self) -> Optional["QObject"]: + return self._createViewFromQML() diff --git a/cura/Machines/Models/FirstStartMachineActionsModel.py b/cura/Machines/Models/FirstStartMachineActionsModel.py index 240571e6dc..ce0e9bf856 100644 --- a/cura/Machines/Models/FirstStartMachineActionsModel.py +++ b/cura/Machines/Models/FirstStartMachineActionsModel.py @@ -100,7 +100,7 @@ class FirstStartMachineActionsModel(ListModel): item_list = [] for item in first_start_actions: item_list.append({"title": item.label, - "content": item.displayItem, + "content": item.getDisplayItem(), "action": item, }) item.reset() diff --git a/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml b/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml index e05d8e75fc..65f1e8a57a 100644 --- a/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml +++ b/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml @@ -26,7 +26,7 @@ Item property int columnWidth: ((parent.width - 2 * UM.Theme.getSize("default_margin").width) / 2) | 0 property int columnSpacing: 3 * screenScaleFactor - property int propertyStoreIndex: manager.storeContainerIndex // definition_changes + property int propertyStoreIndex: manager ? manager.storeContainerIndex : 1 // definition_changes property string extruderStackId: "" property int extruderPosition: 0 diff --git a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml index 3b31a5de36..4ba0d19390 100644 --- a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml +++ b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml @@ -26,7 +26,7 @@ Item property int columnWidth: ((parent.width - 2 * UM.Theme.getSize("default_margin").width) / 2) | 0 property int columnSpacing: 3 * screenScaleFactor - property int propertyStoreIndex: manager.storeContainerIndex // definition_changes + property int propertyStoreIndex: manager ? manager.storeContainerIndex : 1 // definition_changes property string machineStackId: Cura.MachineManager.activeMachineId diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index cbbb0b80bf..932529de99 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -100,10 +100,11 @@ UM.ManagementPage text: machineActionRepeater.model[index].label onClicked: { - actionDialog.content = machineActionRepeater.model[index].displayItem; - machineActionRepeater.model[index].displayItem.reset(); - actionDialog.title = machineActionRepeater.model[index].label; - actionDialog.show(); + var currentItem = machineActionRepeater.model[index] + actionDialog.loader.manager = currentItem + actionDialog.loader.source = currentItem.qmlPath + actionDialog.title = currentItem.label + actionDialog.show() } } } @@ -113,13 +114,7 @@ UM.ManagementPage UM.Dialog { id: actionDialog - property var content - onContentChanged: - { - contents = content; - content.onCompleted.connect(hide) - content.dialog = actionDialog - } + rightButtons: Button { text: catalog.i18nc("@action:button", "Close")