| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 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)
- }
- }
- }
|