5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 11:10:47 +08:00
wails/v3/examples/kitchensink/main.go
Lea Anthony f951b51c11
Context menu WIP
options refactor
2023-02-09 18:35:26 +11:00

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