60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
|
package menumanager
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/wailsapp/wails/v2/pkg/menu"
|
||
|
)
|
||
|
|
||
|
type ContextMenu struct {
|
||
|
ID string
|
||
|
ProcessedMenu *WailsMenu
|
||
|
menuItemMap *MenuItemMap
|
||
|
menu *menu.Menu
|
||
|
}
|
||
|
|
||
|
func (t *ContextMenu) AsJSON() (string, error) {
|
||
|
data, err := json.Marshal(t)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
return string(data), nil
|
||
|
}
|
||
|
|
||
|
func NewContextMenu(contextMenu *menu.ContextMenu) *ContextMenu {
|
||
|
result := &ContextMenu{
|
||
|
ID: contextMenu.ID,
|
||
|
menu: contextMenu.Menu,
|
||
|
menuItemMap: NewMenuItemMap(),
|
||
|
}
|
||
|
|
||
|
result.menuItemMap.AddMenu(contextMenu.Menu)
|
||
|
result.ProcessedMenu = NewWailsMenu(result.menuItemMap, result.menu)
|
||
|
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func (m *Manager) AddContextMenu(contextMenu *menu.ContextMenu) {
|
||
|
newContextMenu := NewContextMenu(contextMenu)
|
||
|
|
||
|
// Save the references
|
||
|
m.contextMenus[contextMenu.ID] = newContextMenu
|
||
|
m.contextMenuPointers[contextMenu] = contextMenu.ID
|
||
|
}
|
||
|
|
||
|
func (m *Manager) UpdateContextMenu(contextMenu *menu.ContextMenu) (string, error) {
|
||
|
contextMenuID, contextMenuKnown := m.contextMenuPointers[contextMenu]
|
||
|
if !contextMenuKnown {
|
||
|
return "", fmt.Errorf("unknown Context Menu '%s'. Please add the context menu using AddContextMenu()", contextMenu.ID)
|
||
|
}
|
||
|
|
||
|
// Create the updated context menu
|
||
|
updatedContextMenu := NewContextMenu(contextMenu)
|
||
|
|
||
|
// Save the reference
|
||
|
m.contextMenus[contextMenuID] = updatedContextMenu
|
||
|
|
||
|
return updatedContextMenu.AsJSON()
|
||
|
}
|