syncthingtray/plasmoid/package/contents/ui/DownloadsPage.qml
Martchus 36e9e98424 plasmoid: Assign margins in consistency with official Plasmoids
For instance, the NetworkManager Plasmoid uses these margins for its
ListView. It looks probably better than without margins (after removing
paddings with scroll page).
2022-09-01 22:32:17 +02:00

155 lines
6.5 KiB
QML

import QtQuick 2.3
import QtQuick.Layouts 1.1
import QtQml.Models 2.2
import org.kde.plasma.components 2.0 as PlasmaComponents // for Menu and MenuItem
import org.kde.plasma.components 3.0 as PlasmaComponents3
import org.kde.plasma.core 2.0 as PlasmaCore
Item {
property alias view: downloadView
objectName: "DownloadsPage"
PlasmaComponents3.ScrollView {
anchors.fill: parent
// HACK: workaround for https://bugreports.qt.io/browse/QTBUG-83890
PlasmaComponents3.ScrollBar.horizontal.policy: PlasmaComponents3.ScrollBar.AlwaysOff
contentItem: TopLevelView {
id: downloadView
model: plasmoid.nativeInterface.downloadModel
delegate: TopLevelItem {
id: item
width: downloadView.effectiveWidth()
readonly property string downloadName: name
property alias openButton: openButton
ColumnLayout {
width: parent.width
spacing: 0
RowLayout {
id: itemSummary
Layout.fillWidth: true
RowLayout {
spacing: units.smallSpacing
PlasmaComponents3.Label {
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
elide: Text.ElideRight
text: name ? name : "?"
}
}
PlasmaComponents3.ProgressBar {
Layout.fillWidth: true
Layout.fillHeight: true
from: 0.0
to: 100.0
value: percentage ? percentage : 0.0
}
RowLayout {
id: toolButtonsLayout
spacing: 0
PlasmaComponents3.Label {
height: implicitHeight
text: progressLabel ? progressLabel : ""
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
}
Item {
width: 3
}
TinyButton {
id: openButton
icon.source: plasmoid.nativeInterface.faUrl + "folder"
tooltip: qsTr("Open in file browser")
enabled: path !== undefined
onClicked: {
Qt.openUrlExternally(path)
plasmoid.expanded = false
}
}
}
}
DetailView {
id: detailsView
visible: item.expanded
Layout.fillWidth: true
model: DelegateModel {
model: plasmoid.nativeInterface.downloadModel
rootIndex: detailsView.model.modelIndex(index)
delegate: RowLayout {
width: detailsView.width
PlasmaCore.IconItem {
Layout.preferredWidth: units.iconSizes.medium
Layout.preferredHeight: units.iconSizes.medium
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
source: fileIcon
}
ColumnLayout {
spacing: 0
Layout.fillWidth: true
RowLayout {
spacing: units.smallSpacing
Layout.fillWidth: true
PlasmaComponents3.Label {
Layout.fillWidth: true
text: name
font.pointSize: theme.defaultFont.pointSize * 0.8
elide: Text.ElideRight
}
PlasmaComponents3.Label {
text: progressLabel
font.pointSize: theme.defaultFont.pointSize * 0.8
elide: Text.ElideRight
}
}
PlasmaComponents3.ProgressBar {
Layout.fillWidth: true
Layout.preferredHeight: 8
Layout.topMargin: 0
from: 0.0
to: 100.0
value: percentage
}
}
TinyButton {
icon.source: plasmoid.nativeInterface.faUrl + "folder"
tooltip: qsTr("Open in file browser")
onClicked: {
Qt.openUrlExternally(path + "/..")
plasmoid.expanded = false
}
}
}
}
}
}
}
PlasmaComponents.Menu {
id: contextMenu
PlasmaComponents.MenuItem {
text: qsTr("Copy label/ID")
icon: "edit-copy"
onClicked: downloadView.copyCurrentItemData("downloadName")
}
PlasmaComponents.MenuItem {
separator: true
}
PlasmaComponents.MenuItem {
id: openItem
text: qsTr("Open in file browser")
icon: "folder"
onClicked: downloadView.clickCurrentItemButton("openButton")
}
}
}
}
}