/*SPDX-FileCopyrightText: 2013 AurΓ©lien GΓ’teau <agateau@kde.org>SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>SPDX-FileCopyrightText: 2021 Mikel Johnson <mikel5764@gmail.com>SPDX-FileCopyrightText: 2021 Noah Davis <noahadvs@gmail.com>SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>SPDX-License-Identifier: GPL-2.0-or-later*/pragma ComponentBehavior: Boundpragma Singleton // NOTE: Singletons are shared between all instances of a plasmoidimport QtQuickimport org.kde.plasma.plasmoidimport org.kde.plasma.extras as PlasmaExtrasimport "code/tools.js" as ToolsItem {id: rootproperty var actionList: null// Only one action menu can be open at a time, so this should be safe to use.property PlasmoidItem plasmoid: null// Not a QQC1 Menu. It's actually a custom QObject that uses a QMenu.readonly property PlasmaExtras.Menu menu: PlasmaExtras.Menu {id: menuvisualParent: nullplacement: PlasmaExtras.Menu.BottomPosedLeftAlignedPopup}visible: falseInstantiator {active: root.actionList !== nullmodel: root.actionListdelegate: menuItemComponentonObjectAdded: (index, object) => menu.addMenuItem(object)onObjectRemoved: (index, object) => menu.removeMenuItem(object)}Component {id: menuComponentPlasmaExtras.Menu {}}Component {id: menuItemComponentPlasmaExtras.MenuItem {id: menuItemrequired property var modelDatareadonly property PlasmaExtras.Menu subMenu: modelData.subActions? menuComponent.createObject(this, { visualParent: action }) as PlasmaExtras.Menu: nulltext: modelData.text ?? ""enabled: modelData.type !== "title" && (modelData.enabled ?? true)separator: modelData.type === "separator"section: modelData.type === "title"icon: modelData.icon ?? nullcheckable: modelData.checkable ?? falsechecked: modelData.checked ?? falsereadonly property Instantiator __instantiator: Instantiator {active: menuItem.subMenu !== nullmodel: menuItem.modelData.subActionsdelegate: menuItemComponentonObjectAdded: (index, object) => menuItem.subMenu.addMenuItem(object)onObjectRemoved: (index, object) => menuItem.subMenu.removeMenuItem(object)}onClicked: {const modelActionTriggered = Tools.triggerAction(menu.visualParent.view.model,menu.visualParent.index,modelData.actionId,modelData.actionArgument)// close early (if marked as such) to be more responsive to user inputif (modelActionTriggered && root.plasmoid.hideOnWindowDeactivate) {root.plasmoid.expanded = false}}}}}