mirror of
https://github.com/wavetermdev/wails.git
synced 2026-08-05 13:53:43 -07:00
Initial support for menus
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
package menu
|
||||
|
||||
// DefaultMacMenu returns a default menu including the default
|
||||
// Application and Edit menus. Use `.Append()` to add to it.
|
||||
func DefaultMacMenu() *Menu {
|
||||
return NewMenuFromItems(
|
||||
AppMenu(),
|
||||
EditMenu(),
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package menu
|
||||
|
||||
type Menu struct {
|
||||
Items []*MenuItem
|
||||
}
|
||||
|
||||
func NewMenu() *Menu {
|
||||
return &Menu{}
|
||||
}
|
||||
|
||||
func (m *Menu) Append(item *MenuItem) {
|
||||
m.Items = append(m.Items, item)
|
||||
}
|
||||
|
||||
func NewMenuFromItems(first *MenuItem, rest ...*MenuItem) *Menu {
|
||||
|
||||
var result = NewMenu()
|
||||
result.Append(first)
|
||||
for _, item := range rest {
|
||||
result.Append(item)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package menu
|
||||
|
||||
type MenuItem struct {
|
||||
Id string `json:"Id,omitempty"`
|
||||
Label string
|
||||
Role Role `json:"Role,omitempty"`
|
||||
Accelerator string `json:"Accelerator,omitempty"`
|
||||
Type Type
|
||||
Enabled bool
|
||||
Visible bool
|
||||
Checked bool
|
||||
SubMenu []*MenuItem `json:"SubMenu,omitempty"`
|
||||
}
|
||||
|
||||
func Text(label string, id string) *MenuItem {
|
||||
return &MenuItem{
|
||||
Id: id,
|
||||
Label: label,
|
||||
Type: NormalType,
|
||||
Enabled: true,
|
||||
Visible: true,
|
||||
}
|
||||
}
|
||||
|
||||
// Separator provides a menu separator
|
||||
func Separator() *MenuItem {
|
||||
return &MenuItem{
|
||||
Type: SeparatorType,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
// Package menu provides all the functions and structs related to menus in a Wails application.
|
||||
// Heavily inspired by Electron (c) 2013-2020 Github Inc.
|
||||
// Electron License: https://github.com/electron/electron/blob/master/LICENSE
|
||||
package menu
|
||||
|
||||
type Role string
|
||||
|
||||
const (
|
||||
AboutRole Role = "about"
|
||||
UndoRole Role = "undo"
|
||||
RedoRole Role = "redo"
|
||||
CutRole Role = "cut"
|
||||
CopyRole Role = "copy"
|
||||
PasteRole Role = "paste"
|
||||
PasteAndMatchStyleRole Role = "pasteAndMatchStyle"
|
||||
SelectAllRole Role = "selectAll"
|
||||
DeleteRole Role = "delete"
|
||||
MinimizeRole Role = "minimize"
|
||||
QuitRole Role = "quit"
|
||||
TogglefullscreenRole Role = "togglefullscreen"
|
||||
FileMenuRole Role = "fileMenu"
|
||||
EditMenuRole Role = "editMenu"
|
||||
ViewMenuRole Role = "viewMenu"
|
||||
WindowMenuRole Role = "windowMenu"
|
||||
AppMenuRole Role = "appMenu"
|
||||
HideRole Role = "hide"
|
||||
HideOthersRole Role = "hideOthers"
|
||||
UnhideRole Role = "unhide"
|
||||
FrontRole Role = "front"
|
||||
ZoomRole Role = "zoom"
|
||||
WindowSubMenuRole Role = "windowSubMenu"
|
||||
HelpSubMenuRole Role = "helpSubMenu"
|
||||
SeparatorItemRole Role = "separatorItem"
|
||||
)
|
||||
|
||||
// About provides a MenuItem with the About role
|
||||
func About() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: AboutRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Undo provides a MenuItem with the Undo role
|
||||
func Undo() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: UndoRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Redo provides a MenuItem with the Redo role
|
||||
func Redo() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: RedoRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Cut provides a MenuItem with the Cut role
|
||||
func Cut() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: CutRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Copy provides a MenuItem with the Copy role
|
||||
func Copy() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: CopyRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Paste provides a MenuItem with the Paste role
|
||||
func Paste() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: PasteRole,
|
||||
}
|
||||
}
|
||||
|
||||
// PasteAndMatchStyle provides a MenuItem with the PasteAndMatchStyle role
|
||||
func PasteAndMatchStyle() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: PasteAndMatchStyleRole,
|
||||
}
|
||||
}
|
||||
|
||||
// SelectAll provides a MenuItem with the SelectAll role
|
||||
func SelectAll() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: SelectAllRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Delete provides a MenuItem with the Delete role
|
||||
func Delete() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: DeleteRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Minimize provides a MenuItem with the Minimize role
|
||||
func Minimize() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: MinimizeRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Quit provides a MenuItem with the Quit role
|
||||
func Quit() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: QuitRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Togglefullscreen provides a MenuItem with the Togglefullscreen role
|
||||
func Togglefullscreen() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: TogglefullscreenRole,
|
||||
}
|
||||
}
|
||||
|
||||
// FileMenu provides a MenuItem with the whole default "File" menu (Close / Quit)
|
||||
func FileMenu() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: FileMenuRole,
|
||||
}
|
||||
}
|
||||
|
||||
// EditMenu provides a MenuItem with the whole default "Edit" menu (Undo, Copy, etc.).
|
||||
func EditMenu() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: EditMenuRole,
|
||||
}
|
||||
}
|
||||
|
||||
// ViewMenu provides a MenuItem with the whole default "View" menu (Reload, Toggle Developer Tools, etc.)
|
||||
func ViewMenu() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: ViewMenuRole,
|
||||
}
|
||||
}
|
||||
|
||||
// WindowMenu provides a MenuItem with the whole default "Window" menu (Minimize, Zoom, etc.).
|
||||
func WindowMenu() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: WindowMenuRole,
|
||||
}
|
||||
}
|
||||
|
||||
// These roles are Mac only
|
||||
|
||||
// AppMenu provides a MenuItem with the whole default "App" menu (About, Services, etc.)
|
||||
func AppMenu() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: AppMenuRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Hide provides a MenuItem that maps to the hide action.
|
||||
func Hide() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: HideRole,
|
||||
}
|
||||
}
|
||||
|
||||
// HideOthers provides a MenuItem that maps to the hideOtherApplications action.
|
||||
func HideOthers() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: HideOthersRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Unhide provides a MenuItem that maps to the unhideAllApplications action.
|
||||
func Unhide() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: UnhideRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Front provides a MenuItem that maps to the arrangeInFront action.
|
||||
func Front() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: FrontRole,
|
||||
}
|
||||
}
|
||||
|
||||
// Zoom provides a MenuItem that maps to the performZoom action.
|
||||
func Zoom() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: ZoomRole,
|
||||
}
|
||||
}
|
||||
|
||||
// WindowSubMenu provides a MenuItem with the "Window" submenu.
|
||||
func WindowSubMenu() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: WindowSubMenuRole,
|
||||
}
|
||||
}
|
||||
|
||||
// HelpSubMenu provides a MenuItem with the "Help" submenu.
|
||||
func HelpSubMenu() *MenuItem {
|
||||
return &MenuItem{
|
||||
Role: HelpSubMenuRole,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package menu
|
||||
|
||||
// SubMenu creates a new submenu which may be added to other
|
||||
// menus
|
||||
func SubMenu(label string, items []*MenuItem) *MenuItem {
|
||||
return &MenuItem{
|
||||
Label: label,
|
||||
SubMenu: items,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package menu
|
||||
|
||||
// Type of the menu item
|
||||
type Type string
|
||||
|
||||
const (
|
||||
// NormalType is the Normal menuitem type
|
||||
NormalType Type = "Normal"
|
||||
// SeparatorType is the Separator menuitem type
|
||||
SeparatorType Type = "Separator"
|
||||
// SubmenuType is the Submenu menuitem type
|
||||
SubmenuType Type = "Submenu"
|
||||
// CheckboxType is the Checkbox menuitem type
|
||||
CheckboxType Type = "Checkbox"
|
||||
// RadioType is the Radio menuitem type
|
||||
RadioType Type = "Radio"
|
||||
)
|
||||
Reference in New Issue
Block a user