mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-08-12 18:30:46 +02:00
75 lines
1.9 KiB
QML
75 lines
1.9 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import "../../theme" as Theme
|
|
|
|
ColumnLayout {
|
|
id: root
|
|
property alias menu: menuView.menu
|
|
property Item animatingItem: null
|
|
property bool animating: animatingItem != null
|
|
|
|
signal close
|
|
signal submenuExpanded(item: var)
|
|
|
|
QsMenuOpener {
|
|
id: menuView
|
|
}
|
|
|
|
spacing: 0
|
|
|
|
Repeater {
|
|
model: menuView.children
|
|
|
|
Loader {
|
|
required property var modelData
|
|
|
|
property var item: Component {
|
|
BoundComponent {
|
|
id: itemComponent
|
|
source: "MenuItem.qml"
|
|
|
|
property var entry: modelData
|
|
|
|
function onClose() {
|
|
root.close();
|
|
}
|
|
|
|
function onExpandedChanged() {
|
|
if (item.expanded)
|
|
root.submenuExpanded(item);
|
|
}
|
|
|
|
function onAnimatingChanged() {
|
|
if (item.animating) {
|
|
root.animatingItem = this;
|
|
} else if (root.animatingItem == this) {
|
|
root.animatingItem = null;
|
|
}
|
|
}
|
|
|
|
Connections {
|
|
target: root
|
|
|
|
function onSubmenuExpanded(expandedItem) {
|
|
if (item != expandedItem)
|
|
item.expanded = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
property var separator: Component {
|
|
Rectangle {
|
|
color: Theme.Colors.menuViewColor
|
|
implicitHeight: 4
|
|
}
|
|
}
|
|
|
|
sourceComponent: modelData.isSeparator ? separator : item
|
|
Layout.fillHeight: true
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
}
|