Enabled drag-n-drop for curapackages

This commit is contained in:
Lipu Fei 2018-05-22 15:06:27 +02:00
parent fea37b52be
commit eecbe20830
2 changed files with 31 additions and 1 deletions

View file

@ -8,13 +8,14 @@ import shutil
import zipfile import zipfile
import tempfile import tempfile
from PyQt5.QtCore import pyqtSlot, QObject, pyqtSignal from PyQt5.QtCore import pyqtSlot, QObject, pyqtSignal, QUrl
from UM.Application import Application from UM.Application import Application
from UM.Logger import Logger from UM.Logger import Logger
from UM.Resources import Resources from UM.Resources import Resources
from UM.Version import Version from UM.Version import Version
class CuraPackageManager(QObject): class CuraPackageManager(QObject):
Version = 1 Version = 1
@ -184,6 +185,12 @@ class CuraPackageManager(QObject):
def isPackageInstalled(self, package_id: str) -> bool: def isPackageInstalled(self, package_id: str) -> bool:
return self.getInstalledPackageInfo(package_id) is not None 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. # Schedules the given package file to be installed upon the next start.
@pyqtSlot(str) @pyqtSlot(str)
def installPackage(self, filename: str) -> None: def installPackage(self, filename: str) -> None:

View file

@ -323,6 +323,21 @@ UM.MainWindow
{ {
if (drop.urls.length > 0) 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); 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 { MessageDialog {
id: infoMultipleFilesWithGcodeDialog id: infoMultipleFilesWithGcodeDialog
title: catalog.i18nc("@title:window", "Open File(s)") title: catalog.i18nc("@title:window", "Open File(s)")