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 }