1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
*/
package ui
import (
"fmt"
"runtime"
"runtime/debug"
"github.com/lxn/walk"
"golang.zx2c4.com/wireguard/device"
"golang.zx2c4.com/wireguard/windows/service"
)
// #include "../version.h"
import "C"
var iconProvider *IconProvider
func RunUI() {
runtime.LockOSThread()
defer func() {
if err := recover(); err != nil {
walk.MsgBox(nil, "Panic", fmt.Sprint(err, "\n\n", string(debug.Stack())), walk.MsgBoxIconError)
panic(err)
}
}()
var err error
iconProvider, err = NewIconProvider()
if err != nil {
walk.MsgBox(nil, "Unable to initialize icon provider", fmt.Sprint(err), walk.MsgBoxIconError)
return
}
defer iconProvider.Dispose()
mtw, err := NewManageTunnelsWindow()
if err != nil {
panic(err)
}
defer mtw.Dispose()
tray, err := NewTray(mtw)
if err != nil {
panic(err)
}
defer tray.Dispose()
mtw.Run()
}
func onQuit() {
_, err := service.IPCClientQuit(true)
if err != nil {
walk.MsgBox(nil, "Error Exiting WireGuard", fmt.Sprintf("Unable to exit service due to: %s. You may want to stop WireGuard from the service manager.", err), walk.MsgBoxIconError)
}
walk.App().Exit(0)
}
func onAbout(owner walk.Form) {
vbl := walk.NewVBoxLayout()
vbl.SetMargins(walk.Margins{80, 20, 80, 20})
vbl.SetSpacing(10)
dlg, _ := walk.NewDialogWithFixedSize(owner)
dlg.SetTitle("About WireGuard")
dlg.SetLayout(vbl)
font, _ := walk.NewFont("Segoe UI", 9, 0)
dlg.SetFont(font)
icon, err := walk.NewIconFromResourceIdWithSize(1, walk.Size{128, 128})
if err != nil {
panic(err)
}
dlg.AddDisposable(icon)
iv, _ := walk.NewImageView(dlg)
iv.SetImage(icon)
wgFont, _ := walk.NewFont("Segoe UI", 16, walk.FontBold)
wgLbl, _ := walk.NewLabel(dlg)
wgLbl.SetFont(wgFont)
wgLbl.SetTextAlignment(walk.AlignCenter)
wgLbl.SetText("WireGuard")
detailsLbl, _ := walk.NewTextLabel(dlg)
detailsLbl.SetTextAlignment(walk.AlignHCenterVNear)
detailsLbl.SetText(fmt.Sprintf(`App version: %s
Go backend version: %s
Copyright © 2015-2019 WireGuard LLC.
All Rights Reserved.`,
C.WIREGUARD_WINDOWS_VERSION, device.WireGuardGoVersion))
hbl := walk.NewHBoxLayout()
hbl.SetMargins(walk.Margins{VNear: 10})
buttonCP, _ := walk.NewComposite(dlg)
buttonCP.SetLayout(hbl)
walk.NewHSpacer(buttonCP)
closePB, _ := walk.NewPushButton(buttonCP)
closePB.SetAlignment(walk.AlignHCenterVNear)
closePB.SetText("Close")
closePB.Clicked().Attach(func() {
dlg.Accept()
})
walk.NewHSpacer(buttonCP)
dlg.SetDefaultButton(closePB)
dlg.SetCancelButton(closePB)
dlg.Run()
}
|