From aee395020f4c289fceef6513addb9f660ef6c346 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 25 Jul 2021 14:43:03 +1000 Subject: [PATCH] [windows-x] Support multiple radiogroups --- v2/internal/frontend/windows/menu.go | 36 ++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/v2/internal/frontend/windows/menu.go b/v2/internal/frontend/windows/menu.go index 50f7fed5..3acd1251 100644 --- a/v2/internal/frontend/windows/menu.go +++ b/v2/internal/frontend/windows/menu.go @@ -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 {