From eecbe20830ca35c0930d86de90a2ee846f08834d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 22 May 2018 15:06:27 +0200 Subject: [PATCH] Enabled drag-n-drop for curapackages --- cura/CuraPackageManager.py | 9 ++++++++- resources/qml/Cura.qml | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index 0c2c438fcc..a4b60b3251 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -8,13 +8,14 @@ import shutil import zipfile import tempfile -from PyQt5.QtCore import pyqtSlot, QObject, pyqtSignal +from PyQt5.QtCore import pyqtSlot, QObject, pyqtSignal, QUrl from UM.Application import Application from UM.Logger import Logger from UM.Resources import Resources from UM.Version import Version + class CuraPackageManager(QObject): Version = 1 @@ -184,6 +185,12 @@ class CuraPackageManager(QObject): def isPackageInstalled(self, package_id: str) -> bool: return self.getInstalledPackageInfo(package_id) is not None + # This is called by drag-and-dropping curapackage files. + @pyqtSlot(QUrl) + def installPackageViaDragAndDrop(self, file_url: str) -> None: + filename = QUrl(file_url).toLocalFile() + return self.installPackage(filename) + # Schedules the given package file to be installed upon the next start. @pyqtSlot(str) def installPackage(self, filename: str) -> None: diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index ac37cce10a..9d21de0535 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -323,6 +323,21 @@ UM.MainWindow { if (drop.urls.length > 0) { + // As the drop area also supports plugins, first check if it's a plugin that was dropped. + if (drop.urls.length == 1) + { + var filename = drop.urls[0]; + if (filename.endsWith(".curapackage")) + { + // Try to install plugin & close. + CuraApplication.getCuraPackageManager().installPackageViaDragAndDrop(filename); + packageInstallDialog.text = catalog.i18nc("@label", "This package will be installed after restarting."); + packageInstallDialog.icon = StandardIcon.Information; + packageInstallDialog.open(); + return; + } + } + openDialog.handleOpenFileUrls(drop.urls); } } @@ -789,6 +804,14 @@ UM.MainWindow } } + MessageDialog + { + id: packageInstallDialog + title: catalog.i18nc("@window:title", "Install Package"); + standardButtons: StandardButton.Ok + modality: Qt.ApplicationModal + } + MessageDialog { id: infoMultipleFilesWithGcodeDialog title: catalog.i18nc("@title:window", "Open File(s)")