2020-11-24 19:43:25 +11:00
|
|
|
package menu
|
|
|
|
|
|
2022-04-09 20:36:48 +10:00
|
|
|
import "github.com/wailsapp/wails/v2/pkg/menu/keys"
|
|
|
|
|
|
2020-11-24 19:43:25 +11:00
|
|
|
type Menu struct {
|
|
|
|
|
Items []*MenuItem
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewMenu() *Menu {
|
|
|
|
|
return &Menu{}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Menu) Append(item *MenuItem) {
|
|
|
|
|
m.Items = append(m.Items, item)
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-15 11:53:55 +11:00
|
|
|
// Merge will append the items in the given menu
|
|
|
|
|
// into this menu
|
|
|
|
|
func (m *Menu) Merge(menu *Menu) {
|
2023-07-13 21:13:47 +08:00
|
|
|
m.Items = append(m.Items, menu.Items...)
|
2021-01-15 11:53:55 +11:00
|
|
|
}
|
|
|
|
|
|
2022-04-09 20:36:48 +10:00
|
|
|
// AddText adds a TextMenu item to the menu
|
|
|
|
|
func (m *Menu) AddText(label string, accelerator *keys.Accelerator, click Callback) *MenuItem {
|
|
|
|
|
item := Text(label, accelerator, click)
|
|
|
|
|
m.Append(item)
|
|
|
|
|
return item
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AddCheckbox adds a CheckboxMenu item to the menu
|
|
|
|
|
func (m *Menu) AddCheckbox(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem {
|
|
|
|
|
item := Checkbox(label, checked, accelerator, click)
|
|
|
|
|
m.Append(item)
|
|
|
|
|
return item
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AddRadio adds a radio item to the menu
|
|
|
|
|
func (m *Menu) AddRadio(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem {
|
|
|
|
|
item := Radio(label, checked, accelerator, click)
|
|
|
|
|
m.Append(item)
|
|
|
|
|
return item
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AddSeparator adds a separator to the menu
|
|
|
|
|
func (m *Menu) AddSeparator() {
|
|
|
|
|
item := Separator()
|
|
|
|
|
m.Append(item)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Menu) AddSubmenu(label string) *Menu {
|
|
|
|
|
submenu := NewMenu()
|
|
|
|
|
item := SubMenu(label, submenu)
|
|
|
|
|
m.Append(item)
|
|
|
|
|
return submenu
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-08 06:28:51 +11:00
|
|
|
func (m *Menu) Prepend(item *MenuItem) {
|
|
|
|
|
m.Items = append([]*MenuItem{item}, m.Items...)
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-24 19:43:25 +11:00
|
|
|
func NewMenuFromItems(first *MenuItem, rest ...*MenuItem) *Menu {
|
2023-11-12 12:30:49 +11:00
|
|
|
result := NewMenu()
|
2020-11-24 19:43:25 +11:00
|
|
|
result.Append(first)
|
|
|
|
|
for _, item := range rest {
|
|
|
|
|
result.Append(item)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
}
|
2020-12-05 07:52:59 +11:00
|
|
|
|
2021-01-08 06:28:51 +11:00
|
|
|
func (m *Menu) setParent(menuItem *MenuItem) {
|
|
|
|
|
for _, item := range m.Items {
|
|
|
|
|
item.parent = menuItem
|
|
|
|
|
}
|
|
|
|
|
}
|