94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
package fyne
|
|
|
|
type systemTrayDriver interface {
|
|
Driver
|
|
SetSystemTrayMenu(*Menu)
|
|
SystemTrayMenu() *Menu
|
|
}
|
|
|
|
// Menu stores the information required for a standard menu.
|
|
// A menu can pop down from a MainMenu or could be a pop out menu.
|
|
type Menu struct {
|
|
Label string
|
|
Items []*MenuItem
|
|
}
|
|
|
|
// NewMenu creates a new menu given the specified label (to show in a MainMenu) and list of items to display.
|
|
func NewMenu(label string, items ...*MenuItem) *Menu {
|
|
return &Menu{Label: label, Items: items}
|
|
}
|
|
|
|
// Refresh will instruct this menu to update its display.
|
|
//
|
|
// Since: 2.2
|
|
func (m *Menu) Refresh() {
|
|
for _, w := range CurrentApp().Driver().AllWindows() {
|
|
main := w.MainMenu()
|
|
if main != nil {
|
|
for _, menu := range main.Items {
|
|
if menu == m {
|
|
w.SetMainMenu(main)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if d, ok := CurrentApp().Driver().(systemTrayDriver); ok {
|
|
if m == d.SystemTrayMenu() {
|
|
d.SetSystemTrayMenu(m)
|
|
}
|
|
}
|
|
}
|
|
|
|
// MenuItem is a single item within any menu, it contains a display Label and Action function that is called when tapped.
|
|
type MenuItem struct {
|
|
ChildMenu *Menu
|
|
// Since: 2.1
|
|
IsQuit bool
|
|
IsSeparator bool
|
|
Label string
|
|
Action func()
|
|
// Since: 2.1
|
|
Disabled bool
|
|
// Since: 2.1
|
|
Checked bool
|
|
// Since: 2.2
|
|
Icon Resource
|
|
// Since: 2.2
|
|
Shortcut Shortcut
|
|
}
|
|
|
|
// NewMenuItem creates a new menu item from the passed label and action parameters.
|
|
func NewMenuItem(label string, action func()) *MenuItem {
|
|
return &MenuItem{Label: label, Action: action}
|
|
}
|
|
|
|
// NewMenuItemSeparator creates a menu item that is to be used as a separator.
|
|
func NewMenuItemSeparator() *MenuItem {
|
|
return &MenuItem{IsSeparator: true, Action: func() {}}
|
|
}
|
|
|
|
// MainMenu defines the data required to show a menu bar (desktop) or other appropriate top level menu.
|
|
type MainMenu struct {
|
|
Items []*Menu
|
|
}
|
|
|
|
// NewMainMenu creates a top level menu structure used by fyne.Window for displaying a menubar
|
|
// (or appropriate equivalent).
|
|
func NewMainMenu(items ...*Menu) *MainMenu {
|
|
return &MainMenu{Items: items}
|
|
}
|
|
|
|
// Refresh will instruct any rendered menus using this struct to update their display.
|
|
//
|
|
// Since: 2.2
|
|
func (m *MainMenu) Refresh() {
|
|
for _, w := range CurrentApp().Driver().AllWindows() {
|
|
menu := w.MainMenu()
|
|
if menu != nil && menu == m {
|
|
w.SetMainMenu(m)
|
|
}
|
|
}
|
|
}
|