Merge branch 'master' into feature-backup-manager

This commit is contained in:
ChrisTerBeke 2018-05-22 17:05:40 +02:00
commit dd581b59e4
7 changed files with 249 additions and 213 deletions

View File

@ -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:

View File

@ -10,7 +10,6 @@ Item
{
height: UM.Theme.getSize("toolbox_installed_tile").height
width: parent.width
property bool canUpdate: false
property bool isEnabled: true
Rectangle
@ -109,7 +108,6 @@ Item
{
target: toolbox
onEnabledChanged: isEnabled = toolbox.isEnabled(model.id)
onMetadataChanged: canUpdate = toolbox.canUpdate(model.id)
}
}
}

View File

@ -8,6 +8,8 @@ import UM 1.1 as UM
Column
{
property bool canUpdate: false
property bool canDowngrade: false
width: UM.Theme.getSize("toolbox_action_button").width
spacing: UM.Theme.getSize("narrow_margin").height
@ -36,7 +38,7 @@ Column
Button
{
id: removeButton
text: catalog.i18nc("@action:button", "Uninstall")
text: canDowngrade ? catalog.i18nc("@action:button", "Downgrade") : catalog.i18nc("@action:button", "Uninstall")
visible: !model.is_bundled
enabled: !toolbox.isDownloading
style: ButtonStyle
@ -72,5 +74,14 @@ Column
}
}
onClicked: toolbox.uninstall(model.id)
Connections
{
target: toolbox
onMetadataChanged:
{
canUpdate = toolbox.canUpdate(model.id)
canDowngrade = toolbox.canDowngrade(model.id)
}
}
}
}

View File

@ -318,6 +318,20 @@ class Toolbox(QObject, Extension):
remote_version = Version(remote_package["package_version"])
return remote_version > local_version
@pyqtSlot(str, result=bool)
def canDowngrade(self, package_id: str) -> bool:
local_package = self._package_manager.getInstalledPackageInfo(package_id)
if local_package is None:
return False
remote_package = self.getRemotePackage(package_id)
if remote_package is None:
return False
local_version = Version(local_package["package_version"])
remote_version = Version(remote_package["package_version"])
return remote_version < local_version
@pyqtSlot(str, result = bool)
def isInstalled(self, package_id: str) -> bool:
return self._package_manager.isPackageInstalled(package_id)

View File

@ -974,7 +974,7 @@
"package_type": "material",
"display_name": "Ultimaker ABS",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "0.5.0",
"package_version": "1.0.0",
"cura_version": 4,
"website": "https://ultimaker.com/products/materials/abs",
"author": {

View File

@ -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)")

View File

@ -1,4 +1,4 @@
// Copyright (c) 2016 Ultimaker B.V.
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.1
@ -61,32 +61,34 @@ UM.Dialog
{
id: palette
}
Column
{
anchors.fill: parent
spacing: 2 * screenScaleFactor
Label
{
id: titleLabel
id: mainHeading
width: parent.width
text: catalog.i18nc("@action:title", "Summary - Cura Project")
font.pointSize: 18
anchors.top: parent.top
}
Rectangle
ScrollView
{
id: separator
color: palette.text
id: scroll
width: parent.width
height: 1
}
Item // Spacer
anchors
{
height: spacerHeight
width: height
top: mainHeading.bottom
topMargin: UM.Theme.getSize("default_margin").height
bottom: controls.top
bottomMargin: UM.Theme.getSize("default_margin").height
}
style: UM.Theme.styles.scrollview
ColumnLayout
{
spacing: UM.Theme.getSize("default_margin").height
Column
{
Label
{
id: settingsHeading
text: catalog.i18nc("@action:label", "Printer settings")
font.bold: true
}
@ -97,12 +99,12 @@ UM.Dialog
Label
{
text: catalog.i18nc("@action:label", "Type")
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
Label
{
text: (Cura.MachineManager.activeMachine == null) ? "" : Cura.MachineManager.activeMachine.definition.name
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
}
Row
@ -112,56 +114,45 @@ UM.Dialog
Label
{
text: catalog.i18nc("@action:label", Cura.MachineManager.activeMachineNetworkGroupName != "" ? "Printer Group" : "Name")
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
Label
{
text: Cura.MachineManager.activeMachineNetworkGroupName != "" ? Cura.MachineManager.activeMachineNetworkGroupName : Cura.MachineManager.activeMachineName
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
}
Column
{
width: parent.width
visible: Cura.MachineManager.hasVariantBuildplates
Item // Spacer
{
height: spacerHeight
width: height
}
Row
{
visible: Cura.MachineManager.hasVariantBuildplates
width: parent.width
height: childrenRect.height
Label
{
text: catalog.i18nc("@action:label", "Build plate")
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
Label
{
text: Cura.MachineManager.activeVariantBuildplateName
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
}
}
Repeater
{
width: parent.width
height: childrenRect.height
model: Cura.MachineManager.currentExtruderPositions
delegate: Column
{
Item // Spacer
{
height: spacerHeight
width: height
}
height: childrenRect.height
width: parent.width
Label
{
text: catalog.i18nc("@action:label", "Extruder %1").arg(modelData)
font.bold: true
}
height: childrenRect.height
width: parent.width
Row
{
width: parent.width
@ -169,23 +160,20 @@ UM.Dialog
Label
{
text: catalog.i18nc("@action:label", "%1 & material").arg(Cura.MachineManager.activeDefinitionVariantsName)
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
Label
{
text: Cura.MachineManager.activeVariantNames[modelData] + ", " + Cura.MachineManager.getExtruder(modelData).material.name
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
}
}
}
Item // Spacer
Column
{
height: spacerHeight
width: height
}
width: parent.width
height: childrenRect.height
Label
{
text: catalog.i18nc("@action:label", "Profile settings")
@ -197,12 +185,12 @@ UM.Dialog
Label
{
text: catalog.i18nc("@action:label", "Not in profile")
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
Label
{
text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", Cura.MachineManager.numUserSettings).arg(Cura.MachineManager.numUserSettings)
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
visible: Cura.MachineManager.numUserSettings
}
@ -213,22 +201,20 @@ UM.Dialog
Label
{
text: catalog.i18nc("@action:label", "Name")
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
Label
{
text: Cura.MachineManager.activeQualityOrQualityChangesName
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
}
Item // Spacer
}
Column
{
height: spacerHeight
width: height
}
width: parent.width
height: childrenRect.height
Label
{
text: catalog.i18nc("@action:label", "Setting visibility")
@ -241,57 +227,54 @@ UM.Dialog
Label
{
text: catalog.i18nc("@action:label", "Visible settings:")
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
Label
{
text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(definitionsModel.visibleCount).arg(Cura.MachineManager.totalNumberOfSettings)
width: (parent.width / 3) | 0
width: Math.floor(scroll.width / 3) | 0
}
}
Item // Spacer
}
}
}
Item
{
height: spacerHeight
width: height
}
}
id: controls
width: parent.width
height: childrenRect.height
anchors.bottom: parent.bottom
CheckBox
{
id: dontShowAgainCheckbox
anchors.bottom: cancel_button.top
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
anchors.left: parent.left
text: catalog.i18nc("@action:label", "Don't show project summary on save again")
checked: dontShowAgain
}
Button
{
id: cancel_button
anchors.bottom: parent.bottom
anchors.right: ok_button.left
anchors.rightMargin: 2
anchors
{
right: ok_button.left
rightMargin: UM.Theme.getSize("default_margin").width
}
text: catalog.i18nc("@action:button","Cancel");
enabled: true
onClicked: close()
}
Button
{
id: ok_button
anchors.bottom: parent.bottom
anchors.right: parent.right
text: catalog.i18nc("@action:button","Save");
enabled: true
onClicked: {
onClicked:
{
close()
yes()
}
}
}
}
}