Warning, /plasma/plasma-simplemenu/package/contents/ui/ActionMenu.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2013 Aurélien Gâteau <agateau@kde.org>
0003 SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
0004
0005 SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007
0008 import QtQuick 2.0
0009
0010 import org.kde.plasma.components 2.0 as PlasmaComponents
0011
0012 Item {
0013 id: root
0014
0015 property QtObject menu
0016 property Item visualParent
0017 property variant actionList
0018 property bool opened: menu ? (menu.status != PlasmaComponents.DialogStatus.Closed) : false
0019
0020 signal actionClicked(string actionId, variant actionArgument)
0021 signal closed
0022
0023 onActionListChanged: refreshMenu();
0024
0025 onOpenedChanged: {
0026 if (!opened) {
0027 closed();
0028 }
0029 }
0030
0031 function open(x, y) {
0032 if (!actionList) {
0033 return;
0034 }
0035
0036 if (x && y) {
0037 menu.open(x, y);
0038 } else {
0039 menu.open();
0040 }
0041 }
0042
0043 function refreshMenu() {
0044 if (menu) {
0045 menu.destroy();
0046 }
0047
0048 if (!actionList) {
0049 return;
0050 }
0051
0052 menu = contextMenuComponent.createObject(root);
0053
0054 fillMenu(menu, actionList);
0055 }
0056
0057 function fillMenu(menu, items) {
0058 items.forEach(function(actionItem) {
0059 if (actionItem.subActions) {
0060 // This is a menu
0061 var submenuItem = contextSubmenuItemComponent.createObject(
0062 menu, { "actionItem" : actionItem });
0063
0064 fillMenu(submenuItem.submenu, actionItem.subActions);
0065
0066 } else {
0067 var item = contextMenuItemComponent.createObject(
0068 menu,
0069 {
0070 "actionItem": actionItem,
0071 }
0072 );
0073 }
0074 });
0075
0076 }
0077
0078 Component {
0079 id: contextMenuComponent
0080
0081 PlasmaComponents.ContextMenu {
0082 visualParent: root.visualParent
0083 }
0084 }
0085
0086 Component {
0087 id: contextSubmenuItemComponent
0088
0089 PlasmaComponents.MenuItem {
0090 id: submenuItem
0091
0092 property variant actionItem
0093
0094 text: actionItem.text ? actionItem.text : ""
0095 icon: actionItem.icon ? actionItem.icon : null
0096
0097 property variant submenu : submenu_
0098
0099 PlasmaComponents.ContextMenu {
0100 id: submenu_
0101 visualParent: submenuItem.action
0102 }
0103 }
0104 }
0105
0106 Component {
0107 id: contextMenuItemComponent
0108
0109 PlasmaComponents.MenuItem {
0110 property variant actionItem
0111
0112 text : actionItem.text ? actionItem.text : ""
0113 enabled : actionItem.type != "title" && ("enabled" in actionItem ? actionItem.enabled : true)
0114 separator : actionItem.type == "separator"
0115 section : actionItem.type == "title"
0116 icon : actionItem.icon ? actionItem.icon : null
0117 checkable : actionItem.checkable ? actionItem.checkable : false
0118 checked : actionItem.checked ? actionItem.checked : false
0119
0120 onClicked: {
0121 actionClicked(actionItem.actionId, actionItem.actionArgument);
0122 }
0123 }
0124 }
0125 }