7pragma ComponentBehavior: Bound
10import QtQuick.Controls as QQC2
11import QtQuick.Controls.impl as QQC2Impl
13import QtQuick.Templates as T
14import org.kde.kirigami as Kirigami
19 required property T.Action tAction
21 readonly property Kirigami.Action kAction: tAction instanceof Kirigami.Action ? tAction : null
23 readonly property bool actionVisible: kAction?.visible ?? true
24 readonly property bool isSeparator: kAction?.separator ?? false
25 readonly property bool isExpandable: kAction?.expandible ?? false
26 readonly property bool hasChildren: kAction ? kAction.children.length > 0 : false
27 readonly property bool hasVisibleMenu: actionsMenu?.visible ?? false
28 readonly property bool hasToolTip: kAction ? kAction.tooltip !== "" : false
30 checked: checkedBinding()
32 activeFocusOnTab: true
36 contentItem: RowLayout {
37 spacing: Kirigami.Units.largeSpacing
41 color: listItem.tAction.icon.color
42 source: listItem.tAction.icon.name || listItem.tAction.icon.source
44 readonly property int size: Kirigami.Units.iconSizes.smallMedium
45 Layout.minimumHeight: size
46 Layout.maximumHeight: size
47 Layout.minimumWidth: size
48 Layout.maximumWidth: size
50 selected: (listItem.highlighted || listItem.checked || listItem.down)
51 visible: source !== undefined && !listItem.isSeparator
54 QQC2Impl.MnemonicLabel {
56 visible: !listItem.isSeparator
57 text: width > height * 2 ? listItem.Kirigami.MnemonicData.mnemonicLabel :
""
58 Accessible.name: listItem.Kirigami.MnemonicData.plainTextLabel
63 horizontalAlignment: Text.AlignLeft
65 Layout.fillWidth:
true
66 mnemonicVisible: listItem.Kirigami.MnemonicData.active
67 color: (listItem.highlighted || listItem.checked || listItem.down) ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor
68 elide: Text.ElideRight
73 }
else if (!listItem.enabled) {
81 duration: Kirigami.Units.longDuration/2
82 easing.type: Easing.InOutQuad
90 visible: listItem.isSeparator
91 Layout.fillWidth:
true
96 Layout.alignment:
Qt.AlignVCenter
97 Layout.leftMargin: !root.collapsed ? 0 : -width
98 Layout.preferredHeight: !root.collapsed ? Kirigami.Units.iconSizes.small : Kirigami.Units.iconSizes.small/2
100 selected: listItem.checked || listItem.down
101 Layout.preferredWidth: Layout.preferredHeight
102 source: listItem.mirrored ?
"go-next-symbolic-rtl" :
"go-next-symbolic"
103 visible: (!listItem.isExpandable || root.collapsed) && !listItem.isSeparator && listItem.hasChildren
107 Accessible.name: Kirigami.MnemonicData.plainTextLabel
108 Kirigami.MnemonicData.enabled: enabled && visible
109 Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.MenuItem
110 Kirigami.MnemonicData.label: tAction?.text ??
""
113 sequence: listItem.Kirigami.MnemonicData.sequence
114 onActivated: listItem.clicked()
117 property ActionsMenu actionsMenu: ActionsMenu {
118 x:
Qt.application.layoutDirection ===
Qt.RightToLeft ? -width : listItem.width
119 actions: listItem.kAction?.children ?? []
120 submenuComponent: ActionsMenu {}
124 stackView.openSubMenu = listItem.actionsMenu;
125 }
else if (stackView.openSubMenu === listItem.actionsMenu) {
126 stackView.openSubMenu = null;
132 visible: actionVisible && opacity > 0
133 opacity: !root.collapsed || iconItem.source.toString().length > 0
135 Behavior on opacity {
137 duration: Kirigami.Units.longDuration / 2
138 easing.type: Easing.InOutQuad
142 enabled: tAction?.enabled ??
false
144 hoverEnabled: (!isExpandable || root.collapsed) && !Kirigami.Settings.tabletMode && !isSeparator
145 font.pointSize: isExpandable ? Kirigami.Theme.defaultFont.pointSize * 1.30 : Kirigami.Theme.defaultFont.pointSize
146 height: implicitHeight * opacity
149 visible: !listItem.isSeparator
150 && (listItem.hasToolTip || root.collapsed)
151 && !listItem.hasVisibleMenu
155 text: (listItem.kAction?.tooltip || listItem.tAction?.text) ??
""
156 delay: Kirigami.
Units.toolTipDelay
157 y: (listItem.height - height) / 2
158 x:
Qt.application.layoutDirection ===
Qt.
RightToLeft ? -width : listItem.width
165 if (stackView.openSubMenu) {
166 stackView.openSubMenu.visible = false;
168 if (actionsMenu.count > 0) {
169 actionsMenu.popup(this, width, 0);
175 Accessible.onPressAction: trigger()
176 Keys.onEnterPressed: event => trigger()
177 Keys.onReturnPressed: event => trigger()
183 if (root.collapsed) {
184 if (actionsMenu.count > 0 && !actionsMenu.visible) {
185 stackView.openSubMenu = actionsMenu;
186 actionsMenu.popup(
this, width, 0);
189 stackView.push(menuComponent, {
190 model: kAction?.children ?? [],
195 }
else if (root.resetMenuOnTriggered) {
198 checked =
Qt.binding(() => checkedBinding());
201 function checkedBinding(): bool {
202 return (tAction?.checked || actionsMenu?.visible) ?? false;
205 Keys.onDownPressed:
event => nextItemInFocusChain().focus =
true
206 Keys.onUpPressed:
event => nextItemInFocusChain(
false).focus =
true
QStringView level(QStringView ifopt)