394 lines
8.7 KiB
Go
394 lines
8.7 KiB
Go
// Copyright 2011 The Walk Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build windows
|
|
|
|
package walk
|
|
|
|
import (
|
|
"unsafe"
|
|
)
|
|
|
|
import (
|
|
"github.com/lxn/win"
|
|
)
|
|
|
|
type WebViewNavigatingEventData struct {
|
|
pDisp *win.IDispatch
|
|
url *win.VARIANT
|
|
flags *win.VARIANT
|
|
targetFrameName *win.VARIANT
|
|
postData *win.VARIANT
|
|
headers *win.VARIANT
|
|
cancel *win.VARIANT_BOOL
|
|
}
|
|
|
|
func (eventData *WebViewNavigatingEventData) Url() string {
|
|
url := eventData.url
|
|
if url != nil && url.MustBSTR() != nil {
|
|
return win.BSTRToString(url.MustBSTR())
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (eventData *WebViewNavigatingEventData) Flags() int32 {
|
|
flags := eventData.flags
|
|
if flags != nil {
|
|
return flags.MustLong()
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (eventData *WebViewNavigatingEventData) PostData() string {
|
|
postData := eventData.postData
|
|
if postData != nil {
|
|
pvar := postData.MustPVariant()
|
|
if pvar != nil && pvar.Vt == win.VT_ARRAY|win.VT_UI1 {
|
|
psa := pvar.MustPSafeArray()
|
|
if psa != nil && psa.CDims == 1 && psa.CbElements == 1 {
|
|
postDataSize := psa.Rgsabound[0].CElements * psa.CbElements
|
|
byteAryPtr := (*[200000000]byte)(unsafe.Pointer(psa.PvData))
|
|
byteArySlice := (*byteAryPtr)[0 : postDataSize-1]
|
|
return string(byteArySlice)
|
|
}
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (eventData *WebViewNavigatingEventData) Headers() string {
|
|
headers := eventData.headers
|
|
if headers != nil && headers.MustBSTR() != nil {
|
|
return win.BSTRToString(headers.MustBSTR())
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (eventData *WebViewNavigatingEventData) TargetFrameName() string {
|
|
targetFrameName := eventData.targetFrameName
|
|
if targetFrameName != nil && targetFrameName.MustBSTR() != nil {
|
|
return win.BSTRToString(targetFrameName.MustBSTR())
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (eventData *WebViewNavigatingEventData) Canceled() bool {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if *cancel != win.VARIANT_FALSE {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (eventData *WebViewNavigatingEventData) SetCanceled(value bool) {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if value {
|
|
*cancel = win.VARIANT_TRUE
|
|
} else {
|
|
*cancel = win.VARIANT_FALSE
|
|
}
|
|
}
|
|
}
|
|
|
|
type WebViewNavigatingEventHandler func(eventData *WebViewNavigatingEventData)
|
|
|
|
type WebViewNavigatingEvent struct {
|
|
handlers []WebViewNavigatingEventHandler
|
|
}
|
|
|
|
func (e *WebViewNavigatingEvent) Attach(handler WebViewNavigatingEventHandler) int {
|
|
for i, h := range e.handlers {
|
|
if h == nil {
|
|
e.handlers[i] = handler
|
|
return i
|
|
}
|
|
}
|
|
|
|
e.handlers = append(e.handlers, handler)
|
|
return len(e.handlers) - 1
|
|
}
|
|
|
|
func (e *WebViewNavigatingEvent) Detach(handle int) {
|
|
e.handlers[handle] = nil
|
|
}
|
|
|
|
type WebViewNavigatingEventPublisher struct {
|
|
event WebViewNavigatingEvent
|
|
}
|
|
|
|
func (p *WebViewNavigatingEventPublisher) Event() *WebViewNavigatingEvent {
|
|
return &p.event
|
|
}
|
|
|
|
func (p *WebViewNavigatingEventPublisher) Publish(eventData *WebViewNavigatingEventData) {
|
|
for _, handler := range p.event.handlers {
|
|
if handler != nil {
|
|
handler(eventData)
|
|
}
|
|
}
|
|
}
|
|
|
|
type WebViewNavigatedErrorEventData struct {
|
|
pDisp *win.IDispatch
|
|
url *win.VARIANT
|
|
targetFrameName *win.VARIANT
|
|
statusCode *win.VARIANT
|
|
cancel *win.VARIANT_BOOL
|
|
}
|
|
|
|
func (eventData *WebViewNavigatedErrorEventData) Url() string {
|
|
url := eventData.url
|
|
if url != nil && url.MustBSTR() != nil {
|
|
return win.BSTRToString(url.MustBSTR())
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (eventData *WebViewNavigatedErrorEventData) TargetFrameName() string {
|
|
targetFrameName := eventData.targetFrameName
|
|
if targetFrameName != nil && targetFrameName.MustBSTR() != nil {
|
|
return win.BSTRToString(targetFrameName.MustBSTR())
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (eventData *WebViewNavigatedErrorEventData) StatusCode() int32 {
|
|
statusCode := eventData.statusCode
|
|
if statusCode != nil {
|
|
return statusCode.MustLong()
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (eventData *WebViewNavigatedErrorEventData) Canceled() bool {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if *cancel != win.VARIANT_FALSE {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (eventData *WebViewNavigatedErrorEventData) SetCanceled(value bool) {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if value {
|
|
*cancel = win.VARIANT_TRUE
|
|
} else {
|
|
*cancel = win.VARIANT_FALSE
|
|
}
|
|
}
|
|
}
|
|
|
|
type WebViewNavigatedErrorEventHandler func(eventData *WebViewNavigatedErrorEventData)
|
|
|
|
type WebViewNavigatedErrorEvent struct {
|
|
handlers []WebViewNavigatedErrorEventHandler
|
|
}
|
|
|
|
func (e *WebViewNavigatedErrorEvent) Attach(handler WebViewNavigatedErrorEventHandler) int {
|
|
for i, h := range e.handlers {
|
|
if h == nil {
|
|
e.handlers[i] = handler
|
|
return i
|
|
}
|
|
}
|
|
|
|
e.handlers = append(e.handlers, handler)
|
|
return len(e.handlers) - 1
|
|
}
|
|
|
|
func (e *WebViewNavigatedErrorEvent) Detach(handle int) {
|
|
e.handlers[handle] = nil
|
|
}
|
|
|
|
type WebViewNavigatedErrorEventPublisher struct {
|
|
event WebViewNavigatedErrorEvent
|
|
}
|
|
|
|
func (p *WebViewNavigatedErrorEventPublisher) Event() *WebViewNavigatedErrorEvent {
|
|
return &p.event
|
|
}
|
|
|
|
func (p *WebViewNavigatedErrorEventPublisher) Publish(eventData *WebViewNavigatedErrorEventData) {
|
|
for _, handler := range p.event.handlers {
|
|
if handler != nil {
|
|
handler(eventData)
|
|
}
|
|
}
|
|
}
|
|
|
|
type WebViewNewWindowEventData struct {
|
|
ppDisp **win.IDispatch
|
|
cancel *win.VARIANT_BOOL
|
|
dwFlags uint32
|
|
bstrUrlContext *uint16
|
|
bstrUrl *uint16
|
|
}
|
|
|
|
func (eventData *WebViewNewWindowEventData) Canceled() bool {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if *cancel != win.VARIANT_FALSE {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (eventData *WebViewNewWindowEventData) SetCanceled(value bool) {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if value {
|
|
*cancel = win.VARIANT_TRUE
|
|
} else {
|
|
*cancel = win.VARIANT_FALSE
|
|
}
|
|
}
|
|
}
|
|
|
|
func (eventData *WebViewNewWindowEventData) Flags() uint32 {
|
|
return eventData.dwFlags
|
|
}
|
|
|
|
func (eventData *WebViewNewWindowEventData) UrlContext() string {
|
|
bstrUrlContext := eventData.bstrUrlContext
|
|
if bstrUrlContext != nil {
|
|
return win.BSTRToString(bstrUrlContext)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (eventData *WebViewNewWindowEventData) Url() string {
|
|
bstrUrl := eventData.bstrUrl
|
|
if bstrUrl != nil {
|
|
return win.BSTRToString(bstrUrl)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
type WebViewNewWindowEventHandler func(eventData *WebViewNewWindowEventData)
|
|
|
|
type WebViewNewWindowEvent struct {
|
|
handlers []WebViewNewWindowEventHandler
|
|
}
|
|
|
|
func (e *WebViewNewWindowEvent) Attach(handler WebViewNewWindowEventHandler) int {
|
|
for i, h := range e.handlers {
|
|
if h == nil {
|
|
e.handlers[i] = handler
|
|
return i
|
|
}
|
|
}
|
|
|
|
e.handlers = append(e.handlers, handler)
|
|
return len(e.handlers) - 1
|
|
}
|
|
|
|
func (e *WebViewNewWindowEvent) Detach(handle int) {
|
|
e.handlers[handle] = nil
|
|
}
|
|
|
|
type WebViewNewWindowEventPublisher struct {
|
|
event WebViewNewWindowEvent
|
|
}
|
|
|
|
func (p *WebViewNewWindowEventPublisher) Event() *WebViewNewWindowEvent {
|
|
return &p.event
|
|
}
|
|
|
|
func (p *WebViewNewWindowEventPublisher) Publish(eventData *WebViewNewWindowEventData) {
|
|
for _, handler := range p.event.handlers {
|
|
if handler != nil {
|
|
handler(eventData)
|
|
}
|
|
}
|
|
}
|
|
|
|
type WebViewWindowClosingEventData struct {
|
|
bIsChildWindow win.VARIANT_BOOL
|
|
cancel *win.VARIANT_BOOL
|
|
}
|
|
|
|
func (eventData *WebViewWindowClosingEventData) IsChildWindow() bool {
|
|
bIsChildWindow := eventData.bIsChildWindow
|
|
if bIsChildWindow != win.VARIANT_FALSE {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (eventData *WebViewWindowClosingEventData) Canceled() bool {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if *cancel != win.VARIANT_FALSE {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (eventData *WebViewWindowClosingEventData) SetCanceled(value bool) {
|
|
cancel := eventData.cancel
|
|
if cancel != nil {
|
|
if value {
|
|
*cancel = win.VARIANT_TRUE
|
|
} else {
|
|
*cancel = win.VARIANT_FALSE
|
|
}
|
|
}
|
|
}
|
|
|
|
type WebViewWindowClosingEventHandler func(eventData *WebViewWindowClosingEventData)
|
|
|
|
type WebViewWindowClosingEvent struct {
|
|
handlers []WebViewWindowClosingEventHandler
|
|
}
|
|
|
|
func (e *WebViewWindowClosingEvent) Attach(handler WebViewWindowClosingEventHandler) int {
|
|
for i, h := range e.handlers {
|
|
if h == nil {
|
|
e.handlers[i] = handler
|
|
return i
|
|
}
|
|
}
|
|
|
|
e.handlers = append(e.handlers, handler)
|
|
return len(e.handlers) - 1
|
|
}
|
|
|
|
func (e *WebViewWindowClosingEvent) Detach(handle int) {
|
|
e.handlers[handle] = nil
|
|
}
|
|
|
|
type WebViewWindowClosingEventPublisher struct {
|
|
event WebViewWindowClosingEvent
|
|
}
|
|
|
|
func (p *WebViewWindowClosingEventPublisher) Event() *WebViewWindowClosingEvent {
|
|
return &p.event
|
|
}
|
|
|
|
func (p *WebViewWindowClosingEventPublisher) Publish(eventData *WebViewWindowClosingEventData) {
|
|
for _, handler := range p.event.handlers {
|
|
if handler != nil {
|
|
handler(eventData)
|
|
}
|
|
}
|
|
}
|