1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
/*
SPDX-FileCopyrightText: 2011 Viranch Mehta <viranch.mehta@gmail.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.0
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.kquickcontrolsaddons 2.0
import "data.js" as Data
import org.kde.plasma.private.sessions 2.0
Flow {
id: lockout
Layout.minimumWidth: {
if (Plasmoid.formFactor === PlasmaCore.Types.Vertical) {
return 0
} else if (Plasmoid.formFactor === PlasmaCore.Types.Horizontal) {
return height < minButtonSize * visibleButtons ? height * visibleButtons : height / visibleButtons - 1;
} else {
return width > height ? minButtonSize * visibleButtons : minButtonSize
}
}
Layout.minimumHeight: {
if (Plasmoid.formFactor === PlasmaCore.Types.Vertical) {
return width >= minButtonSize * visibleButtons ? width / visibleButtons - 1 : width * visibleButtons
} else if (Plasmoid.formFactor === PlasmaCore.Types.Horizontal) {
return 0
} else {
return width > height ? minButtonSize : minButtonSize * visibleButtons
}
}
Layout.preferredWidth: Layout.minimumWidth
Layout.preferredHeight: Layout.minimumHeight
readonly property int minButtonSize: PlasmaCore.Units.iconSizes.small
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
readonly property int visibleButtons: {
var count = 0
for (var i = 0, j = items.count; i < j; ++i) {
if (items.itemAt(i).visible) {
++count
}
}
return count
}
flow: {
if ((Plasmoid.formFactor === PlasmaCore.Types.Vertical && width >= minButtonSize * visibleButtons) ||
(Plasmoid.formFactor === PlasmaCore.Types.Horizontal && height < minButtonSize * visibleButtons) ||
(width > height)) {
return Flow.LeftToRight // horizontal
} else {
return Flow.TopToBottom // vertical
}
}
SessionManagement {
id: session
}
Repeater {
id: items
property int itemWidth: parent.flow==Flow.LeftToRight ? Math.floor(parent.width/visibleButtons) : parent.width
property int itemHeight: parent.flow==Flow.TopToBottom ? Math.floor(parent.height/visibleButtons) : parent.height
property int iconSize: Math.min(itemWidth, itemHeight)
model: Data.data
delegate: Item {
id: iconDelegate
visible: Plasmoid.configuration["show_" + modelData.configKey] && (!modelData.hasOwnProperty("requires") || session["can" + modelData.requires])
width: items.itemWidth
height: items.itemHeight
PlasmaCore.IconItem {
id: iconButton
width: items.iconSize
height: items.iconSize
anchors.centerIn: parent
source: modelData.icon
scale: mouseArea.pressed ? 0.9 : 1
active: mouseArea.containsMouse
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onReleased: clickHandler(modelData.operation, this)
activeFocusOnTab: true
Keys.onPressed: {
switch (event.key) {
case Qt.Key_Space:
case Qt.Key_Enter:
case Qt.Key_Return:
case Qt.Key_Select:
clickHandler(modelData.operation, this)
break;
}
}
Accessible.name: modelData.tooltip_mainText
Accessible.description: modelData.tooltip_subText
Accessible.role: Accessible.Button
PlasmaCore.ToolTipArea {
anchors.fill: parent
mainText: modelData.tooltip_mainText
subText: modelData.tooltip_subText
}
}
}
}
}
function clickHandler(what, button) {
performOperation(what);
}
function performOperation(operation) {
session[operation]()
}
}
|