// Copyright (c) 2021 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 import UM 1.5 as UM import Cura 1.1 as Cura Column { property bool installed: toolbox.isInstalled(model.id) property bool canUpdate: CuraApplication.getPackageManager().packagesWithUpdate.indexOf(model.id) != -1 property bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn property var packageData width: UM.Theme.getSize("toolbox_action_button").width spacing: UM.Theme.getSize("narrow_margin").height Item { width: installButton.width height: installButton.height ToolboxProgressButton { id: installButton active: toolbox.isDownloading && toolbox.activePackage == model onReadyAction: { toolbox.activePackage = model toolbox.startDownload(model.download_url) } onActiveAction: toolbox.cancelDownload() // Don't allow installing while another download is running enabled: installed || (!(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired) opacity: enabled ? 1.0 : 0.5 visible: !updateButton.visible && !installed // Don't show when the update button is visible } Cura.SecondaryButton { id: installedButton visible: installed onClicked: toolbox.viewCategory = "installed" text: catalog.i18nc("@action:button", "Installed") fixedWidthMode: true width: installButton.width height: installButton.height } } UM.Label { wrapMode: Text.WordWrap text: catalog.i18nc("@label:The string between and is the highlighted link", "Log in is required to install or update") visible: loginRequired width: installButton.width MouseArea { anchors.fill: parent onClicked: Cura.API.account.login() } } UM.Label { property var whereToBuyUrl: { var pg_name = "whereToBuy" return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined } text: catalog.i18nc("@label:The string between and is the highlighted link", "Buy material spools") visible: whereToBuyUrl != undefined MouseArea { anchors.fill: parent onClicked: UM.UrlUtil.openUrl(parent.whereToBuyUrl, ["https", "http"]) } } ToolboxProgressButton { id: updateButton active: toolbox.isDownloading && toolbox.activePackage == model readyLabel: catalog.i18nc("@action:button", "Update") activeLabel: catalog.i18nc("@action:button", "Updating") completeLabel: catalog.i18nc("@action:button", "Updated") onReadyAction: { toolbox.activePackage = model toolbox.update(model.id) } onActiveAction: toolbox.cancelDownload() // Don't allow installing while another download is running enabled: !(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired opacity: enabled ? 1.0 : 0.5 visible: canUpdate } Connections { target: toolbox function onInstallChanged() { installed = toolbox.isInstalled(model.id) } function onFilterChanged() { installed = toolbox.isInstalled(model.id) } } }