mirror of
https://github.com/taigrr/wails.git
synced 2026-04-02 13:19:00 -07:00
[windows-x] Support multiple radiogroups
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user