mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-04 12:51:38 +08:00
84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package windows
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/tadvi/winc"
|
|
"github.com/wailsapp/wails/v2/pkg/menu"
|
|
)
|
|
|
|
var checkboxMap = map[*menu.MenuItem][]*winc.MenuItem{}
|
|
|
|
func toggleCheckBox(menuItem *menu.MenuItem) {
|
|
menuItem.Checked = !menuItem.Checked
|
|
for _, wincMenu := range checkboxMap[menuItem] {
|
|
wincMenu.SetChecked(menuItem.Checked)
|
|
}
|
|
}
|
|
|
|
func addCheckBoxToMap(menuItem *menu.MenuItem, wincMenuItem *winc.MenuItem) {
|
|
if checkboxMap[menuItem] == nil {
|
|
checkboxMap[menuItem] = []*winc.MenuItem{}
|
|
}
|
|
checkboxMap[menuItem] = append(checkboxMap[menuItem], wincMenuItem)
|
|
}
|
|
|
|
func processApplicationMenu(window *Window, menuToProcess *menu.Menu) {
|
|
mainMenu := window.NewMenu()
|
|
for _, menuItem := range menuToProcess.Items {
|
|
println("Adding menu:", menuItem.Label)
|
|
submenu := mainMenu.AddSubMenu(menuItem.Label)
|
|
for _, menuItem := range menuItem.SubMenu.Items {
|
|
fmt.Printf("Processing: %#v\n", menuItem)
|
|
processMenuItem(submenu, menuItem)
|
|
}
|
|
}
|
|
mainMenu.Show()
|
|
}
|
|
|
|
func processMenuItem(parent *winc.MenuItem, menuItem *menu.MenuItem) {
|
|
if menuItem.Hidden {
|
|
return
|
|
}
|
|
switch menuItem.Type {
|
|
case menu.SeparatorType:
|
|
parent.SetSeparator()
|
|
case menu.TextType:
|
|
newItem := parent.AddItem(menuItem.Label, winc.NoShortcut)
|
|
if menuItem.Tooltip != "" {
|
|
newItem.SetToolTip(menuItem.Tooltip)
|
|
}
|
|
if menuItem.Click != nil {
|
|
newItem.OnClick().Bind(func(e *winc.Event) {
|
|
menuItem.Click(&menu.CallbackData{
|
|
MenuItem: menuItem,
|
|
})
|
|
})
|
|
}
|
|
newItem.SetEnabled(!menuItem.Disabled)
|
|
|
|
case menu.CheckboxType:
|
|
newItem := parent.AddItem(menuItem.Label, winc.NoShortcut)
|
|
newItem.SetCheckable(true)
|
|
newItem.SetChecked(menuItem.Checked)
|
|
if menuItem.Tooltip != "" {
|
|
newItem.SetToolTip(menuItem.Tooltip)
|
|
}
|
|
if menuItem.Click != nil {
|
|
newItem.OnClick().Bind(func(e *winc.Event) {
|
|
toggleCheckBox(menuItem)
|
|
menuItem.Click(&menu.CallbackData{
|
|
MenuItem: menuItem,
|
|
})
|
|
})
|
|
}
|
|
newItem.SetEnabled(!menuItem.Disabled)
|
|
addCheckBoxToMap(menuItem, newItem)
|
|
case menu.RadioType:
|
|
case menu.SubmenuType:
|
|
submenu := parent.AddSubMenu(menuItem.Label)
|
|
for _, menuItem := range menuItem.SubMenu.Items {
|
|
processMenuItem(submenu, menuItem)
|
|
}
|
|
}
|
|
}
|