Files
qhmes/XSLPrintDot/main.go

231 lines
5.2 KiB
Go
Raw Permalink Normal View History

package main
import (
"context"
"embed"
sys_runtime "runtime"
"os"
"strconv"
"github.com/wailsapp/wails/v2"
"github.com/wailsapp/wails/v2/pkg/menu"
"github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
"github.com/wailsapp/wails/v2/pkg/options/mac"
"github.com/wailsapp/wails/v2/pkg/options/windows"
"github.com/wailsapp/wails/v2/pkg/runtime"
"github.com/energye/systray"
)
//go:embed all:frontend/dist
var assets embed.FS
//go:embed build/appicon.png
var icon []byte
//go:embed build/windows/icon.ico
var iconIco []byte
func main() {
// Check command line args
mode := "main"
logPort := 0
if len(os.Args) > 1 {
switch os.Args[1] {
case "logs":
mode = "logs"
if len(os.Args) > 2 {
if p, err := strconv.Atoi(os.Args[2]); err == nil {
logPort = p
}
}
case "help":
mode = "help"
case "settings":
mode = "settings"
if len(os.Args) > 2 {
if p, err := strconv.Atoi(os.Args[2]); err == nil {
logPort = p
}
}
}
}
// Create an instance of the app structure
app := NewApp(mode, logPort)
// Load settings to determine menu language
sm := NewSettingsManager()
currentLang := sm.Get().Language
LoadLocales(currentLang)
// Configure based on mode
title := T("window.main")
width := 380
height := 660
minWidth := 380
minHeight := 600
var onBeforeClose func(ctx context.Context) bool
var appMenu *menu.Menu
if mode == "main" {
appMenu = app.CreateMenu(currentLang)
onBeforeClose = func(ctx context.Context) bool {
if app.isQuitting {
app.Cleanup()
return false
}
runtime.WindowHide(ctx)
return true
}
// Start system tray
go func() {
sys_runtime.LockOSThread()
systray.Run(func() {
if sys_runtime.GOOS == "windows" {
systray.SetIcon(iconIco)
} else {
systray.SetIcon(icon)
}
systray.SetTitle(T("tray.title"))
systray.SetTooltip(T("tray.tooltip"))
systray.SetOnClick(func(menu systray.IMenu) {
go func() {
if app.ctx != nil {
runtime.WindowShow(app.ctx)
}
}()
})
systray.SetOnRClick(func(menu systray.IMenu) {
menu.ShowMenu()
})
mShow := systray.AddMenuItem(T("tray.show"), T("tray.show"))
mHelp := systray.AddMenuItem(T("menu.help"), T("menu.help"))
mSettings := systray.AddMenuItem(T("menu.settings"), T("menu.settings"))
systray.AddSeparator()
mQuit := systray.AddMenuItem(T("tray.quit"), T("tray.quit"))
mShow.Click(func() {
go func() {
if app.ctx != nil {
runtime.WindowShow(app.ctx)
}
}()
})
mHelp.Click(func() {
go app.ShowHelp()
})
mSettings.Click(func() {
go app.ShowSettings()
})
mQuit.Click(func() {
go app.Quit()
})
}, func() {
// Cleanup if needed
})
}()
} else if mode == "logs" {
// Logs Window Configuration
title = T("window.logs")
width = 700
height = 500
// No special menu or close behavior for logs window (it just closes)
} else if mode == "help" {
title = T("window.help")
width = 800
height = 600
minWidth = 600
minHeight = 400
} else if mode == "settings" {
title = T("window.settings")
}
// Create application with options
appOptions := &options.App{
Title: title,
Width: width,
Height: height,
MinWidth: minWidth,
MinHeight: minHeight,
AssetServer: &assetserver.Options{
Assets: assets,
},
BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 1},
OnStartup: func(ctx context.Context) {
app.startup(ctx)
// Restore position if valid
if mode == "main" {
s := sm.Get()
if s.WindowX != 0 || s.WindowY != 0 {
runtime.WindowSetPosition(ctx, s.WindowX, s.WindowY)
}
if s.Maximized {
runtime.WindowMaximise(ctx)
}
}
},
OnBeforeClose: onBeforeClose,
Menu: appMenu,
Bind: []interface{}{
app,
},
Windows: &windows.Options{
WebviewIsTransparent: false,
WindowIsTranslucent: false,
BackdropType: windows.Mica,
},
Mac: &mac.Options{
TitleBar: mac.TitleBarHiddenInset(),
},
}
if mode == "main" {
appOptions.SingleInstanceLock = &options.SingleInstanceLock{
UniqueId: "56006c0a-0498-4228-a320-c2409044a14e",
OnSecondInstanceLaunch: func(secondInstanceData options.SecondInstanceData) {
runtime.WindowShow(app.ctx)
},
}
} else if mode == "logs" {
appOptions.SingleInstanceLock = &options.SingleInstanceLock{
UniqueId: "56006c0a-0498-4228-a320-c2409044a14e-logs",
OnSecondInstanceLaunch: func(secondInstanceData options.SecondInstanceData) {
runtime.WindowShow(app.ctx)
},
}
} else if mode == "help" {
appOptions.SingleInstanceLock = &options.SingleInstanceLock{
UniqueId: "56006c0a-0498-4228-a320-c2409044a14e-help",
OnSecondInstanceLaunch: func(secondInstanceData options.SecondInstanceData) {
runtime.WindowShow(app.ctx)
},
}
} else if mode == "settings" {
appOptions.SingleInstanceLock = &options.SingleInstanceLock{
UniqueId: "56006c0a-0498-4228-a320-c2409044a14e-settings",
OnSecondInstanceLaunch: func(secondInstanceData options.SecondInstanceData) {
runtime.WindowShow(app.ctx)
},
}
}
err := wails.Run(appOptions)
if mode == "main" {
systray.Quit()
}
if err != nil {
println("Error:", err.Error())
}
}