You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.3 KiB
127 lines
4.3 KiB
/* |
|
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]() |
|
} |
|
} |
|
|
|
|