234 lines
9.1 KiB
QML
234 lines
9.1 KiB
QML
/*
|
|
* Copyright 2014 Sebastian Kügler <sebas@kde.org>
|
|
* SPDX-FileCopyrightText: (C) 2020 Carl Schwan <carl@carlschwan.eu>
|
|
* Copyright (C) 2021 by Mikel Johnson <mikel5764@gmail.com>
|
|
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
import QtGraphicalEffects 1.0
|
|
import QtQuick.Layouts 1.12
|
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
|
import org.kde.kcoreaddons 1.0 as KCoreAddons
|
|
import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons
|
|
import org.kde.plasma.private.quicklaunch 1.0
|
|
|
|
Control {
|
|
id: footer
|
|
rightPadding: rightInset
|
|
leftPadding: rightPadding
|
|
property Item configureButton: configureButton
|
|
property Item avatar: avatarButton
|
|
property int iconSize: units.iconSizes.smallMedium
|
|
property var footerNames: ["Documents", "Pictures", "Music", "Downloads", "Videos", "File manager", "System settings", "Lock screen", "Power options"]
|
|
property var footerIcons: ["folder-documents-symbolic", "folder-pictures-symbolic", "folder-music-symbolic", "folder-download-symbolic", "folder-videos-symbolic", plasmoid.configuration.replaceExplorerIcon ? Qt.resolvedUrl((theme.textColor.r * 0.299 + theme.textColor.g * 0.587 + theme.textColor.b * 0.114) > 0.7265625 ? "icons/explorer.svg" : "icons/explorer_dark.svg") : "folder-symbolic", "configure", "system-lock-screen", "system-shutdown"]
|
|
|
|
background: Rectangle {
|
|
color: Qt.darker(theme.backgroundColor)
|
|
opacity: .115
|
|
border.width: 1
|
|
border.color: "#cacbd0"
|
|
radius: 5
|
|
}
|
|
|
|
|
|
KCoreAddons.KUser {
|
|
id: kuser
|
|
}
|
|
Logic { id: logic }
|
|
anchors.bottomMargin: units.largeSpacing * 2
|
|
anchors.topMargin: anchors.bottomMargin
|
|
anchors.leftMargin: -12
|
|
anchors.rightMargin: anchors.leftMargin
|
|
height: units.iconSizes.medium * 2.4
|
|
|
|
PlasmaCore.DataSource {
|
|
id: pmEngine
|
|
engine: "powermanagement"
|
|
connectedSources: ["PowerDevil", "Sleep States"]
|
|
function performOperation(what) {
|
|
var service = serviceForSource("PowerDevil")
|
|
var operation = service.operationDescription(what)
|
|
service.startOperationCall(operation)
|
|
}
|
|
}
|
|
|
|
PlasmaCore.DataSource {
|
|
id: executable
|
|
engine: "executable"
|
|
connectedSources: []
|
|
onNewData: {
|
|
var exitCode = data["exit code"]
|
|
var exitStatus = data["exit status"]
|
|
var stdout = data["stdout"]
|
|
var stderr = data["stderr"]
|
|
exited(sourceName, exitCode, exitStatus, stdout, stderr)
|
|
disconnectSource(sourceName)
|
|
}
|
|
function exec(cmd) {
|
|
if (cmd) {
|
|
connectSource(cmd)
|
|
}
|
|
}
|
|
signal exited(string cmd, int exitCode, int exitStatus, string stdout, string stderr)
|
|
}
|
|
|
|
RowLayout {
|
|
id: nameAndIcon
|
|
anchors.leftMargin: units.largeSpacing * 3 - footer.rightPadding - footer.anchors.leftMargin
|
|
anchors.left: parent.left
|
|
x: units.smallSpacing
|
|
anchors.right: parent.right
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
PlasmaComponents.RoundButton {
|
|
id: avatarButton
|
|
visible: KQuickAddons.KCMShell.authorize("kcm_users.desktop").length > 0
|
|
|
|
flat: true
|
|
|
|
Layout.preferredWidth: plasmoid.configuration.reduceIconSizeUserProfile ? units.iconSizes.smallMedium * 1.8 : units.iconSizes.large * 1.2
|
|
Layout.preferredHeight: Layout.preferredWidth
|
|
|
|
Accessible.name: nameLabel.text
|
|
Accessible.description: i18n("Go to user settings")
|
|
|
|
Image {
|
|
id: iconUser
|
|
source: kuser.faceIconUrl.toString() || "user-identity"
|
|
cache: false
|
|
visible: source !== ""
|
|
fillMode: Image.PreserveAspectFit
|
|
anchors {
|
|
fill: parent
|
|
margins: PlasmaCore.Units.smallSpacing
|
|
}
|
|
|
|
layer.enabled: true
|
|
layer.effect: OpacityMask {
|
|
maskSource: Rectangle {
|
|
width: iconUser.width
|
|
height: iconUser.height
|
|
radius: height / 2
|
|
visible: false
|
|
}
|
|
}
|
|
}
|
|
|
|
onClicked: {
|
|
KQuickAddons.KCMShell.openSystemSettings("kcm_users")
|
|
}
|
|
|
|
Keys.onPressed: {
|
|
// In search on backtab focus on search pane
|
|
if (event.key == Qt.Key_Backtab && (root.state == "Search" || mainTabGroup.state == "top")) {
|
|
navigationMethod.state = "keyboard"
|
|
keyboardNavigation.state = "RightColumn"
|
|
root.currentContentView.forceActiveFocus()
|
|
event.accepted = true;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: PlasmaCore.Units.gridUnit
|
|
Layout.alignment: Layout.AlignVCenter | Qt.AlignLeft
|
|
|
|
PlasmaExtras.Heading {
|
|
id: nameLabel
|
|
anchors.fill: parent
|
|
|
|
level: 4
|
|
// font.weight: Font.Bold
|
|
Text {
|
|
font.capitalization: Font.Capitalize
|
|
}
|
|
text: plasmoid.configuration.preferFullName ? kuser.fullName : kuser.loginName
|
|
elide: Text.ElideRight
|
|
horizontalAlignment: Text.AlignLeft
|
|
verticalAlignment: Text.AlignVCenter
|
|
}
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
anchors.rightMargin: units.largeSpacing * 3 - footer.rightPadding - footer.anchors.leftMargin
|
|
anchors.right: parent.right
|
|
x: -units.smallSpacing
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
// looks visually balanced that way
|
|
spacing: Math.round(PlasmaCore.Units.smallSpacing * 2.5)
|
|
|
|
Repeater {
|
|
model: 9
|
|
PlasmaComponents.TabButton {
|
|
id: newTabButton
|
|
visible: [
|
|
plasmoid.configuration.downIconsDocuments,
|
|
plasmoid.configuration.downIconsPictures,
|
|
plasmoid.configuration.downIconsMusic,
|
|
plasmoid.configuration.downIconsDownloads,
|
|
plasmoid.configuration.downIconsVideos,
|
|
plasmoid.configuration.downIconsFileManager,
|
|
plasmoid.configuration.downIconsSystemSettings,
|
|
plasmoid.configuration.downIconsLock,
|
|
plasmoid.configuration.downIconsPowerOptions
|
|
][index]
|
|
// flat: true
|
|
NumberAnimation {
|
|
id: animateOpacity
|
|
target: newTabButton
|
|
properties: "opacity"
|
|
from: 1
|
|
to: 0.5
|
|
duration: PlasmaCore.Units.longDuration
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
NumberAnimation {
|
|
id: animateOpacityReverse
|
|
target: newTabButton
|
|
properties: "opacity"
|
|
from: 0.5
|
|
to: 1
|
|
duration: PlasmaCore.Units.longDuration
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
|
|
icon {
|
|
name: footerIcons[index]
|
|
width: iconSize * (plasmoid.configuration.reduceIconSizeFooter ? 0.97 : 1)
|
|
}
|
|
onHoveredChanged: hovered ? animateOpacity.start() : animateOpacityReverse.start();
|
|
PlasmaComponents.ToolTip {
|
|
text: i18n(footerNames[index])
|
|
}
|
|
MouseArea {
|
|
onClicked: index < 6 ? executable.exec("xdg-open $(xdg-user-dir" + (index < 5 ? (" " + footerNames[index].toUpperCase()) : "") + ")") : index == 6 ? logic.openUrl("file:///usr/share/applications/systemsettings.desktop") : pmEngine.performOperation(index == 8 ? "requestShutDown" : "lockScreen")
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|