72 lines
3.0 KiB
QML
72 lines
3.0 KiB
QML
// SPDX-License-Identifier: MIT
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import org.kde.plasma.core as PlasmaCore
|
|
import org.kde.plasma.plasmoid
|
|
import org.kde.kirigami as Kirigami
|
|
import se.ajpanton.panelactions 1.0
|
|
|
|
PlasmoidItem {
|
|
id: root
|
|
readonly property bool vertical: Plasmoid.formFactor === PlasmaCore.Types.Vertical
|
|
readonly property bool editing: Plasmoid.containment.corona?.editMode ?? false
|
|
readonly property int minimumLength: Math.max(editing ? 48 : 1, settings.values.spacerLength)
|
|
readonly property Item panelLayout: {
|
|
let item = root.parent;
|
|
while (item) {
|
|
if (item instanceof GridLayout) return item;
|
|
item = item.parent;
|
|
}
|
|
return null;
|
|
}
|
|
// Give other widgets their preferred space first; share the remainder
|
|
// with any other flexible spacers, instead of competing with task buttons.
|
|
readonly property real availableLength: {
|
|
if (!panelLayout) return minimumLength;
|
|
let used = 0;
|
|
let spacers = 0;
|
|
let count = 0;
|
|
for (const child of panelLayout.children) {
|
|
if (!child.visible) continue;
|
|
++count;
|
|
const plugin = child.applet?.plasmoid?.pluginName;
|
|
if (plugin === "se.ajpanton.panelactions"
|
|
|| (plugin === "org.kde.plasma.panelspacer" && child.applet.plasmoid.configuration.expanding)) {
|
|
++spacers;
|
|
} else {
|
|
const minimum = vertical ? child.Layout.minimumHeight : child.Layout.minimumWidth;
|
|
const preferred = vertical ? child.Layout.preferredHeight : child.Layout.preferredWidth;
|
|
const maximum = vertical ? child.Layout.maximumHeight : child.Layout.maximumWidth;
|
|
used += Math.min(maximum, Math.max(minimum, preferred));
|
|
}
|
|
}
|
|
used += Math.max(0, count - 1) * (vertical ? panelLayout.rowSpacing : panelLayout.columnSpacing);
|
|
return Math.max(minimumLength, ((vertical ? panelLayout.height : panelLayout.width) - used) / Math.max(1, spacers));
|
|
}
|
|
Plasmoid.backgroundHints: PlasmaCore.Types.NoBackground
|
|
Layout.minimumWidth: vertical ? 1 : minimumLength
|
|
Layout.minimumHeight: vertical ? minimumLength : 1
|
|
Layout.preferredWidth: vertical ? 0 : availableLength
|
|
Layout.preferredHeight: vertical ? availableLength : 0
|
|
Layout.fillWidth: !vertical
|
|
Layout.fillHeight: vertical
|
|
preferredRepresentation: fullRepresentation
|
|
|
|
PanelSettings { id: settings }
|
|
// Direct content, like Plasma's own spacer: never a compact icon or popup.
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
visible: root.editing
|
|
color: Kirigami.Theme.highlightColor
|
|
opacity: 0.4
|
|
radius: 4
|
|
}
|
|
PlasmaCore.Action {
|
|
id: configureAction
|
|
text: i18n("Configure Panel Actions…")
|
|
icon.name: "configure"
|
|
onTriggered: settings.open()
|
|
}
|
|
Component.onCompleted: Plasmoid.setInternalAction("configure", configureAction)
|
|
}
|