Warning, /plasma/plasma-workspace/applets/batterymonitor/package/contents/ui/PopupDialog.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2011 Viranch Mehta <viranch.mehta@gmail.com>
0003     SPDX-FileCopyrightText: 2013-2016 Kai Uwe Broulik <kde@privat.broulik.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 import QtQuick
0009 import QtQuick.Layouts
0010 
0011 import org.kde.plasma.components as PlasmaComponents3
0012 import org.kde.plasma.extras as PlasmaExtras
0013 import org.kde.kirigami as Kirigami
0014 
0015 PlasmaExtras.Representation {
0016     id: dialog
0017 
0018     property alias model: batteryRepeater.model
0019     property bool pluggedIn
0020 
0021     property int remainingTime
0022 
0023     property var profilesInstalled
0024     property string activeProfile
0025     property var profiles
0026 
0027     // List of active power management inhibitions (applications that are
0028     // blocking sleep and screen locking).
0029     //
0030     // type: [{
0031     //  Icon: string,
0032     //  Name: string,
0033     //  Reason: string,
0034     // }]
0035     property var inhibitions: []
0036     property bool manuallyInhibited
0037     property bool inhibitsLidAction
0038 
0039     property string inhibitionReason
0040     property string degradationReason
0041     // type: [{ Name: string, Icon: string, Profile: string, Reason: string }]
0042     required property var profileHolds
0043 
0044     signal powerManagementChanged(bool disabled)
0045     signal inhibitionChangeRequested(bool inhibit)
0046     signal activateProfileRequested(string profile)
0047 
0048     collapseMarginsHint: true
0049 
0050     KeyNavigation.down: pmSwitch.pmCheckBox
0051 
0052     header: PlasmaExtras.PlasmoidHeading {
0053         leftPadding: !mirrored ? Kirigami.Units.smallSpacing : 0
0054         rightPadding: mirrored ? Kirigami.Units.smallSpacing : 0
0055 
0056         contentItem: PowerManagementItem {
0057             id: pmSwitch
0058 
0059             inhibitions: dialog.inhibitions
0060             manuallyInhibited: dialog.manuallyInhibited
0061             inhibitsLidAction: dialog.inhibitsLidAction
0062             pluggedIn: dialog.pluggedIn
0063 
0064             onInhibitionChangeRequested: inhibit => {
0065                 dialog.inhibitionChangeRequested(inhibit);
0066             }
0067 
0068             onDisabledChanged: dialog.powerManagementChanged(disabled)
0069         }
0070     }
0071 
0072     contentItem: PlasmaComponents3.ScrollView {
0073         id: scrollView
0074 
0075         focus: false
0076 
0077         function positionViewAtItem(item) {
0078             if (!PlasmaComponents3.ScrollBar.vertical.visible) {
0079                 return;
0080             }
0081             const rect = batteryList.mapFromItem(item, 0, 0, item.width, item.height);
0082             if (rect.y < scrollView.contentItem.contentY) {
0083                 scrollView.contentItem.contentY = rect.y;
0084             } else if (rect.y + rect.height > scrollView.contentItem.contentY + scrollView.height) {
0085                 scrollView.contentItem.contentY = rect.y + rect.height - scrollView.height;
0086             }
0087         }
0088 
0089         Column {
0090             id: batteryList
0091 
0092             spacing: Kirigami.Units.smallSpacing * 2
0093 
0094             readonly property Item firstHeaderItem: {
0095                 if (powerProfileItem.visible) {
0096                     return powerProfileItem;
0097                 }
0098                 return null;
0099             }
0100             readonly property Item lastHeaderItem: {
0101                 if (powerProfileItem.visible) {
0102                     return powerProfileItem;
0103                 }
0104                 return null;
0105             }
0106 
0107             PowerProfileItem {
0108                 id: powerProfileItem
0109 
0110                 width: scrollView.availableWidth
0111 
0112                 KeyNavigation.down: batteryRepeater.count > 0 ? batteryRepeater.itemAt(0) : null
0113                 KeyNavigation.backtab: KeyNavigation.up
0114                 KeyNavigation.tab: KeyNavigation.down
0115 
0116                 profilesInstalled: dialog.profilesInstalled
0117                 profilesAvailable: dialog.profiles.length > 0
0118                 activeProfile: dialog.activeProfile
0119                 inhibitionReason: dialog.inhibitionReason
0120                 degradationReason: dialog.degradationReason
0121                 profileHolds: dialog.profileHolds
0122 
0123                 onActivateProfileRequested: profile => {
0124                     dialog.activateProfileRequested(profile);
0125                 }
0126 
0127                 onActiveFocusChanged: if (activeFocus) scrollView.positionViewAtItem(this)
0128             }
0129 
0130             Repeater {
0131                 id: batteryRepeater
0132 
0133                 delegate: BatteryItem {
0134                     width: scrollView.availableWidth
0135 
0136                     battery: model
0137                     remainingTime: dialog.remainingTime
0138 
0139                     KeyNavigation.up: index === 0 ? batteryList.lastHeaderItem : batteryRepeater.itemAt(index - 1)
0140                     KeyNavigation.down: index + 1 < batteryRepeater.count ? batteryRepeater.itemAt(index + 1) : null
0141                     KeyNavigation.backtab: KeyNavigation.up
0142                     KeyNavigation.tab: KeyNavigation.down
0143 
0144                     Keys.onTabPressed: event => {
0145                         if (index === batteryRepeater.count - 1) {
0146                             // Workaround to leave applet's focus on desktop
0147                             nextItemInFocusChain(false).forceActiveFocus(Qt.TabFocusReason);
0148                         } else {
0149                             event.accepted = false;
0150                         }
0151                     }
0152 
0153                     onActiveFocusChanged: if (activeFocus) scrollView.positionViewAtItem(this)
0154                 }
0155             }
0156         }
0157     }
0158 }
0159