Context menu WIP

options refactor
This commit is contained in:
Lea Anthony
2023-02-09 18:35:26 +11:00
parent cd1e3f5bb0
commit f951b51c11
59 changed files with 1205 additions and 643 deletions
+1 -2
View File
@@ -7,13 +7,12 @@ import (
"github.com/wailsapp/wails/v3/examples/binding/services"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/options"
)
type localStruct struct{}
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Bind: []interface{}{
&localStruct{},
&services.GreetService{},
+17 -19
View File
@@ -9,18 +9,16 @@ import (
"strconv"
"time"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/events"
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "WebviewWindow Demo",
Description: "A demo of the WebviewWindow API",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
@@ -67,45 +65,45 @@ func main() {
windowCounter++
})
if runtime.GOOS == "darwin" {
myMenu.Add("New WebviewWindow (TitleBarHiddenInset)").
myMenu.Add("New WebviewWindow (MacTitleBarHiddenInset)").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
Mac: options.MacWindow{
TitleBar: options.TitleBarHiddenInset,
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Mac: application.MacWindow{
TitleBar: application.MacTitleBarHiddenInset,
InvisibleTitleBarHeight: 25,
},
}).
SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetHTML("<br/><br/><p>A TitleBarHiddenInset WebviewWindow example</p>").
SetHTML("<br/><br/><p>A MacTitleBarHiddenInset WebviewWindow example</p>").
Show()
windowCounter++
})
myMenu.Add("New WebviewWindow (TitleBarHiddenInsetUnified)").
myMenu.Add("New WebviewWindow (MacTitleBarHiddenInsetUnified)").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
Mac: options.MacWindow{
TitleBar: options.TitleBarHiddenInsetUnified,
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Mac: application.MacWindow{
TitleBar: application.MacTitleBarHiddenInsetUnified,
InvisibleTitleBarHeight: 50,
},
}).
SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetHTML("<br/><br/><p>A TitleBarHiddenInsetUnified WebviewWindow example</p>").
SetHTML("<br/><br/><p>A MacTitleBarHiddenInsetUnified WebviewWindow example</p>").
Show()
windowCounter++
})
myMenu.Add("New WebviewWindow (TitleBarHidden)").
myMenu.Add("New WebviewWindow (MacTitleBarHidden)").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
Mac: options.MacWindow{
TitleBar: options.TitleBarHidden,
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Mac: application.MacWindow{
TitleBar: application.MacTitleBarHidden,
InvisibleTitleBarHeight: 25,
},
}).
SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetHTML("<br/><br/><p>A TitleBarHidden WebviewWindow example</p>").
SetHTML("<br/><br/><p>A MacTitleBarHidden WebviewWindow example</p>").
Show()
windowCounter++
})
+2 -4
View File
@@ -5,17 +5,15 @@ import (
"log"
"time"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "Clipboard Demo",
Description: "A demo of the clipboard API",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
+2 -4
View File
@@ -7,17 +7,15 @@ import (
"runtime"
"strings"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "Dialogs Demo",
Description: "A demo of the dialogs API",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
+19 -1
View File
@@ -4,18 +4,36 @@
<meta charset="UTF-8">
<title>Title</title>
<style>body{ text-align: center; color: white; background-color: rgba(0,0,0,0); user-select: none; -ms-user-select: none; -webkit-user-select: none; }</style>
<style>.file{ width: 100px; height: 100px; border: 3px solid black; }</style>
</head>
<body>
<h1>Events Demo</h1>
<br/>
<div class="file" id="123abc" data-contextmenu-id="f" data-contextmenu-data="someid" draggable="true" ondragstart="dragstart()" ondragend="dragend()"></div>
<div class="file" id="234abc" draggable="true" ondragstart="dragstart()" ondragend="dragend()"></div>
<div class="file" id="345abc" draggable="true" ondragstart="dragstart()" ondragend="dragend()"></div>
<div id="results"></div>
</body>
<script>
wails.Events.On("myevent", function(data) {
let currentHTML = document.getElementById("results").innerHTML;
document.getElementById("results").innerHTML = currentHTML + "<br/>" + JSON.stringify(data);;
document.getElementById("results").innerHTML = currentHTML + "<br/>" + JSON.stringify(data);
})
window.addEventListener("dragstart", (event) =>
event.dataTransfer.setData("text/plain", "This text may be dragged")
);
window.addEventListener("contextmenu", (event) => {
console.log({event})
let element = event.target;
let contextMenuId = element.getAttribute("data-contextmenu-id");
if (contextMenuId) {
let contextMenuData = element.getAttribute("data-contextmenu-data");
console.log({contextMenuId, contextMenuData, x: event.clientX, y: event.clientY});
_wails.openContextMenu(contextMenuId, event.clientX, event.clientY, contextMenuData);
event.preventDefault();
}
});
</script>
</html>
+13 -16
View File
@@ -6,11 +6,8 @@ import (
"log"
"time"
"github.com/wailsapp/wails/v3/pkg/events"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/events"
)
//go:embed assets
@@ -18,10 +15,10 @@ var assets embed.FS
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "Events Demo",
Description: "A demo of the Events API",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
@@ -41,25 +38,25 @@ func main() {
}
})
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Title: "Events Demo",
Assets: options.Assets{
Assets: application.AssetOptions{
FS: assets,
},
Mac: options.MacWindow{
Backdrop: options.MacBackdropTranslucent,
TitleBar: options.TitleBarHiddenInsetUnified,
Mac: application.MacWindow{
Backdrop: application.MacBackdropTranslucent,
TitleBar: application.MacTitleBarHiddenInsetUnified,
InvisibleTitleBarHeight: 50,
},
})
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Title: "Events Demo",
Assets: options.Assets{
Assets: application.AssetOptions{
FS: assets,
},
Mac: options.MacWindow{
Backdrop: options.MacBackdropTranslucent,
TitleBar: options.TitleBarHiddenInsetUnified,
Mac: application.MacWindow{
Backdrop: application.MacBackdropTranslucent,
TitleBar: application.MacTitleBarHiddenInsetUnified,
InvisibleTitleBarHeight: 50,
},
})
+11 -12
View File
@@ -8,14 +8,13 @@ import (
"time"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/options"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "Menu Demo",
Description: "A demo of the menu system",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
@@ -110,22 +109,22 @@ func main() {
mySystray.SetMenu(myMenu)
mySystray.SetIconPosition(application.NSImageLeading)
myWindow := app.NewWebviewWindowWithOptions(&options.WebviewWindow{
myWindow := app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Title: "Kitchen Sink",
Width: 600,
Height: 400,
AlwaysOnTop: true,
DisableResize: false,
BackgroundColour: &options.RGBA{
BackgroundColour: &application.RGBA{
Red: 255,
Green: 255,
Blue: 255,
Alpha: 30,
},
StartState: options.WindowStateMaximised,
Mac: options.MacWindow{
Backdrop: options.MacBackdropTranslucent,
Appearance: options.NSAppearanceNameDarkAqua,
StartState: application.WindowStateMaximised,
Mac: application.MacWindow{
Backdrop: application.MacBackdropTranslucent,
Appearance: application.NSAppearanceNameDarkAqua,
},
})
/*
@@ -185,14 +184,14 @@ func main() {
*/
var myWindow2 *application.WebviewWindow
var myWindow2Lock sync.RWMutex
myWindow2 = app.NewWebviewWindowWithOptions(&options.WebviewWindow{
myWindow2 = app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Title: "#2",
Width: 1024,
Height: 768,
AlwaysOnTop: false,
URL: "https://google.com",
Mac: options.MacWindow{
Backdrop: options.MacBackdropTranslucent,
Mac: application.MacWindow{
Backdrop: application.MacBackdropTranslucent,
},
})
//myWindow2.On(events.Mac.WindowDidMove, func() {
+2 -4
View File
@@ -4,17 +4,15 @@ import (
_ "embed"
"log"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "Menu Demo",
Description: "A demo of the menu system",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
+7 -9
View File
@@ -5,31 +5,29 @@ import (
"log"
"net/http"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "Plain",
Description: "A demo of using raw HTML & CSS",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
// Create window
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Title: "Plain Bundle",
CSS: `body { background-color: rgba(255, 255, 255, 0); } .main { color: white; margin: 20%; }`,
Mac: options.MacWindow{
Mac: application.MacWindow{
InvisibleTitleBarHeight: 50,
Backdrop: options.MacBackdropTranslucent,
TitleBar: options.TitleBarHiddenInset,
Backdrop: application.MacBackdropTranslucent,
TitleBar: application.MacTitleBarHiddenInset,
},
URL: "/",
Assets: options.Assets{
Assets: application.AssetOptions{
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte(`<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 but this was Served by the AssetServer's Handler</p></div></body></html>`))
+3 -5
View File
@@ -5,17 +5,15 @@ import (
"log"
"runtime"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "Systray Demo",
Description: "A demo of the Systray API",
Mac: options.Mac{
ActivationPolicy: options.ActivationPolicyAccessory,
Mac: application.MacOptions{
ActivationPolicy: application.ActivationPolicyAccessory,
},
})
+19 -21
View File
@@ -9,18 +9,16 @@ import (
"strconv"
"time"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/events"
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "WebviewWindow Demo",
Description: "A demo of the WebviewWindow API",
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
@@ -58,56 +56,56 @@ func main() {
myMenu.Add("New Frameless WebviewWindow").
SetAccelerator("CmdOrCtrl+F").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
X: rand.Intn(1000),
Y: rand.Intn(800),
Frameless: true,
Mac: options.MacWindow{
Mac: application.MacWindow{
InvisibleTitleBarHeight: 50,
},
}).Show()
windowCounter++
})
if runtime.GOOS == "darwin" {
myMenu.Add("New WebviewWindow (TitleBarHiddenInset)").
myMenu.Add("New WebviewWindow (MacTitleBarHiddenInset)").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
Mac: options.MacWindow{
TitleBar: options.TitleBarHiddenInset,
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Mac: application.MacWindow{
TitleBar: application.MacTitleBarHiddenInset,
InvisibleTitleBarHeight: 25,
},
}).
SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetHTML("<br/><br/><p>A TitleBarHiddenInset WebviewWindow example</p>").
SetHTML("<br/><br/><p>A MacTitleBarHiddenInset WebviewWindow example</p>").
Show()
windowCounter++
})
myMenu.Add("New WebviewWindow (TitleBarHiddenInsetUnified)").
myMenu.Add("New WebviewWindow (MacTitleBarHiddenInsetUnified)").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
Mac: options.MacWindow{
TitleBar: options.TitleBarHiddenInsetUnified,
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Mac: application.MacWindow{
TitleBar: application.MacTitleBarHiddenInsetUnified,
InvisibleTitleBarHeight: 50,
},
}).
SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetHTML("<br/><br/><p>A TitleBarHiddenInsetUnified WebviewWindow example</p>").
SetHTML("<br/><br/><p>A MacTitleBarHiddenInsetUnified WebviewWindow example</p>").
Show()
windowCounter++
})
myMenu.Add("New WebviewWindow (TitleBarHidden)").
myMenu.Add("New WebviewWindow (MacTitleBarHidden)").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
Mac: options.MacWindow{
TitleBar: options.TitleBarHidden,
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Mac: application.MacWindow{
TitleBar: application.MacTitleBarHidden,
InvisibleTitleBarHeight: 25,
},
}).
SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetHTML("<br/><br/><p>A TitleBarHidden WebviewWindow example</p>").
SetHTML("<br/><br/><p>A MacTitleBarHidden WebviewWindow example</p>").
Show()
windowCounter++
})
+4 -6
View File
@@ -7,8 +7,6 @@ import (
"math/rand"
"strconv"
"github.com/wailsapp/wails/v3/pkg/options"
"github.com/wailsapp/wails/v3/pkg/application"
)
@@ -16,11 +14,11 @@ import (
var assets embed.FS
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Name: "WebviewWindow Javascript Demo",
Description: "A demo of the WebviewWindow API from Javascript",
Icon: nil,
Mac: options.Mac{
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
@@ -32,8 +30,8 @@ func main() {
windowCounter := 1
newWindow := func() {
app.NewWebviewWindowWithOptions(&options.WebviewWindow{
Assets: options.Assets{
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{
Assets: application.AssetOptions{
FS: assets,
},
}).
+1 -1
View File
@@ -115,7 +115,7 @@ func findApplicationNewCalls(context *Context) {
return true
}
// Check struct literal is of type "options.Application"
// Check struct literal is of type "application.Options"
selectorExpr, ok := structLit.Type.(*ast.SelectorExpr)
if !ok {
return true
@@ -5,7 +5,6 @@ import (
"log"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/options"
)
type GreetService struct {
@@ -22,7 +21,7 @@ type OtherService struct {
}
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Bind: []interface{}{
&GreetService{},
&OtherService{},
@@ -5,11 +5,10 @@ import (
"log"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/options"
)
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Bind: []interface{}{
&GreetService{},
&OtherService{},
+1 -2
View File
@@ -5,7 +5,6 @@ import (
"log"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/options"
)
type GreetService struct {
@@ -18,7 +17,7 @@ func (*GreetService) Greet(name string) string {
}
func main() {
app := application.New(options.Application{
app := application.New(application.Options{
Bind: []interface{}{
&GreetService{},
},
@@ -0,0 +1,28 @@
import {newRuntimeCaller} from "./runtime";
let call = newRuntimeCaller("contextmenu");
function openContextMenu(id, x, y, data) {
return call("OpenContextMenu", {id, x, y, data});
}
function enableContextMenus(enabled) {
if (enabled) {
window.addEventListener('contextmenu', contextMenuHandler);
} else {
window.removeEventListener('contextmenu', contextMenuHandler);
}
}
function contextMenuHandler(e) {
let element = e.target;
let contextMenuId = element.getAttribute("data-contextmenu-id");
if (contextMenuId) {
let contextMenuData = element.getAttribute("data-contextmenu-data");
console.log({contextMenuId, contextMenuData, x: e.clientX, y: e.clientY});
e.preventDefault();
return openContextMenu(contextMenuId, e.clientX, e.clientY, contextMenuData);
}
}
enableContextMenus(true);
+3 -2
View File
@@ -9,7 +9,6 @@ The electron alternative for Go
*/
/* jshint esversion: 9 */
import {dialogCallback, dialogErrorCallback, Error, Info, OpenFile, Question, SaveFile, Warning,} from "./dialogs";
import * as Clipboard from './clipboard';
import * as Application from './application';
@@ -17,12 +16,13 @@ import * as Log from './log';
import {newWindow} from "./window";
import {dispatchCustomEvent, Emit, Off, OffAll, On, Once, OnMultiple} from "./events";
import {dialogCallback, dialogErrorCallback, Error, Info, OpenFile, Question, SaveFile, Warning,} from "./dialogs";
// Internal wails endpoints
window.wails = {
...newRuntime(-1),
};
// Internal wails endpoints
window._wails = {
dialogCallback,
dialogErrorCallback,
@@ -63,3 +63,4 @@ if (DEBUG) {
console.log("Wails v3.0.0 Debug Mode Enabled");
}
+16
View File
@@ -13,6 +13,7 @@
"happy-dom": "^8.1.5",
"nanoid": "^4.0.0",
"npm-check-updates": "^16.6.3",
"svelte": "^3.55.1",
"vitest": "^0.28.3"
}
},
@@ -4408,6 +4409,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/svelte": {
"version": "3.55.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz",
"integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==",
"dev": true,
"engines": {
"node": ">= 8"
}
},
"node_modules/tar": {
"version": "6.1.13",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz",
@@ -8185,6 +8195,12 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
"svelte": {
"version": "3.55.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz",
"integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==",
"dev": true
},
"tar": {
"version": "6.1.13",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz",
+1
View File
@@ -11,6 +11,7 @@
"happy-dom": "^8.1.5",
"nanoid": "^4.0.0",
"npm-check-updates": "^16.6.3",
"svelte": "^3.55.1",
"vitest": "^0.28.3"
}
}

Some files were not shown because too many files have changed in this diff Show More