peachy-go/desktop/main.go
2024-11-05 15:41:46 -07:00

90 lines
2.4 KiB
Go

package main
import (
"embed"
"log"
"net/http"
"git.codemonkeysoftware.net/b/peachy-go/desktop/routes"
"github.com/wailsapp/wails/v3/pkg/application"
)
//go:embed all:static
var assets embed.FS
func main() {
r := routes.NewChiRouter()
// Create the application
app := application.New(application.Options{
Name: "Peachy",
Description: "A demo of using raw HTML & CSS", // Description of the application
Assets: application.AssetOptions{ // Assets to embed (our static files)
Handler: application.AssetFileServerFS(assets),
Middleware: func(next http.Handler) http.Handler {
r.NotFound(next.ServeHTTP)
return r
},
},
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
// V3 introduces multiple windows, so we need to create a window
app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Title: "Your Project",
Mac: application.MacWindow{
Backdrop: application.MacBackdropTranslucent,
},
URL: "/", // URL to load when the window is created
Width: 1080, // Width of the window
Height: 720, // Height of the window
Centered: false,
})
menu := app.NewMenu()
fileMenu := menu.AddSubmenu("File")
fileMenu.AddRole(application.NewFile)
fileMenu.AddRole(application.Open)
fileMenu.Append(application.NewFileMenu().GetSubmenu())
menu.FindByRole(application.NewFile).OnClick(func(ctx *application.Context) {
d := application.SaveFileDialog()
d.SetOptions(&application.SaveFileDialogOptions{
Filters: []application.FileFilter{
{DisplayName: "Peachy database", Pattern: "*.pit"},
{DisplayName: "All Files", Pattern: "*.*"},
},
AllowOtherFileTypes: true,
Title: "Create new database",
})
path, err := d.PromptForSingleSelection()
if err != nil {
application.InfoDialog().SetMessage("Error: " + err.Error()).Show()
}
if path != "" {
application.InfoDialog().SetMessage(path).Show()
} else {
application.InfoDialog().SetMessage("No file selected").Show()
}
})
menu.FindByRole(application.Open).OnClick(func(ctx *application.Context) {
path, _ := application.OpenFileDialog().
CanChooseFiles(true).
PromptForSingleSelection()
if path != "" {
application.InfoDialog().SetMessage(path).Show()
} else {
application.InfoDialog().SetMessage("No file selected").Show()
}
})
app.SetMenu(menu)
err := app.Run()
if err != nil {
log.Fatal(err)
}
}