nextcloud-desktop/src/gui/tray/ActivityList.qml
Claudio Cambra 6c4070e786 Introduce EnforcedPlainTextLabel, convert all Label or Text labels to use this
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
2022-12-05 15:21:09 +01:00

121 lines
4 KiB
QML

import QtQuick 2.15
import QtQuick.Controls 2.15
import Style 1.0
import com.nextcloud.desktopclient 1.0 as NC
import Style 1.0
ScrollView {
id: controlRoot
property alias model: sortedActivityList.activityListModel
property bool isFileActivityList: false
property int iconSize: Style.trayListItemIconSize
property int delegateHorizontalPadding: 0
signal openFile(string filePath)
signal activityItemClicked(int index)
contentWidth: availableWidth
padding: 1
focus: false
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
data: NC.WheelHandler {
target: controlRoot.contentItem
}
ListView {
id: activityList
Accessible.role: Accessible.List
Accessible.name: qsTr("Activity list")
clip: true
spacing: 0
currentIndex: -1
interactive: true
highlight: Rectangle {
id: activityHover
anchors.fill: activityList.currentItem
color: Style.lightHover
visible: activityList.activeFocus
}
highlightFollowsCurrentItem: true
highlightMoveDuration: 0
highlightResizeDuration: 0
highlightRangeMode: ListView.ApplyRange
preferredHighlightBegin: 0
preferredHighlightEnd: controlRoot.height
model: NC.SortedActivityListModel {
id: sortedActivityList
activityListModel: controlRoot.model
}
delegate: ActivityItem {
anchors.left: if (parent) parent.left
anchors.right: if (parent) parent.right
anchors.leftMargin: controlRoot.delegateHorizontalPadding
anchors.rightMargin: controlRoot.delegateHorizontalPadding
isFileActivityList: controlRoot.isFileActivityList
iconSize: controlRoot.iconSize
flickable: activityList
onHoveredChanged: if (hovered) {
// When we set the currentIndex the list view will scroll...
// unless we tamper with the preferred highlight points to stop this.
const savedPreferredHighlightBegin = activityList.preferredHighlightBegin;
const savedPreferredHighlightEnd = activityList.preferredHighlightEnd;
// Set overkill values to make sure no scroll happens when we hover with mouse
activityList.preferredHighlightBegin = -controlRoot.height;
activityList.preferredHighlightEnd = controlRoot.height * 2;
activityList.currentIndex = index
// Reset original values so keyboard navigation makes list view scroll
activityList.preferredHighlightBegin = savedPreferredHighlightBegin;
activityList.preferredHighlightEnd = savedPreferredHighlightEnd;
forceActiveFocus();
}
onClicked: {
if (model.isCurrentUserFileActivity && model.openablePath) {
openFile("file://" + model.openablePath);
} else {
activityItemClicked(model.activityIndex)
}
}
}
Column {
id: placeholderColumn
width: parent.width * 0.8
anchors.centerIn: parent
visible: activityList.count === 0
spacing: Style.standardSpacing
Image {
width: parent.width
verticalAlignment: Image.AlignVCenter
horizontalAlignment: Image.AlignHCenter
fillMode: Image.PreserveAspectFit
source: "image://svgimage-custom-color/activity.svg/" + Style.ncSecondaryTextColor
}
EnforcedPlainTextLabel {
width: parent.width
text: qsTr("No activities yet")
color: Style.ncSecondaryTextColor
font.bold: true
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
}