Fix The toolbox license dialog

CURA-6983
This commit is contained in:
Nino van Hooff 2020-01-10 11:40:57 +01:00
parent 317061029c
commit 88d210d12d
7 changed files with 35 additions and 32 deletions

View file

@ -96,17 +96,12 @@ Window
visible: toolbox.restartRequired visible: toolbox.restartRequired
height: visible ? UM.Theme.getSize("toolbox_footer").height : 0 height: visible ? UM.Theme.getSize("toolbox_footer").height : 0
} }
// TODO: Clean this up:
Connections Connections
{ {
target: toolbox target: toolbox
onShowLicenseDialog: onShowLicenseDialog: { licenseDialog.show() }
{ onCloseLicenseDialog: { licenseDialog.close() }
licenseDialog.pluginName = toolbox.getLicenseDialogPluginName();
licenseDialog.licenseContent = toolbox.getLicenseDialogLicenseContent();
licenseDialog.pluginFileLocation = toolbox.getLicenseDialogPluginFileLocation();
licenseDialog.show();
}
} }
ToolboxLicenseDialog ToolboxLicenseDialog

View file

@ -19,9 +19,6 @@ UM.Dialog
minimumHeight: UM.Theme.getSize("license_window_minimum").height minimumHeight: UM.Theme.getSize("license_window_minimum").height
width: minimumWidth width: minimumWidth
height: minimumHeight height: minimumHeight
property var pluginName;
property var licenseContent;
property var pluginFileLocation;
Item Item
{ {

View file

@ -4,6 +4,7 @@ from typing import Optional
from PyQt5.QtCore import QObject from PyQt5.QtCore import QObject
from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
from UM import i18nCatalog
from UM.Logger import Logger from UM.Logger import Logger
from UM.Message import Message from UM.Message import Message
from UM.Signal import Signal from UM.Signal import Signal
@ -11,7 +12,6 @@ from plugins.Toolbox.src.UltimakerCloudScope import UltimakerCloudScope
from cura.CuraApplication import CuraApplication from cura.CuraApplication import CuraApplication
from plugins.Toolbox.src.CloudApiModel import CloudApiModel from plugins.Toolbox.src.CloudApiModel import CloudApiModel
from plugins.Toolbox.src.CloudSync.SubscribedPackagesModel import SubscribedPackagesModel from plugins.Toolbox.src.CloudSync.SubscribedPackagesModel import SubscribedPackagesModel
from plugins.Toolbox.src.Toolbox import i18n_catalog
class CloudPackageChecker(QObject): class CloudPackageChecker(QObject):
@ -25,6 +25,7 @@ class CloudPackageChecker(QObject):
self._model = SubscribedPackagesModel() self._model = SubscribedPackagesModel()
self._application.initializationFinished.connect(self._onAppInitialized) self._application.initializationFinished.connect(self._onAppInitialized)
self._i18n_catalog = i18nCatalog("cura")
# This is a plugin, so most of the components required are not ready when # This is a plugin, so most of the components required are not ready when
# this is initialized. Therefore, we wait until the application is ready. # this is initialized. Therefore, we wait until the application is ready.
@ -56,13 +57,13 @@ class CloudPackageChecker(QObject):
def _handlePackageDiscrepancies(self): def _handlePackageDiscrepancies(self):
Logger.log("d", "Discrepancy found between Cloud subscribed packages and Cura installed packages") Logger.log("d", "Discrepancy found between Cloud subscribed packages and Cura installed packages")
sync_message = Message(i18n_catalog.i18nc( sync_message = Message(self._i18n_catalog.i18nc(
"@info:generic", "@info:generic",
"\nDo you want to sync material and software packages with your account?"), "\nDo you want to sync material and software packages with your account?"),
lifetime=0, lifetime=0,
title=i18n_catalog.i18nc("@info:title", "Changes detected from your Ultimaker account", )) title=self._i18n_catalog.i18nc("@info:title", "Changes detected from your Ultimaker account", ))
sync_message.addAction("sync", sync_message.addAction("sync",
name=i18n_catalog.i18nc("@action:button", "Sync"), name=self._i18n_catalog.i18nc("@action:button", "Sync"),
icon="", icon="",
description="Sync your Cloud subscribed packages to your local environment.", description="Sync your Cloud subscribed packages to your local environment.",
button_align=Message.ActionButtonAlignment.ALIGN_RIGHT) button_align=Message.ActionButtonAlignment.ALIGN_RIGHT)

View file

@ -40,7 +40,7 @@ class LicenseModel(QObject):
self._license_text = license_text self._license_text = license_text
self.licenseTextChanged.emit() self.licenseTextChanged.emit()
def setCurrentPageNumber(self, idx: int) -> None: def setCurrentPageIdx(self, idx: int) -> None:
self._current_page_idx = idx self._current_page_idx = idx
self._updateDialogTitle() self._updateDialogTitle()

View file

@ -78,7 +78,7 @@ class LicensePresenter(QObject):
self.onLicenseAccepted() self.onLicenseAccepted()
return return
self._license_model.setCurrentPageNumber(self._current_package_idx) self._license_model.setCurrentPageIdx(self._current_package_idx)
self._license_model.setPackageName(package_model["package_id"]) self._license_model.setPackageName(package_model["package_id"])
self._license_model.setLicenseText(license_content) self._license_model.setLicenseText(license_content)

View file

@ -4,7 +4,7 @@ from UM.Extension import Extension
from UM.Logger import Logger from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry from UM.PluginRegistry import PluginRegistry
from cura.CuraApplication import CuraApplication from cura.CuraApplication import CuraApplication
from plugins.Toolbox import CloudPackageChecker from plugins.Toolbox.src.CloudSync.CloudPackageChecker import CloudPackageChecker
from plugins.Toolbox.src.CloudSync.DiscrepanciesPresenter import DiscrepanciesPresenter from plugins.Toolbox.src.CloudSync.DiscrepanciesPresenter import DiscrepanciesPresenter
from plugins.Toolbox.src.CloudSync.DownloadPresenter import DownloadPresenter from plugins.Toolbox.src.CloudSync.DownloadPresenter import DownloadPresenter
from plugins.Toolbox.src.CloudSync.LicensePresenter import LicensePresenter from plugins.Toolbox.src.CloudSync.LicensePresenter import LicensePresenter

View file

@ -22,6 +22,7 @@ from cura.Machines.ContainerTree import ContainerTree
from plugins.Toolbox.src.CloudApiModel import CloudApiModel from plugins.Toolbox.src.CloudApiModel import CloudApiModel
from .AuthorsModel import AuthorsModel from .AuthorsModel import AuthorsModel
from .CloudSync.LicenseModel import LicenseModel
from .PackagesModel import PackagesModel from .PackagesModel import PackagesModel
from .CloudSync.SubscribedPackagesModel import SubscribedPackagesModel from .CloudSync.SubscribedPackagesModel import SubscribedPackagesModel
from .UltimakerCloudScope import UltimakerCloudScope from .UltimakerCloudScope import UltimakerCloudScope
@ -77,6 +78,8 @@ class Toolbox(QObject, Extension):
self._materials_installed_model = PackagesModel(self) self._materials_installed_model = PackagesModel(self)
self._materials_generic_model = PackagesModel(self) self._materials_generic_model = PackagesModel(self)
self._license_model = LicenseModel()
# These properties are for keeping track of the UI state: # These properties are for keeping track of the UI state:
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# View category defines which filter to use, and therefore effectively # View category defines which filter to use, and therefore effectively
@ -99,8 +102,6 @@ class Toolbox(QObject, Extension):
self._restart_required = False # type: bool self._restart_required = False # type: bool
# variables for the license agreement dialog # variables for the license agreement dialog
self._license_dialog_plugin_name = "" # type: str
self._license_dialog_license_content = "" # type: str
self._license_dialog_plugin_file_location = "" # type: str self._license_dialog_plugin_file_location = "" # type: str
self._restart_dialog_message = "" # type: str self._restart_dialog_message = "" # type: str
@ -122,6 +123,7 @@ class Toolbox(QObject, Extension):
filterChanged = pyqtSignal() filterChanged = pyqtSignal()
metadataChanged = pyqtSignal() metadataChanged = pyqtSignal()
showLicenseDialog = pyqtSignal() showLicenseDialog = pyqtSignal()
closeLicenseDialog = pyqtSignal()
uninstallVariablesChanged = pyqtSignal() uninstallVariablesChanged = pyqtSignal()
## Go back to the start state (welcome screen or loading if no login required) ## Go back to the start state (welcome screen or loading if no login required)
@ -155,21 +157,16 @@ class Toolbox(QObject, Extension):
data=data.encode() data=data.encode()
) )
@pyqtSlot(result = str)
def getLicenseDialogPluginName(self) -> str:
return self._license_dialog_plugin_name
@pyqtSlot(result = str)
def getLicenseDialogPluginFileLocation(self) -> str: def getLicenseDialogPluginFileLocation(self) -> str:
return self._license_dialog_plugin_file_location return self._license_dialog_plugin_file_location
@pyqtSlot(result = str)
def getLicenseDialogLicenseContent(self) -> str:
return self._license_dialog_license_content
def openLicenseDialog(self, plugin_name: str, license_content: str, plugin_file_location: str) -> None: def openLicenseDialog(self, plugin_name: str, license_content: str, plugin_file_location: str) -> None:
self._license_dialog_plugin_name = plugin_name # Set page 1/1 when opening the dialog for a single package
self._license_dialog_license_content = license_content self._license_model.setCurrentPageIdx(0)
self._license_model.setPageCount(1)
self._license_model.setPackageName(plugin_name)
self._license_model.setLicenseText(license_content)
self._license_dialog_plugin_file_location = plugin_file_location self._license_dialog_plugin_file_location = plugin_file_location
self.showLicenseDialog.emit() self.showLicenseDialog.emit()
@ -227,7 +224,11 @@ class Toolbox(QObject, Extension):
return None return None
path = os.path.join(plugin_path, "resources", "qml", qml_name) path = os.path.join(plugin_path, "resources", "qml", qml_name)
dialog = self._application.createQmlComponent(path, {"toolbox": self}) dialog = self._application.createQmlComponent(path, {
"toolbox": self,
"handler": self,
"licenseModel": self._license_model
})
if not dialog: if not dialog:
raise Exception("Failed to create Marketplace dialog") raise Exception("Failed to create Marketplace dialog")
return dialog return dialog
@ -376,6 +377,15 @@ class Toolbox(QObject, Extension):
self._resetUninstallVariables() self._resetUninstallVariables()
self.closeConfirmResetDialog() self.closeConfirmResetDialog()
@pyqtSlot()
def onLicenseAccepted(self):
self.closeLicenseDialog.emit()
self.install(self.getLicenseDialogPluginFileLocation())
@pyqtSlot()
def onLicenseDeclined(self):
self.closeLicenseDialog.emit()
def _markPackageMaterialsAsToBeUninstalled(self, package_id: str) -> None: def _markPackageMaterialsAsToBeUninstalled(self, package_id: str) -> None:
container_registry = self._application.getContainerRegistry() container_registry = self._application.getContainerRegistry()