77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
|
package menumanager
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"sync"
|
||
|
|
||
|
"github.com/wailsapp/wails/v2/pkg/menu"
|
||
|
)
|
||
|
|
||
|
// MenuItemMap holds a mapping between menuIDs and menu items
|
||
|
type MenuItemMap struct {
|
||
|
idToMenuItemMap map[string]*menu.MenuItem
|
||
|
menuItemToIDMap map[*menu.MenuItem]string
|
||
|
|
||
|
// We use a simple counter to keep track of unique menu IDs
|
||
|
menuIDCounter int64
|
||
|
menuIDCounterMutex sync.Mutex
|
||
|
}
|
||
|
|
||
|
func NewMenuItemMap() *MenuItemMap {
|
||
|
result := &MenuItemMap{
|
||
|
idToMenuItemMap: make(map[string]*menu.MenuItem),
|
||
|
menuItemToIDMap: make(map[*menu.MenuItem]string),
|
||
|
}
|
||
|
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func (m *MenuItemMap) AddMenu(menu *menu.Menu) {
|
||
|
if menu == nil {
|
||
|
return
|
||
|
}
|
||
|
for _, item := range menu.Items {
|
||
|
m.processMenuItem(item)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *MenuItemMap) Dump() {
|
||
|
println("idToMenuItemMap:")
|
||
|
for key, value := range m.idToMenuItemMap {
|
||
|
fmt.Printf(" %s\t%p\n", key, value)
|
||
|
}
|
||
|
println("\nmenuItemToIDMap")
|
||
|
for key, value := range m.menuItemToIDMap {
|
||
|
fmt.Printf(" %p\t%s\n", key, value)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// GenerateMenuID returns a unique string ID for a menu item
|
||
|
func (m *MenuItemMap) generateMenuID() string {
|
||
|
m.menuIDCounterMutex.Lock()
|
||
|
result := strconv.FormatInt(m.menuIDCounter, 10)
|
||
|
m.menuIDCounter++
|
||
|
m.menuIDCounterMutex.Unlock()
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func (m *MenuItemMap) processMenuItem(item *menu.MenuItem) {
|
||
|
if item.SubMenu != nil {
|
||
|
for _, submenuitem := range item.SubMenu.Items {
|
||
|
m.processMenuItem(submenuitem)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Create a unique ID for this menu item
|
||
|
menuID := m.generateMenuID()
|
||
|
|
||
|
// Store references
|
||
|
m.idToMenuItemMap[menuID] = item
|
||
|
m.menuItemToIDMap[item] = menuID
|
||
|
}
|
||
|
|
||
|
func (m *MenuItemMap) getMenuItemByID(menuId string) *menu.MenuItem {
|
||
|
return m.idToMenuItemMap[menuId]
|
||
|
}
|