mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 11:10:47 +08:00
225 lines
6.5 KiB
Go
225 lines
6.5 KiB
Go
package main
|
|
|
|
import (
|
|
_ "embed"
|
|
"log"
|
|
"runtime"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/wailsapp/wails/v3/pkg/application"
|
|
)
|
|
|
|
func main() {
|
|
app := application.New(application.Options{
|
|
Name: "Menu Demo",
|
|
Description: "A demo of the menu system",
|
|
Mac: application.MacOptions{
|
|
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
|
},
|
|
})
|
|
/*
|
|
app.On(events.Mac.ApplicationDidFinishLaunching, func() {
|
|
println("ApplicationDidFinishLaunching")
|
|
})
|
|
app.On(events.Mac.ApplicationWillTerminate, func() {
|
|
println("ApplicationWillTerminate")
|
|
})
|
|
app.On(events.Mac.ApplicationDidBecomeActive, func() {
|
|
println("ApplicationDidBecomeActive")
|
|
})
|
|
app.On(events.Mac.ApplicationDidChangeBackingProperties, func() {
|
|
println("ApplicationDidChangeBackingProperties")
|
|
})
|
|
|
|
app.On(events.Mac.ApplicationDidChangeEffectiveAppearance, func() {
|
|
println("ApplicationDidChangeEffectiveAppearance")
|
|
})
|
|
app.On(events.Mac.ApplicationDidHide, func() {
|
|
println("ApplicationDidHide")
|
|
})
|
|
|
|
*/
|
|
|
|
menuCallback := func(ctx *application.Context) {
|
|
menuItem := ctx.ClickedMenuItem()
|
|
menuItem.SetLabel("Clicked!")
|
|
}
|
|
|
|
radioCallback := func(ctx *application.Context) {
|
|
menuItem := ctx.ClickedMenuItem()
|
|
menuItem.SetLabel(menuItem.Label() + "!")
|
|
}
|
|
|
|
myMenu := app.NewMenu()
|
|
file1 := myMenu.Add("File")
|
|
file1.SetTooltip("Create New Tray Menu")
|
|
file1.OnClick(menuCallback)
|
|
myMenu.Add("Create New Tray Menu").
|
|
SetAccelerator("CmdOrCtrl+N").
|
|
SetTooltip("ROFLCOPTER!!!!").
|
|
OnClick(func(ctx *application.Context) {
|
|
mySystray := app.NewSystemTray()
|
|
mySystray.SetLabel("Wails")
|
|
if runtime.GOOS == "darwin" {
|
|
mySystray.SetTemplateIcon(application.DefaultMacTemplateIcon)
|
|
} else {
|
|
mySystray.SetIcon(application.DefaultApplicationIcon)
|
|
}
|
|
myMenu := app.NewMenu()
|
|
myMenu.Add("Item 1")
|
|
myMenu.AddSeparator()
|
|
myMenu.Add("Kill this menu").OnClick(func(ctx *application.Context) {
|
|
mySystray.Destroy()
|
|
})
|
|
mySystray.SetMenu(myMenu)
|
|
|
|
})
|
|
myMenu.Add("Not Enabled").SetEnabled(false)
|
|
myMenu.AddSeparator()
|
|
myMenu.AddCheckbox("My checkbox", true).OnClick(menuCallback)
|
|
myMenu.AddSeparator()
|
|
myMenu.AddRadio("Radio 1", true).OnClick(radioCallback)
|
|
myMenu.AddRadio("Radio 2", false).OnClick(radioCallback)
|
|
myMenu.AddRadio("Radio 3", false).OnClick(radioCallback)
|
|
|
|
submenu := myMenu.AddSubmenu("Submenu")
|
|
submenu.Add("Submenu item 1").OnClick(menuCallback)
|
|
submenu.Add("Submenu item 2").OnClick(menuCallback)
|
|
submenu.Add("Submenu item 3").OnClick(menuCallback)
|
|
myMenu.AddSeparator()
|
|
file4 := myMenu.Add("File 4").OnClick(func(*application.Context) {
|
|
println("File 4 clicked")
|
|
})
|
|
|
|
myMenu.Add("Click to toggle").OnClick(func(*application.Context) {
|
|
enabled := file4.Enabled()
|
|
println("Enabled: ", enabled)
|
|
file4.SetEnabled(!enabled)
|
|
})
|
|
myMenu.Add("File 5").OnClick(menuCallback)
|
|
|
|
mySystray := app.NewSystemTray()
|
|
mySystray.SetLabel("Wails is awesome")
|
|
if runtime.GOOS == "darwin" {
|
|
mySystray.SetTemplateIcon(application.DefaultMacTemplateIcon)
|
|
} else {
|
|
mySystray.SetIcon(application.DefaultApplicationIcon)
|
|
}
|
|
mySystray.SetMenu(myMenu)
|
|
mySystray.SetIconPosition(application.NSImageLeading)
|
|
|
|
myWindow := app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
|
|
Title: "Kitchen Sink",
|
|
Width: 600,
|
|
Height: 400,
|
|
AlwaysOnTop: true,
|
|
DisableResize: false,
|
|
BackgroundColour: &application.RGBA{
|
|
Red: 255,
|
|
Green: 255,
|
|
Blue: 255,
|
|
Alpha: 30,
|
|
},
|
|
StartState: application.WindowStateMaximised,
|
|
Mac: application.MacWindow{
|
|
Backdrop: application.MacBackdropTranslucent,
|
|
Appearance: application.NSAppearanceNameDarkAqua,
|
|
},
|
|
})
|
|
/*
|
|
myWindow.On(events.Mac.WindowWillClose, func() {
|
|
println(myWindow.ID(), "WindowWillClose")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidResize, func() {
|
|
//w, h := myWindow.Size()
|
|
//println(myWindow.ID(), "WindowDidResize", w, h)
|
|
})
|
|
myWindow.On(events.Mac.WindowDidMove, func() {
|
|
//x, y := myWindow.Position()
|
|
//println(myWindow.ID(), "WindowDidMove", x, y)
|
|
})
|
|
myWindow.On(events.Mac.WindowDidMiniaturize, func() {
|
|
println(myWindow.ID(), "WindowDidMiniaturize")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidDeminiaturize, func() {
|
|
println(myWindow.ID(), "WindowDidDeminiaturize")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidBecomeKey, func() {
|
|
println(myWindow.ID(), "WindowDidBecomeKey")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidResignKey, func() {
|
|
println(myWindow.ID(), "WindowDidResignKey")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidBecomeMain, func() {
|
|
println(myWindow.ID(), "WindowDidBecomeMain")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidResignMain, func() {
|
|
println(myWindow.ID(), "WindowDidResignMain")
|
|
})
|
|
myWindow.On(events.Mac.WindowWillEnterFullScreen, func() {
|
|
println(myWindow.ID(), "WindowWillEnterFullScreen")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidEnterFullScreen, func() {
|
|
println(myWindow.ID(), "WindowDidEnterFullScreen")
|
|
})
|
|
myWindow.On(events.Mac.WindowWillExitFullScreen, func() {
|
|
println(myWindow.ID(), "WindowWillExitFullScreen")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidExitFullScreen, func() {
|
|
println(myWindow.ID(), "WindowDidExitFullScreen")
|
|
})
|
|
myWindow.On(events.Mac.WindowWillEnterVersionBrowser, func() {
|
|
println(myWindow.ID(), "WindowWillEnterVersionBrowser")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidEnterVersionBrowser, func() {
|
|
println(myWindow.ID(), "WindowDidEnterVersionBrowser")
|
|
})
|
|
myWindow.On(events.Mac.WindowWillExitVersionBrowser, func() {
|
|
println(myWindow.ID(), "WindowWillExitVersionBrowser")
|
|
})
|
|
myWindow.On(events.Mac.WindowDidExitVersionBrowser, func() {
|
|
println(myWindow.ID(), "WindowDidExitVersionBrowser")
|
|
})
|
|
*/
|
|
var myWindow2 *application.WebviewWindow
|
|
var myWindow2Lock sync.RWMutex
|
|
myWindow2 = app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
|
|
Title: "#2",
|
|
Width: 1024,
|
|
Height: 768,
|
|
AlwaysOnTop: false,
|
|
URL: "https://google.com",
|
|
Mac: application.MacWindow{
|
|
Backdrop: application.MacBackdropTranslucent,
|
|
},
|
|
})
|
|
//myWindow2.On(events.Mac.WindowDidMove, func() {
|
|
// myWindow2Lock.RLock()
|
|
// x, y := myWindow2.Position()
|
|
// println(myWindow2.ID(), "WindowDidMove: ", x, y)
|
|
// myWindow2Lock.RUnlock()
|
|
//})
|
|
//
|
|
|
|
go func() {
|
|
time.Sleep(5 * time.Second)
|
|
myWindow2Lock.RLock()
|
|
myWindow.SetTitle("Wooooo")
|
|
myWindow.SetAlwaysOnTop(true)
|
|
myWindow2.SetTitle("OMG")
|
|
myWindow2.SetURL("https://wails.io")
|
|
myWindow.SetMinSize(600, 600)
|
|
myWindow.SetMaxSize(650, 650)
|
|
myWindow.Center()
|
|
myWindow2Lock.RUnlock()
|
|
|
|
}()
|
|
|
|
err := app.Run()
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|