Reworked the Compatibility Dialog and how it shows the subscribed packages

CURA-7038
This commit is contained in:
Dimitriovski 2019-12-30 17:36:46 +01:00
parent 8c0f64633b
commit ada2a776d5
No known key found for this signature in database
GPG Key ID: 4E62757E2B0D304D
2 changed files with 128 additions and 57 deletions

View File

@ -1,13 +1,9 @@
// Copyright (c) 2018 Ultimaker B.V. // Copyright (c) 2020 Ultimaker B.V.
// Toolbox is released under the terms of the LGPLv3 or higher. // Toolbox is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10 import QtQuick 2.10
import QtQuick.Dialogs 1.1
import QtQuick.Window 2.2 import QtQuick.Window 2.2
import QtQuick.Controls 1.4 import QtQuick.Controls 2.3
import QtQuick.Controls.Styles 1.4
// TODO: Switch to QtQuick.Controls 2.x and remove QtQuick.Controls.Styles
import UM 1.1 as UM import UM 1.1 as UM
import Cura 1.6 as Cura import Cura 1.6 as Cura
@ -15,61 +11,136 @@ import Cura 1.6 as Cura
UM.Dialog{ UM.Dialog{
visible: true visible: true
title: "Changes from your account" title: catalog.i18nc("@title", "Changes from your account")
Label{ width: UM.Theme.getSize("popup_dialog").width
text: "Some text here" height: UM.Theme.getSize("popup_dialog").height
height: 50 minimumWidth: width
} maximumWidth: minimumWidth
minimumHeight: height
maximumHeight: minimumHeight
margin: 0
Rectangle Rectangle
{ {
id: compatibleRectangle id: root
width: parent.width anchors.fill: parent
height: 300 color: UM.Theme.getColor("main_background")
Label{
text: "Some text here" UM.I18nCatalog
height: 50 {
id: catalog
name: "cura"
} }
ScrollView
{
width: parent.width
height: parent.height - nextButton.height - nextButton.anchors.margins * 2 // We want some leftover space for the button at the bottom
clip: true
Column
{
anchors.fill: parent
anchors.margins: UM.Theme.getSize("default_margin").width
// Compatible packages // Compatible packages
Column{ Label
id: compatibleColumn {
anchors.fill: parent font: UM.Theme.getFont("default")
spacing: 2 text: catalog.i18nc("@label", "The following packages will be added:")
color: UM.Theme.getColor("text")
Repeater{ height: contentHeight + UM.Theme.getSize("default_margin").height
}
Repeater
{
model: toolbox.subscribedPackagesModel model: toolbox.subscribedPackagesModel
delegate: Rectangle{ Component
id: someRect {
id: compatibleDelegate
Item
{
width: parent.width width: parent.width
height: 50 property var lineHeight: 60
border.color: "black" visible: model.is_compatible == "True" ? true : false
Image{ height: visible ? (lineHeight + UM.Theme.getSize("default_margin").height) : 0 // We only show the compatible packages here
Image
{
id: packageIcon
source: model.icon_url || "../../images/logobot.svg" source: model.icon_url || "../../images/logobot.svg"
width: 50 height: lineHeight
height: parent.height width: height
//anchors.left: parent.left mipmap: true
//anchors.right: packageName.left fillMode: Image.PreserveAspectFit
anchors.rightMargin: 20
} }
Text{ Label
id: packageName {
text: model.name + " (Compatible: " + model.is_compatible + ")" id: compatibleLabel
anchors.centerIn: parent text: model.name
} font: UM.Theme.getFont("medium_bold")
MouseArea{ anchors.left: packageIcon.right
anchors.fill: parent anchors.leftMargin: 20
onClicked: { anchors.verticalCenter: packageIcon.verticalCenter
console.log("Clicked!") color: UM.Theme.getColor("text")
} elide: Text.ElideRight
}
} }
} }
} }
} }
// Incompatible packages
Label
{
font: UM.Theme.getFont("default")
text: catalog.i18nc("@label", "The following packages can not be installed because of incompatible Cura version:")
color: UM.Theme.getColor("text")
height: contentHeight + UM.Theme.getSize("default_margin").height
}
Repeater
{
model: toolbox.subscribedPackagesModel
Component
{
id: incompatibleDelegate
Item
{
width: parent.width
property var lineHeight: 60
visible: model.is_compatible == "True" ? false : true
height: visible ? (lineHeight + UM.Theme.getSize("default_margin").height) : 0 // We only show the incompatible packages here
Image
{
id: packageIcon
source: model.icon_url || "../../images/logobot.svg"
height: lineHeight
width: height
mipmap: true
fillMode: Image.PreserveAspectFit
}
Label
{
id: incompatibleLabel
text: model.name
font: UM.Theme.getFont("medium_bold")
anchors.left: packageIcon.right
anchors.leftMargin: 20
anchors.verticalCenter: packageIcon.verticalCenter
color: UM.Theme.getColor("text")
elide: Text.ElideRight
}
}
}
}
}
} // End of ScrollView
Cura.ActionButton
{
id: nextButton
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.margins: UM.Theme.getSize("default_margin").height
text: catalog.i18nc("@button", "Next")
}
}
} }

View File

@ -701,7 +701,7 @@ class Toolbox(QObject, Extension):
# Ignore any operation that is not a get operation # Ignore any operation that is not a get operation
pass pass
def _checkCompatibilities(self, json_data): def _checkCompatibilities(self, json_data) -> None:
user_subscribed_packages = [plugin["package_id"] for plugin in json_data] user_subscribed_packages = [plugin["package_id"] for plugin in json_data]
user_installed_packages = self._package_manager.getUserInstalledPackages() user_installed_packages = self._package_manager.getUserInstalledPackages()
@ -725,16 +725,16 @@ class Toolbox(QObject, Extension):
sync_message.show() sync_message.show()
def _onSyncButtonClicked(self, json_data, package_discrepancy, messageId: str, actionId: str) -> None: def _onSyncButtonClicked(self, json_data, package_discrepancy, messageId: str, actionId: str) -> None:
# self.subscribed_packages.clear() self.subscribed_packages.clear()
# We 'create' the packages from the HTTP payload # We 'create' the packages from the HTTP payload
for item in json_data: for item in json_data:
if item["package_id"] not in package_discrepancy: # But we skip packages that the user has locally installed if item["package_id"] not in package_discrepancy: # But we skip packages that the user has locally installed
continue continue
package = {"name": item["package_id"], "sdk_versions": item["sdk_versions"]} package = {"name": item["package_id"], "sdk_versions": item["sdk_versions"]}
if self._sdk_version not in item["sdk_versions"]: if self._sdk_version not in item["sdk_versions"]:
package.update({"is_compatible": False}) package.update({"is_compatible": "False"})
else: else:
package.update({"is_compatible": True}) package.update({"is_compatible": "True"})
try: try:
package.update({"icon_url": item["icon_url"]}) package.update({"icon_url": item["icon_url"]})
except KeyError: # There is no 'icon_url" in the response payload for this package except KeyError: # There is no 'icon_url" in the response payload for this package