From 4ada30d72aedb73554352623c8b7992636f7eeaf Mon Sep 17 00:00:00 2001 From: Steffest Date: Thu, 25 Mar 2021 11:23:39 +0100 Subject: [PATCH] TouchScreen support for submenus --- script/src/ui/components/menu.js | 14 +++++++++----- script/src/ui/components/submenu.js | 19 +++++++++++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/script/src/ui/components/menu.js b/script/src/ui/components/menu.js index 8fdc764..7e1991a 100644 --- a/script/src/ui/components/menu.js +++ b/script/src/ui/components/menu.js @@ -154,14 +154,18 @@ UI.menu = function(x,y,w,h,submenuParent){ return handled; } - me.deActivate = function(){ + me.deActivate = function(clickedItem){ if (activeIndex>=0){ var activeItem = items[activeIndex]; if (activeItem && activeItem.subMenu){ - activeItem.subMenu.hide(); - activeIndex=undefined; - me.refresh(); - Input.clearFocusElement(); + if (clickedItem && clickedItem.type === "submenu" && clickedItem.mainMenu && clickedItem.mainMenu.name === me.name){ + + }else{ + activeItem.subMenu.hide(); + activeIndex=undefined; + me.refresh(); + Input.clearFocusElement(); + } } } } diff --git a/script/src/ui/components/submenu.js b/script/src/ui/components/submenu.js index 2900c65..cfdd9aa 100644 --- a/script/src/ui/components/submenu.js +++ b/script/src/ui/components/submenu.js @@ -1,5 +1,6 @@ UI.submenu = function(x,y,w,h){ var me = UI.element(x,y,w,h); + me.type = "submenu"; var items; var itemHeight = 26; @@ -86,7 +87,6 @@ UI.submenu = function(x,y,w,h){ if (!(items && items.length)) return; var selectedItem = items[Math.floor(me.eventY/itemHeight)]; me.executeItem(selectedItem); - }; me.executeItem = function(item){ @@ -97,6 +97,8 @@ UI.submenu = function(x,y,w,h){ me.parent.refresh(); if (me.mainMenu) me.mainMenu.deActivate(); EventBus.trigger(EVENT.command,item.command); + }else if (item.subItems){ + me.toggleSubmenu(item); } } } @@ -114,7 +116,11 @@ UI.submenu = function(x,y,w,h){ subMenu.mainMenu = me.mainMenu; item.subMenu = subMenu; } - item.subMenu.setPosition(me.left + me.width - 20,me.top + item.index*itemHeight); + var left = me.left + me.width - 20; + if ((left+item.subMenu.width)>UI.mainPanel.width){ + left = UI.mainPanel.width-item.subMenu.width; + } + item.subMenu.setPosition(left,me.top + item.index*itemHeight); item.subMenu.show(); activeSubmenu = item; me.refresh(); @@ -128,6 +134,15 @@ UI.submenu = function(x,y,w,h){ } } + me.toggleSubmenu = function(item){ + if (item.subMenu && item.subMenu.isVisible()){ + me.deActivateSubmenu(); + }else{ + me.activateSubmenu(item); + } + + } + me.render = function(internal){ if (!me.isVisible()) return; internal = !!internal;