5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-05 01:50:56 +08:00
wails/v3/plugins/experimental/server/window.go
Fabio Massaioli 2b9891da2c
[v3] Update and fix runtime JS API (#3295)
* Cleanup bundled runtime entry point

* Fix JS representation of Screen struct

* Expose IsFocused method in Window interface

* Update JS window API

* Fix cleanup of WML listeners

* Bundle runtime as ES module

* Update runtime dependencies

* Update runtime types and events

* Update bundled runtime

* Update changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-03-20 20:30:14 +11:00

281 lines
5.2 KiB
Go

//go:build ignore
package server
import (
"encoding/json"
"fmt"
"log"
"strings"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/events"
)
type Window struct {
id uint
server *Server
}
// formatJS ensures the 'data' provided marshals to valid json or panics
func (w Window) formatJS(f string, callID string, data string) string {
j, err := json.Marshal(data)
if err != nil {
panic(err)
}
return fmt.Sprintf(f, callID, j)
}
func (w Window) AbsolutePosition() (x, y int) {
return 0, 0
}
func (w Window) CallError(callID string, result string) {
w.ExecJS(callID, w.formatJS("_wails.callErrorCallback('%s', %s);", callID, result))
}
func (w Window) CallResponse(callID string, result string) {
ids := strings.Split(callID, "|")
j, err := json.Marshal(callback{
ID: ids[1],
Result: result,
})
if err != nil {
fmt.Println("Failed to build CallResponse data", result)
}
w.server.sendToClient(ids[0], message{Type: "cb", Data: string(j)})
}
func (w Window) DialogError(dialogID string, result string) {
w.ExecJS(dialogID, w.formatJS("_wails.dialogErrorCallback('%s', %s);", dialogID, result))
}
func (w Window) DialogResponse(dialogID string, result string, isJSON bool) {
cmd := "_wails.dialogResultCallback('%s', %s, true);"
if !isJSON {
cmd = "_wails.dialogResultCallback('%s', %s, false);"
}
w.ExecJS(dialogID, w.formatJS(cmd, dialogID, result))
}
func (w Window) ID() uint {
return w.id
}
func (w Window) Center() {
}
func (w Window) Close() {}
func (w Window) Destroy() {}
func (w Window) ExecJS(callID, js string) {
w.server.sendToClient(callID, message{
Type: "javascript",
Data: js,
})
}
func (w Window) Focus() {}
func (w Window) ForceReload() {}
func (w Window) Fullscreen() application.Window {
return w
}
func (w Window) GetScreen() (*application.Screen, error) {
return nil, fmt.Errorf("can't return screen for external window")
}
func (w Window) GetZoom() float64 {
return 1.0
}
func (w Window) Height() int {
return 0
}
func (w Window) Hide() application.Window {
return w
}
func (w Window) IsFocused() bool {
return false
}
func (w Window) IsFullscreen() bool {
return false
}
func (w Window) IsMaximised() bool {
return false
}
func (w Window) IsMinimised() bool {
return false
}
func (w Window) Maximise() application.Window {
return w
}
func (w Window) Minimise() application.Window {
return w
}
func (w Window) Minimize() {}
func (w Window) Name() string {
return "external window"
}
func (w Window) On(eventType events.WindowEventType, callback func(ctx *application.WindowEvent)) func() {
return func() {
fmt.Printf("server.Window.On(%v)\n", eventType)
}
}
func (w Window) Position() (int, int) {
return 0, 0
}
func (w Window) RegisterContextMenu(name string, menu *application.Menu) {}
func (w Window) RelativePosition() (x, y int) {
return 0, 0
}
func (w Window) Reload() {}
func (w Window) Resizable() bool {
return true
}
func (w Window) Restore() {}
func (w Window) SetAbsolutePosition(x, y int) {}
func (w Window) SetAlwaysOnTop(b bool) application.Window {
return w
}
func (w Window) SetBackgroundColour(colour application.RGBA) application.Window {
return w
}
func (w Window) SetFrameless(frameless bool) application.Window {
return w
}
func (w Window) SetFullscreenButtonEnabled(enabled bool) application.Window {
return w
}
func (w Window) SetHTML(html string) application.Window {
return w
}
func (w Window) SetMaxSize(maxWidth, maxHeight int) application.Window {
return w
}
func (w Window) SetMinSize(minWidth, minHeight int) application.Window {
return w
}
func (w Window) SetRelativePosition(x, y int) application.Window {
return w
}
func (w Window) SetResizable(b bool) application.Window {
return w
}
func (w Window) SetSize(width, height int) application.Window {
return w
}
func (w Window) SetTitle(title string) application.Window {
return w
}
func (w Window) SetURL(s string) application.Window {
return w
}
func (w Window) SetZoom(magnification float64) application.Window {
return w
}
func (w Window) Show() application.Window {
return w
}
func (w Window) Size() (width int, height int) {
return 0, 0
}
func (w Window) ToggleDevTools() {
}
func (w Window) ToggleFullscreen() {}
func (w Window) ToggleMaximise() {}
func (w Window) UnFullscreen() {}
func (w Window) UnMaximise() {}
func (w Window) UnMinimise() {}
func (w Window) Width() int {
return 0
}
func (w Window) Zoom() {}
func (w Window) ZoomIn() {}
func (w Window) ZoomOut() {}
func (w Window) ZoomReset() application.Window {
return w
}
func (w Window) DisableSizeConstraints() {}
func (w Window) DispatchWailsEvent(event *application.WailsEvent) {
w.server.sendToAllClients(
message{
Type: "wailsevent",
Data: event.ToJSON(),
})
}
func (w Window) EnableSizeConstraints() {}
func (w Window) Error(message string, args ...any) {}
func (w Window) HandleDragAndDropMessage(filenames []string) {
}
func (w Window) HandleKeyEvent(acceleratorString string) {
}
func (w Window) HandleMessage(message string) {
log.Println("HandleMessage", message)
}
func (w Window) HandleWindowEvent(id uint) {}
func (w Window) Info(message string, args ...any) {}
func (w Window) OpenContextMenu(data *application.ContextMenuData) {}
func (w Window) Run() {}