5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 19:01:02 +08:00
wails/v2/internal/appng/app.go
2021-07-22 19:49:54 +10:00

122 lines
2.8 KiB
Go

package appng
import (
"context"
"github.com/wailsapp/wails/v2/internal/binding"
"github.com/wailsapp/wails/v2/internal/frontend"
"github.com/wailsapp/wails/v2/internal/logger"
"github.com/wailsapp/wails/v2/internal/menumanager"
"github.com/wailsapp/wails/v2/internal/signal"
"github.com/wailsapp/wails/v2/pkg/options"
"time"
)
// App defines a Wails application structure
type App struct {
frontend frontend.Frontend
logger *logger.Logger
signal *signal.Manager
options *options.App
menuManager *menumanager.Manager
// Indicates if the app is in debug mode
debug bool
// This is our binding DB
bindings *binding.Bindings
// Startup/Shutdown
startupCallback func(ctx context.Context)
shutdownCallback func()
}
func (a *App) Run() error {
go func() {
time.Sleep(1 * time.Second)
println("fullscreen")
a.frontend.WindowFullscreen()
time.Sleep(1 * time.Second)
println("unfullscreen")
a.frontend.WindowUnFullscreen()
time.Sleep(1 * time.Second)
println("hide")
a.frontend.WindowHide()
time.Sleep(1 * time.Second)
println("show")
a.frontend.WindowShow()
time.Sleep(1 * time.Second)
}()
return a.frontend.Run()
}
// CreateApp
func CreateApp(appoptions *options.App) (*App, error) {
// Merge default options
options.MergeDefaults(appoptions)
// Set up logger
myLogger := logger.New(appoptions.Logger)
myLogger.SetLogLevel(appoptions.LogLevel)
// Create the menu manager
menuManager := menumanager.NewManager()
// Process the application menu
appMenu := options.GetApplicationMenu(appoptions)
err := menuManager.SetApplicationMenu(appMenu)
if err != nil {
return nil, err
}
// Process context menus
contextMenus := options.GetContextMenus(appoptions)
for _, contextMenu := range contextMenus {
menuManager.AddContextMenu(contextMenu)
}
// Process tray menus
trayMenus := options.GetTrayMenus(appoptions)
for _, trayMenu := range trayMenus {
_, err := menuManager.AddTrayMenu(trayMenu)
if err != nil {
return nil, err
}
}
//window := ffenestri.NewApplicationWithConfig(appoptions, myLogger, menuManager)
appFrontend := frontend.NewFrontend(appoptions, myLogger)
// Create binding exemptions - Ugly hack. There must be a better way
bindingExemptions := []interface{}{appoptions.Startup, appoptions.Shutdown}
result := &App{
frontend: appFrontend,
logger: myLogger,
bindings: binding.NewBindings(myLogger, appoptions.Bind, bindingExemptions),
menuManager: menuManager,
startupCallback: appoptions.Startup,
shutdownCallback: appoptions.Shutdown,
}
result.options = appoptions
//// Initialise the app
//err := result.Init()
//if err != nil {
// return nil, err
//}
//
//// Preflight Checks
//err = result.PreflightChecks(appoptions)
//if err != nil {
// return nil, err
//}
return result, nil
}