Warning, /plasma/discover/discover/qml/InstallApplicationButton.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick
0002 import QtQuick.Controls as QQC2
0003 import QtQuick.Layouts
0004 import org.kde.kirigami as Kirigami
0005 import org.kde.discover as Discover
0006 
0007 ConditionalLoader {
0008     id: root
0009 
0010     property alias application: listener.resource
0011     property bool availableFromOnlySingleSource: false
0012 
0013     readonly property alias isActive: listener.isActive
0014     readonly property bool isStateAvailable: application.state !== Discover.AbstractResource.Broken
0015     readonly property alias listener: listener
0016 
0017     Discover.TransactionListener {
0018         id: listener
0019     }
0020 
0021     readonly property Kirigami.Action action: Kirigami.Action {
0022         text: {
0023             if (!root.isStateAvailable) {
0024                 return i18nc("State being fetched", "Loading…")
0025             }
0026             if (!root.application.isInstalled) {
0027                 if (root.availableFromOnlySingleSource) {
0028                     return i18nc("@action:button %1 is the name of a software repository", "Install from %1", root.application.displayOrigin);
0029                 }
0030                 return i18nc("@action:button", "Install");
0031             }
0032             return i18n("Remove");
0033         }
0034         icon {
0035             name: root.application.isInstalled ? "edit-delete" : "download"
0036             color: !root.isActive && enabled
0037                 ? (root.application.isInstalled ? Kirigami.Theme.negativeTextColor : Kirigami.Theme.positiveTextColor)
0038                 : Kirigami.Theme.backgroundColor
0039         }
0040         visible: !root.isActive && (!root.application.isInstalled || root.application.isRemovable)
0041         enabled: !root.isActive && root.isStateAvailable
0042         onTriggered: root.click()
0043     }
0044 
0045     readonly property Kirigami.Action cancelAction: Kirigami.Action {
0046         text: i18n("Cancel")
0047         icon.name: "dialog-cancel"
0048         enabled: listener.isCancellable
0049         tooltip: listener.statusText
0050         onTriggered: {
0051             listener.cancel()
0052             enabled = false
0053         }
0054         visible: root.isActive
0055         onVisibleChanged: enabled = true
0056     }
0057 
0058     function click() {
0059         if (!isActive) {
0060             if (root.application.isInstalled) {
0061                 Discover.ResourcesModel.removeApplication(root.application);
0062             } else {
0063                 Discover.ResourcesModel.installApplication(root.application);
0064             }
0065         } else {
0066             console.warn("trying to un/install but resource still active", root.application.name);
0067         }
0068     }
0069 
0070     condition: root.isActive
0071     componentTrue: RowLayout {
0072         QQC2.ToolButton {
0073             Layout.fillHeight: true
0074             action: root.cancelAction
0075 
0076             display: QQC2.AbstractButton.IconOnly
0077 
0078             QQC2.ToolTip.text: text
0079             QQC2.ToolTip.visible: hovered
0080             QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0081         }
0082 
0083         LabelBackground {
0084             Layout.fillWidth: true
0085             text: listener.statusText
0086             progress: listener.progress / 100
0087         }
0088     }
0089 
0090     componentFalse: QQC2.Button {
0091         visible: !root.application.isInstalled || root.application.isRemovable
0092         enabled: root.application.state !== Discover.AbstractResource.Broken
0093         activeFocusOnTab: false
0094 
0095         text: root.action.text
0096         icon.name: root.action.icon.name
0097         display: QQC2.AbstractButton.IconOnly
0098 
0099         QQC2.ToolTip.text: text
0100         QQC2.ToolTip.visible: hovered
0101         QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0102 
0103         onClicked: root.click()
0104     }
0105 }