mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
Refactor application API to use options by default. Updated examples.
This commit is contained in:
parent
ad802a3ad0
commit
cf5def05a6
13 changed files with 102 additions and 100 deletions
|
|
@ -5,14 +5,20 @@ import (
|
|||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/wailsapp/wails/exp/pkg/options"
|
||||
|
||||
"github.com/wailsapp/wails/exp/pkg/application"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
app := application.New()
|
||||
app.SetName("Clipboard Demo")
|
||||
app.SetDescription("A demo of the clipboard")
|
||||
app := application.New(options.Application{
|
||||
Name: "Clipboard Demo",
|
||||
Description: "A demo of the clipboard API",
|
||||
Mac: options.Mac{
|
||||
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
||||
},
|
||||
})
|
||||
|
||||
// Create a custom menu
|
||||
menu := app.NewMenu()
|
||||
|
|
|
|||
|
|
@ -7,15 +7,20 @@ import (
|
|||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/wailsapp/wails/exp/pkg/options"
|
||||
|
||||
"github.com/wailsapp/wails/exp/pkg/application"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
app := application.New()
|
||||
app.SetName("Dialogs Demo")
|
||||
app.SetDescription("A demo of the Wails dialogs")
|
||||
|
||||
app := application.New(options.Application{
|
||||
Name: "Dialogs Demo",
|
||||
Description: "A demo of the dialogs API",
|
||||
Mac: options.Mac{
|
||||
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
||||
},
|
||||
})
|
||||
// Create a custom menu
|
||||
menu := app.NewMenu()
|
||||
menu.AddRole(application.AppMenu)
|
||||
|
|
|
|||
|
|
@ -12,9 +12,11 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
app := application.NewWithOptions(&options.Application{
|
||||
Mac: &options.Mac{
|
||||
//ActivationPolicy: options.ActivationPolicyAccessory,
|
||||
app := application.New(options.Application{
|
||||
Name: "Menu Demo",
|
||||
Description: "A demo of the menu system",
|
||||
Mac: options.Mac{
|
||||
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
||||
},
|
||||
})
|
||||
/*
|
||||
|
|
@ -121,7 +123,7 @@ func main() {
|
|||
Alpha: 30,
|
||||
},
|
||||
StartState: options.WindowStateMaximised,
|
||||
Mac: &options.MacWindow{
|
||||
Mac: options.MacWindow{
|
||||
Backdrop: options.MacBackdropTranslucent,
|
||||
Appearance: options.NSAppearanceNameDarkAqua,
|
||||
},
|
||||
|
|
@ -189,7 +191,7 @@ func main() {
|
|||
Height: 768,
|
||||
AlwaysOnTop: false,
|
||||
URL: "https://google.com",
|
||||
Mac: &options.MacWindow{
|
||||
Mac: options.MacWindow{
|
||||
Backdrop: options.MacBackdropTranslucent,
|
||||
},
|
||||
})
|
||||
|
|
@ -206,7 +208,7 @@ func main() {
|
|||
myWindow2Lock.RLock()
|
||||
myWindow.SetTitle("Wooooo")
|
||||
myWindow.SetAlwaysOnTop(true)
|
||||
myWindow2.SetTitle("OMFG")
|
||||
myWindow2.SetTitle("OMG")
|
||||
myWindow2.SetURL("https://wails.io")
|
||||
myWindow.SetMinSize(600, 600)
|
||||
myWindow.SetMaxSize(650, 650)
|
||||
|
|
|
|||
|
|
@ -4,14 +4,20 @@ import (
|
|||
_ "embed"
|
||||
"log"
|
||||
|
||||
"github.com/wailsapp/wails/exp/pkg/options"
|
||||
|
||||
"github.com/wailsapp/wails/exp/pkg/application"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
app := application.New()
|
||||
app.SetName("Menu Demo")
|
||||
app.SetDescription("A demo of the menu system")
|
||||
app := application.New(options.Application{
|
||||
Name: "Menu Demo",
|
||||
Description: "A demo of the menu system",
|
||||
Mac: options.Mac{
|
||||
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
||||
},
|
||||
})
|
||||
|
||||
// Create a custom menu
|
||||
menu := app.NewMenu()
|
||||
|
|
|
|||
|
|
@ -10,15 +10,19 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
app := application.New()
|
||||
|
||||
app := application.New(options.Application{
|
||||
Name: "Plain",
|
||||
Description: "A demo of using raw HTML & CSS",
|
||||
Mac: options.Mac{
|
||||
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
||||
},
|
||||
})
|
||||
// Create window
|
||||
app.NewWindowWithOptions(&options.Window{
|
||||
Title: "Plain Bundle",
|
||||
EnableDevTools: true,
|
||||
HTML: `<html><head><title>Plain Bundle</title></head><body><div class="main"><h1>Plain Bundle</h1><p>This is a plain bundle. It has no frontend code.</p></div></body></html>`,
|
||||
CSS: `body { background-color: rgba(255, 255, 255, 0); } .main { color: white; margin: 20%; }`,
|
||||
Mac: &options.MacWindow{
|
||||
Title: "Plain Bundle",
|
||||
HTML: `<html><head><title>Plain Bundle</title></head><body><div class="main"><h1>Plain Bundle</h1><p>This is a plain bundle. It has no frontend code.</p></div></body></html>`,
|
||||
CSS: `body { background-color: rgba(255, 255, 255, 0); } .main { color: white; margin: 20%; }`,
|
||||
Mac: options.MacWindow{
|
||||
InvisibleTitleBarHeight: 50,
|
||||
Backdrop: options.MacBackdropTranslucent,
|
||||
TitleBar: options.TitleBarHiddenInset,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
_ "embed"
|
||||
"log"
|
||||
"runtime"
|
||||
|
||||
"github.com/wailsapp/wails/exp/pkg/options"
|
||||
|
||||
|
|
@ -10,17 +11,27 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
app := application.New()
|
||||
app.SetActivationPolicy(options.ActivationPolicyAccessory)
|
||||
app := application.New(options.Application{
|
||||
Name: "Systray Demo",
|
||||
Description: "A demo of the Systray API",
|
||||
Mac: options.Mac{
|
||||
ActivationPolicy: options.ActivationPolicyAccessory,
|
||||
},
|
||||
})
|
||||
|
||||
systemTray := app.NewSystemTray().SetIcon(application.DefaultMacTemplateIcon)
|
||||
systemTray := app.NewSystemTray()
|
||||
if runtime.GOOS == "darwin" {
|
||||
systemTray.SetIcon(application.DefaultMacTemplateIcon)
|
||||
}
|
||||
|
||||
myMenu := app.NewMenu()
|
||||
myMenu.Add("Hello World!").OnClick(func(ctx *application.Context) {
|
||||
ctx.ClickedMenuItem().SetLabel("Clicked!")
|
||||
app.NewInfoDialog().SetTitle("Hello World!").SetMessage("Hello World!").Show()
|
||||
})
|
||||
subMenu := myMenu.AddSubmenu("Submenu")
|
||||
subMenu.Add("Submenu Item")
|
||||
subMenu.Add("Click me!").OnClick(func(ctx *application.Context) {
|
||||
ctx.ClickedMenuItem().SetLabel("Clicked!")
|
||||
})
|
||||
myMenu.AddSeparator()
|
||||
myMenu.Add("Quit").OnClick(func(ctx *application.Context) {
|
||||
app.Quit()
|
||||
|
|
|
|||
|
|
@ -17,10 +17,13 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
app := application.New()
|
||||
app.SetName("Window Demo")
|
||||
app.ApplicationShouldTerminateAfterLastWindowClosed()
|
||||
app.SetDescription("A demo of the windowing capabilities")
|
||||
app := application.New(options.Application{
|
||||
Name: "Window Demo",
|
||||
Description: "A demo of the Window API",
|
||||
Mac: options.Mac{
|
||||
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
||||
},
|
||||
})
|
||||
app.On(events.Mac.ApplicationDidFinishLaunching, func() {
|
||||
log.Println("ApplicationDidFinishLaunching")
|
||||
})
|
||||
|
|
|
|||
|
|
@ -16,28 +16,35 @@ func init() {
|
|||
runtime.LockOSThread()
|
||||
}
|
||||
|
||||
func New() *App {
|
||||
func New(appOptions options.Application) *App {
|
||||
if globalApplication != nil {
|
||||
return globalApplication
|
||||
}
|
||||
return NewWithOptions(options.ApplicationDefaults)
|
||||
}
|
||||
|
||||
func NewWithOptions(appOptions options.Application) *App {
|
||||
if globalApplication != nil {
|
||||
return globalApplication
|
||||
}
|
||||
appOptions = options.ApplicationDefaults
|
||||
mergeApplicationDefaults(&appOptions)
|
||||
|
||||
result := &App{
|
||||
options: appOptions,
|
||||
applicationEventListeners: make(map[uint][]func()),
|
||||
systemTrays: make(map[uint]*SystemTray),
|
||||
icon: DefaultApplicationIcon,
|
||||
}
|
||||
globalApplication = result
|
||||
return result
|
||||
}
|
||||
|
||||
func mergeApplicationDefaults(o *options.Application) {
|
||||
if o.Name == "" {
|
||||
o.Name = "My Wails Application"
|
||||
}
|
||||
if o.Description == "" {
|
||||
o.Description = "An application written using Wails"
|
||||
}
|
||||
if o.Icon == nil {
|
||||
o.Icon = DefaultApplicationIcon
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
type platformApp interface {
|
||||
run() error
|
||||
destroy()
|
||||
|
|
@ -89,10 +96,7 @@ type App struct {
|
|||
ApplicationMenu *Menu
|
||||
|
||||
// About MessageDialog
|
||||
name string
|
||||
description string
|
||||
icon []byte
|
||||
clipboard *Clipboard
|
||||
clipboard *Clipboard
|
||||
}
|
||||
|
||||
func (a *App) getSystemTrayID() uint {
|
||||
|
|
@ -202,9 +206,7 @@ func (a *App) Run() error {
|
|||
a.impl.setApplicationMenu(a.ApplicationMenu)
|
||||
|
||||
// set the application icon
|
||||
if a.icon != nil {
|
||||
a.impl.setIcon(a.icon)
|
||||
}
|
||||
a.impl.setIcon(a.options.Icon)
|
||||
|
||||
return a.impl.run()
|
||||
}
|
||||
|
|
@ -288,47 +290,15 @@ func (a *App) Quit() {
|
|||
a.impl.destroy()
|
||||
}
|
||||
|
||||
func (a *App) SetActivationPolicy(accessory options.ActivationPolicy) {
|
||||
a.options.Mac.ActivationPolicy = accessory
|
||||
}
|
||||
|
||||
func (a *App) SetMenu(menu *Menu) {
|
||||
a.ApplicationMenu = menu
|
||||
if a.impl != nil {
|
||||
a.impl.setApplicationMenu(menu)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) SetName(name string) {
|
||||
a.name = name
|
||||
}
|
||||
|
||||
func (a *App) Name() string {
|
||||
return a.name
|
||||
}
|
||||
|
||||
func (a *App) SetIcon(icon []byte) {
|
||||
a.icon = icon
|
||||
if a.impl != nil {
|
||||
a.impl.setIcon(icon)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) Icon() []byte {
|
||||
return a.icon
|
||||
}
|
||||
|
||||
func (a *App) SetDescription(description string) {
|
||||
a.description = description
|
||||
}
|
||||
|
||||
func (a *App) Description() string {
|
||||
return a.description
|
||||
}
|
||||
|
||||
func (a *App) ShowAboutDialog() {
|
||||
if a.impl != nil {
|
||||
a.impl.showAboutDialog(a.name, a.description, a.icon)
|
||||
a.impl.showAboutDialog(a.options.Name, a.options.Description, a.options.Icon)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -383,8 +353,3 @@ func (a *App) dispatchOnMainThread(fn func()) {
|
|||
// Call platform specific dispatch function
|
||||
a.impl.dispatchOnMainThread(id)
|
||||
}
|
||||
|
||||
func (a *App) ApplicationShouldTerminateAfterLastWindowClosed() {
|
||||
a.options.Mac.ApplicationShouldTerminateAfterLastWindowClosed = true
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -339,8 +339,8 @@ func (m *macosDialog) show() {
|
|||
} else {
|
||||
// if it's an error, use the application icon
|
||||
if m.dialog.dialogType == ErrorDialog {
|
||||
iconData = unsafe.Pointer(&globalApplication.icon[0])
|
||||
iconLength = C.int(len(globalApplication.icon))
|
||||
iconData = unsafe.Pointer(&globalApplication.options.Icon[0])
|
||||
iconLength = C.int(len(globalApplication.options.Icon))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@ func newSpeechMenu() *MenuItem {
|
|||
}
|
||||
|
||||
func newHideMenuItem() *MenuItem {
|
||||
return newMenuItem("Hide " + globalApplication.Name()).
|
||||
return newMenuItem("Hide " + globalApplication.options.Name).
|
||||
SetAccelerator("CmdOrCtrl+h").
|
||||
OnClick(func(ctx *Context) {
|
||||
C.hideApplication()
|
||||
|
|
@ -482,7 +482,7 @@ func newDeleteMenuItem() *MenuItem {
|
|||
}
|
||||
|
||||
func newQuitMenuItem() *MenuItem {
|
||||
return newMenuItem("Quit " + globalApplication.Name()).
|
||||
return newMenuItem("Quit " + globalApplication.options.Name).
|
||||
SetAccelerator("CmdOrCtrl+q").
|
||||
OnClick(func(ctx *Context) {
|
||||
globalApplication.Quit()
|
||||
|
|
@ -498,7 +498,7 @@ func newSelectAllMenuItem() *MenuItem {
|
|||
}
|
||||
|
||||
func newAboutMenuItem() *MenuItem {
|
||||
return newMenuItem("About " + globalApplication.Name()).
|
||||
return newMenuItem("About " + globalApplication.options.Name).
|
||||
OnClick(func(ctx *Context) {
|
||||
globalApplication.ShowAboutDialog()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ func newAppMenu() *MenuItem {
|
|||
appMenu.AddRole(UnHide)
|
||||
appMenu.AddSeparator()
|
||||
appMenu.AddRole(Quit)
|
||||
subMenu := newSubMenuItem(globalApplication.Name())
|
||||
subMenu := newSubMenuItem(globalApplication.options.Name)
|
||||
subMenu.submenu = appMenu
|
||||
return subMenu
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
package options
|
||||
|
||||
type Application struct {
|
||||
Mac Mac
|
||||
}
|
||||
|
||||
var ApplicationDefaults = Application{
|
||||
Mac: Mac{
|
||||
ActivationPolicy: ActivationPolicyRegular,
|
||||
},
|
||||
Name string
|
||||
Description string
|
||||
Icon []byte
|
||||
Mac Mac
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ type ActivationPolicy int
|
|||
|
||||
const (
|
||||
ActivationPolicyRegular ActivationPolicy = iota
|
||||
// ActivationPolicyAccessory is used for applications that do not have a main window,
|
||||
// such as system tray applications or background applications.
|
||||
ActivationPolicyAccessory
|
||||
ActivationPolicyProhibited
|
||||
)
|
||||
|
|
@ -11,7 +13,8 @@ const (
|
|||
type Mac struct {
|
||||
// ActivationPolicy is the activation policy for the application. Defaults to
|
||||
// applicationActivationPolicyRegular.
|
||||
ActivationPolicy ActivationPolicy
|
||||
ActivationPolicy ActivationPolicy
|
||||
// If set to true, the application will terminate when the last window is closed.
|
||||
ApplicationShouldTerminateAfterLastWindowClosed bool
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue