89 lines
2.9 KiB
QML
Raw Normal View History

2022-03-04 23:58:22 +01:00
/*
SPDX-FileCopyrightText: 2014 David Edmundson <davidedmundson@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick 2.2
import org.kde.plasma.core 2.0 as PlasmaCore
ListView {
id: view
readonly property string selectedUser: currentItem ? currentItem.userName : ""
2022-03-06 21:17:10 +01:00
readonly property int userItemWidth: PlasmaCore.Units.gridUnit * config.faceElemWidthInGridUnits
readonly property int userItemHeight: PlasmaCore.Units.gridUnit * config.faceElemHeightInGridUnits
2022-03-04 23:58:22 +01:00
property int fontSize: PlasmaCore.Theme.defaultFont.pointSize + 2
implicitHeight: userItemHeight
activeFocusOnTab : true
/*
* Signals that a user was explicitly selected
*/
signal userSelected;
orientation: ListView.Horizontal
highlightRangeMode: ListView.StrictlyEnforceRange
//centre align selected item (which implicitly centre aligns the rest
preferredHighlightBegin: width/2 - userItemWidth/2
preferredHighlightEnd: preferredHighlightBegin
// Disable flicking if we only have on user (like on the lockscreen)
interactive: count > 1
delegate: UserDelegate {
avatarPath: model.icon || ""
iconSource: model.iconName || "user-identity"
fontSize: view.fontSize
vtNumber: model.vtNumber
needsPassword: model.needsPassword
name: {
var displayName = model.realName || model.name
if (model.vtNumber === undefined || model.vtNumber < 0) {
return displayName
}
if (!model.session) {
return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Nobody logged in on that session", "Unused")
}
var location = ""
if (model.isTty) {
location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console number", "TTY %1", model.vtNumber)
} else if (model.displayNumber) {
location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console (X display number)", "on TTY %1 (Display %2)", model.vtNumber, model.displayNumber)
}
if (location) {
return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Username (location)", "%1 (%2)", displayName, location)
}
return displayName
}
userName: model.name
width: userItemWidth
height: userItemHeight
//if we only have one delegate, we don't need to clip the text as it won't be overlapping with anything
constrainText: ListView.view.count > 1
isCurrent: ListView.isCurrentItem
onClicked: {
ListView.view.currentIndex = index;
ListView.view.userSelected();
}
}
Keys.onEscapePressed: view.userSelected()
Keys.onEnterPressed: view.userSelected()
Keys.onReturnPressed: view.userSelected()
}