[windows-x] Support multiple radiogroups

This commit is contained in:
Lea Anthony
2021-07-25 14:43:03 +10:00
parent f377c94ba3
commit aee395020f

View File

@@ -1,12 +1,12 @@
package windows
import (
"fmt"
"github.com/tadvi/winc"
"github.com/wailsapp/wails/v2/pkg/menu"
)
var checkboxMap = map[*menu.MenuItem][]*winc.MenuItem{}
var radioGroupMap = map[*menu.MenuItem][]*winc.MenuItem{}
func toggleCheckBox(menuItem *menu.MenuItem) {
menuItem.Checked = !menuItem.Checked
@@ -22,13 +22,25 @@ func addCheckBoxToMap(menuItem *menu.MenuItem, wincMenuItem *winc.MenuItem) {
checkboxMap[menuItem] = append(checkboxMap[menuItem], wincMenuItem)
}
func toggleRadioItem(menuItem *menu.MenuItem) {
menuItem.Checked = !menuItem.Checked
for _, wincMenu := range radioGroupMap[menuItem] {
wincMenu.SetChecked(menuItem.Checked)
}
}
func addRadioItemToMap(menuItem *menu.MenuItem, wincMenuItem *winc.MenuItem) {
if radioGroupMap[menuItem] == nil {
radioGroupMap[menuItem] = []*winc.MenuItem{}
}
radioGroupMap[menuItem] = append(radioGroupMap[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)
}
}
@@ -41,7 +53,7 @@ func processMenuItem(parent *winc.MenuItem, menuItem *menu.MenuItem) {
}
switch menuItem.Type {
case menu.SeparatorType:
parent.SetSeparator()
parent.AddSeparator()
case menu.TextType:
newItem := parent.AddItem(menuItem.Label, winc.NoShortcut)
if menuItem.Tooltip != "" {
@@ -74,6 +86,22 @@ func processMenuItem(parent *winc.MenuItem, menuItem *menu.MenuItem) {
newItem.SetEnabled(!menuItem.Disabled)
addCheckBoxToMap(menuItem, newItem)
case menu.RadioType:
newItem := parent.AddItemRadio(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) {
toggleRadioItem(menuItem)
menuItem.Click(&menu.CallbackData{
MenuItem: menuItem,
})
})
}
newItem.SetEnabled(!menuItem.Disabled)
addRadioItemToMap(menuItem, newItem)
case menu.SubmenuType:
submenu := parent.AddSubMenu(menuItem.Label)
for _, menuItem := range menuItem.SubMenu.Items {