diff --git a/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml b/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml index dd178cc0a4..249111b9ad 100644 --- a/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml +++ b/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml @@ -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. import QtQuick 2.10 -import QtQuick.Dialogs 1.1 import QtQuick.Window 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -// TODO: Switch to QtQuick.Controls 2.x and remove QtQuick.Controls.Styles +import QtQuick.Controls 2.3 import UM 1.1 as UM import Cura 1.6 as Cura @@ -15,61 +11,136 @@ import Cura 1.6 as Cura UM.Dialog{ visible: true - title: "Changes from your account" - Label{ - text: "Some text here" - height: 50 - } -Rectangle -{ - id: compatibleRectangle - width: parent.width - height: 300 - Label{ - text: "Some text here" - height: 50 - } + title: catalog.i18nc("@title", "Changes from your account") + width: UM.Theme.getSize("popup_dialog").width + height: UM.Theme.getSize("popup_dialog").height + minimumWidth: width + maximumWidth: minimumWidth + minimumHeight: height + maximumHeight: minimumHeight + margin: 0 - - - // Compatible packages - Column{ - id: compatibleColumn + Rectangle + { + id: root anchors.fill: parent - spacing: 2 + color: UM.Theme.getColor("main_background") - Repeater{ - model: toolbox.subscribedPackagesModel - delegate: Rectangle{ - id: someRect - width: parent.width - height: 50 - border.color: "black" - Image{ - source: model.icon_url || "../../images/logobot.svg" - width: 50 - height: parent.height - //anchors.left: parent.left - //anchors.right: packageName.left - anchors.rightMargin: 20 + UM.I18nCatalog + { + 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 + Label + { + font: UM.Theme.getFont("default") + text: catalog.i18nc("@label", "The following packages will be added:") + color: UM.Theme.getColor("text") + height: contentHeight + UM.Theme.getSize("default_margin").height } - Text{ - id: packageName - text: model.name + " (Compatible: " + model.is_compatible + ")" - anchors.centerIn: parent - } - MouseArea{ - anchors.fill: parent - onClicked: { - console.log("Clicked!") + Repeater + { + model: toolbox.subscribedPackagesModel + Component + { + id: compatibleDelegate + Item + { + width: parent.width + property var lineHeight: 60 + visible: model.is_compatible == "True" ? true : false + 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" + height: lineHeight + width: height + mipmap: true + fillMode: Image.PreserveAspectFit + } + Label + { + id: compatibleLabel + 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 + } + } } } + // 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") } } } - - - -} diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 91eb235328..2c890c8eec 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -701,7 +701,7 @@ class Toolbox(QObject, Extension): # Ignore any operation that is not a get operation pass - def _checkCompatibilities(self, json_data): + def _checkCompatibilities(self, json_data) -> None: user_subscribed_packages = [plugin["package_id"] for plugin in json_data] user_installed_packages = self._package_manager.getUserInstalledPackages() @@ -725,16 +725,16 @@ class Toolbox(QObject, Extension): sync_message.show() 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 for item in json_data: if item["package_id"] not in package_discrepancy: # But we skip packages that the user has locally installed continue package = {"name": item["package_id"], "sdk_versions": item["sdk_versions"]} if self._sdk_version not in item["sdk_versions"]: - package.update({"is_compatible": False}) + package.update({"is_compatible": "False"}) else: - package.update({"is_compatible": True}) + package.update({"is_compatible": "True"}) try: package.update({"icon_url": item["icon_url"]}) except KeyError: # There is no 'icon_url" in the response payload for this package