61 lines
1008 B
QML
61 lines
1008 B
QML
pragma Singleton
|
|
import QtQuick
|
|
|
|
QtObject {
|
|
id: root
|
|
|
|
property Item activeMenu: null
|
|
property Item activeTrigger: null
|
|
|
|
function close(menu) {
|
|
if (!menu)
|
|
return;
|
|
|
|
if (activeMenu === menu) {
|
|
activeMenu = null;
|
|
activeTrigger = null;
|
|
}
|
|
|
|
menu.expanded = false;
|
|
}
|
|
|
|
function closeActive() {
|
|
if (activeMenu)
|
|
activeMenu.expanded = false;
|
|
|
|
activeMenu = null;
|
|
activeTrigger = null;
|
|
}
|
|
|
|
function forget(menu) {
|
|
if (activeMenu === menu) {
|
|
activeMenu = null;
|
|
activeTrigger = null;
|
|
}
|
|
}
|
|
|
|
function hit(item, scenePos) {
|
|
if (!item || !item.visible)
|
|
return false;
|
|
|
|
const p = item.mapFromItem(null, scenePos.x, scenePos.y);
|
|
return item.contains(p);
|
|
}
|
|
|
|
function open(menu, trigger) {
|
|
if (activeMenu && activeMenu !== menu)
|
|
activeMenu.expanded = false;
|
|
|
|
activeMenu = menu;
|
|
activeTrigger = trigger || null;
|
|
menu.expanded = true;
|
|
}
|
|
|
|
function toggle(menu, trigger) {
|
|
if (activeMenu === menu && menu.expanded)
|
|
close(menu);
|
|
else
|
|
open(menu, trigger);
|
|
}
|
|
}
|