mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-20 02:49:30 +08:00
Merge remote-tracking branch 'origin/v3-alpha-bugfix/mega-menu-fixes' into v3-alpha-bugfix/mega-menu-fixes
# Conflicts: # docs/src/content/docs/changelog.mdx # v3/examples/menu/main.go # v3/pkg/application/menuitem_windows.go
This commit is contained in:
commit
37e35a1450
@ -149,6 +149,120 @@ func main() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// ---- New index-based menu operations demo ----
|
||||||
|
indexMenu := menu.AddSubmenu("Index Operations")
|
||||||
|
|
||||||
|
// Add some initial items
|
||||||
|
indexMenu.Add("Item 0")
|
||||||
|
indexMenu.Add("Item 2")
|
||||||
|
indexMenu.Add("Item 4")
|
||||||
|
|
||||||
|
// Demonstrate inserting items at specific indices
|
||||||
|
indexMenu.InsertAt(1, "Item 1").OnClick(func(*application.Context) {
|
||||||
|
println("Item 1 clicked")
|
||||||
|
})
|
||||||
|
|
||||||
|
indexMenu.InsertAt(3, "Item 3").OnClick(func(*application.Context) {
|
||||||
|
println("Item 3 clicked")
|
||||||
|
})
|
||||||
|
|
||||||
|
// Demonstrate inserting different types of items at specific indices
|
||||||
|
indexMenu.AddSeparator()
|
||||||
|
indexMenu.InsertCheckboxAt(6, "Checkbox at index 6", true).OnClick(func(ctx *application.Context) {
|
||||||
|
println("Checkbox at index 6 clicked, checked:", ctx.ClickedMenuItem().Checked())
|
||||||
|
})
|
||||||
|
|
||||||
|
indexMenu.InsertRadioAt(7, "Radio at index 7", true).OnClick(func(ctx *application.Context) {
|
||||||
|
println("Radio at index 7 clicked")
|
||||||
|
})
|
||||||
|
|
||||||
|
indexMenu.InsertSeparatorAt(8)
|
||||||
|
|
||||||
|
// Create a submenu and insert it at a specific index
|
||||||
|
submenuAtIndex := indexMenu.InsertSubmenuAt(9, "Inserted Submenu")
|
||||||
|
submenuAtIndex.Add("Submenu Item 1")
|
||||||
|
submenuAtIndex.Add("Submenu Item 2")
|
||||||
|
|
||||||
|
// Demonstrate ItemAt to access items by index
|
||||||
|
indexMenu.AddSeparator()
|
||||||
|
indexMenu.Add("Get Item at Index").OnClick(func(*application.Context) {
|
||||||
|
// Get the item at index 2 and change its label
|
||||||
|
if item := indexMenu.ItemAt(2); item != nil {
|
||||||
|
println("Item at index 2:", item.Label())
|
||||||
|
item.SetLabel("Item 2 (Modified)")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Demonstrate Count method
|
||||||
|
indexMenu.Add("Count Items").OnClick(func(*application.Context) {
|
||||||
|
println("Menu has", indexMenu.Count(), "items")
|
||||||
|
})
|
||||||
|
|
||||||
|
// Demonstrate visibility control for different item types
|
||||||
|
visibilityMenu := menu.AddSubmenu("Visibility Control")
|
||||||
|
|
||||||
|
// Regular menu item
|
||||||
|
regularItem := visibilityMenu.Add("Regular Item")
|
||||||
|
|
||||||
|
// Checkbox menu item
|
||||||
|
checkboxItem := visibilityMenu.AddCheckbox("Checkbox Item", true)
|
||||||
|
|
||||||
|
// Radio menu item
|
||||||
|
radioItem := visibilityMenu.AddRadio("Radio Item", true)
|
||||||
|
|
||||||
|
// Separator
|
||||||
|
visibilityMenu.AddSeparator()
|
||||||
|
separatorIndex := visibilityMenu.Count() - 1
|
||||||
|
separatorItem := visibilityMenu.ItemAt(separatorIndex)
|
||||||
|
|
||||||
|
// Submenu - get the MenuItem for the submenu to control visibility
|
||||||
|
submenuMenuItem := application.NewSubMenuItem("Submenu")
|
||||||
|
visibilityMenu.InsertItemAt(visibilityMenu.Count(), submenuMenuItem)
|
||||||
|
submenuContent := submenuMenuItem.GetSubmenu()
|
||||||
|
submenuContent.Add("Submenu Content")
|
||||||
|
|
||||||
|
// Controls for toggling visibility
|
||||||
|
visibilityMenu.AddSeparator()
|
||||||
|
visibilityMenu.Add("Toggle Regular Item").OnClick(func(*application.Context) {
|
||||||
|
regularItem.SetHidden(!regularItem.Hidden())
|
||||||
|
println("Regular item hidden:", regularItem.Hidden())
|
||||||
|
})
|
||||||
|
|
||||||
|
visibilityMenu.Add("Toggle Checkbox Item").OnClick(func(*application.Context) {
|
||||||
|
checkboxItem.SetHidden(!checkboxItem.Hidden())
|
||||||
|
println("Checkbox item hidden:", checkboxItem.Hidden())
|
||||||
|
})
|
||||||
|
|
||||||
|
visibilityMenu.Add("Toggle Radio Item").OnClick(func(*application.Context) {
|
||||||
|
radioItem.SetHidden(!radioItem.Hidden())
|
||||||
|
println("Radio item hidden:", radioItem.Hidden())
|
||||||
|
})
|
||||||
|
|
||||||
|
visibilityMenu.Add("Toggle Separator").OnClick(func(*application.Context) {
|
||||||
|
separatorItem.SetHidden(!separatorItem.Hidden())
|
||||||
|
println("Separator hidden:", separatorItem.Hidden())
|
||||||
|
})
|
||||||
|
|
||||||
|
// For submenu visibility, we need to toggle the visibility of the MenuItem that contains the submenu
|
||||||
|
visibilityMenu.Add("Toggle Submenu").OnClick(func(ctx *application.Context) {
|
||||||
|
// Log the current state before toggling
|
||||||
|
println("Submenu hidden before toggle:", submenuMenuItem.Hidden())
|
||||||
|
|
||||||
|
// Toggle the visibility
|
||||||
|
submenuMenuItem.SetHidden(!submenuMenuItem.Hidden())
|
||||||
|
|
||||||
|
// Log the new state after toggling
|
||||||
|
println("Submenu hidden after toggle:", submenuMenuItem.Hidden())
|
||||||
|
|
||||||
|
// Update the menu item label to reflect the current state
|
||||||
|
if submenuMenuItem.Hidden() {
|
||||||
|
ctx.ClickedMenuItem().SetLabel("Show Submenu")
|
||||||
|
} else {
|
||||||
|
ctx.ClickedMenuItem().SetLabel("Hide Submenu")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
myMenu.AddSeparator()
|
myMenu.AddSeparator()
|
||||||
|
|
||||||
coffee := myMenu.Add("Request Coffee").OnClick(func(*application.Context) {
|
coffee := myMenu.Add("Request Coffee").OnClick(func(*application.Context) {
|
||||||
|
@ -41,6 +41,7 @@ func (m *windowsMenuItem) setHidden(hidden bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For submenus, we need special handling
|
||||||
if m.menuItem.submenu != nil {
|
if m.menuItem.submenu != nil {
|
||||||
// Find our position in the parent menu
|
// Find our position in the parent menu
|
||||||
var position int = -1
|
var position int = -1
|
||||||
|
Loading…
Reference in New Issue
Block a user