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  }