github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/menumanager/contextmenu.go (about) 1 package menumanager 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/AlpineAIO/wails/v2/pkg/menu" 8 ) 9 10 type ContextMenu struct { 11 ID string 12 ProcessedMenu *WailsMenu 13 menuItemMap *MenuItemMap 14 menu *menu.Menu 15 } 16 17 func (t *ContextMenu) AsJSON() (string, error) { 18 data, err := json.Marshal(t) 19 if err != nil { 20 return "", err 21 } 22 return string(data), nil 23 } 24 25 func NewContextMenu(contextMenu *menu.ContextMenu) *ContextMenu { 26 result := &ContextMenu{ 27 ID: contextMenu.ID, 28 menu: contextMenu.Menu, 29 menuItemMap: NewMenuItemMap(), 30 } 31 32 result.menuItemMap.AddMenu(contextMenu.Menu) 33 result.ProcessedMenu = NewWailsMenu(result.menuItemMap, result.menu) 34 35 return result 36 } 37 38 func (m *Manager) AddContextMenu(contextMenu *menu.ContextMenu) { 39 newContextMenu := NewContextMenu(contextMenu) 40 41 // Save the references 42 m.contextMenus[contextMenu.ID] = newContextMenu 43 m.contextMenuPointers[contextMenu] = contextMenu.ID 44 } 45 46 func (m *Manager) UpdateContextMenu(contextMenu *menu.ContextMenu) (string, error) { 47 contextMenuID, contextMenuKnown := m.contextMenuPointers[contextMenu] 48 if !contextMenuKnown { 49 return "", fmt.Errorf("unknown Context Menu '%s'. Please add the context menu using AddContextMenu()", contextMenu.ID) 50 } 51 52 // Create the updated context menu 53 updatedContextMenu := NewContextMenu(contextMenu) 54 55 // Save the reference 56 m.contextMenus[contextMenuID] = updatedContextMenu 57 58 return updatedContextMenu.AsJSON() 59 }