aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/managewindow.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-04-26 20:05:24 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-04-27 08:24:22 +0200
commit3e8cf39903775ecb6b8ebe03d43591453fe3c7d8 (patch)
treed62408b62529d0e18a19866d540c1c87cfa957c1 /ui/managewindow.go
parentinstaller: new checksums for working msm (diff)
downloadwireguard-windows-3e8cf39903775ecb6b8ebe03d43591453fe3c7d8.tar.xz
wireguard-windows-3e8cf39903775ecb6b8ebe03d43591453fe3c7d8.zip
ui: simplify everything
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'ui/managewindow.go')
-rw-r--r--ui/managewindow.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/ui/managewindow.go b/ui/managewindow.go
new file mode 100644
index 00000000..85c55844
--- /dev/null
+++ b/ui/managewindow.go
@@ -0,0 +1,103 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package ui
+
+import (
+ "github.com/lxn/walk"
+ "github.com/lxn/win"
+ "golang.zx2c4.com/wireguard/windows/service"
+)
+
+type ManageTunnelsWindow struct {
+ *walk.MainWindow
+
+ tunnelsPage *TunnelsPage
+ logPage *LogPage
+
+ tunnelChangedCB *service.TunnelChangeCallback
+}
+
+func NewManageTunnelsWindow() (*ManageTunnelsWindow, error) {
+ var err error
+
+ var disposables walk.Disposables
+ defer disposables.Treat()
+
+ mtw := &ManageTunnelsWindow{}
+
+ mtw.MainWindow, err = walk.NewMainWindowWithName("WireGuard")
+ if err != nil {
+ return nil, err
+ }
+ disposables.Add(mtw)
+
+ mtw.SetIcon(iconProvider.baseIcon)
+ mtw.SetTitle("WireGuard")
+ font, err := walk.NewFont("Segoe UI", 9, 0)
+ if err != nil {
+ return nil, err
+ }
+ mtw.AddDisposable(font)
+ mtw.SetFont(font)
+ mtw.SetSize(walk.Size{900, 600})
+ mtw.SetLayout(walk.NewVBoxLayout())
+ mtw.Closing().Attach(func(canceled *bool, reason walk.CloseReason) {
+ // "Close to tray" instead of exiting application
+ onQuit()
+ })
+ mtw.VisibleChanged().Attach(func() {
+ if mtw.Visible() {
+ mtw.tunnelsPage.updateConfView()
+ win.SetForegroundWindow(mtw.Handle())
+ win.BringWindowToTop(mtw.Handle())
+
+ mtw.logPage.scrollToBottom()
+ }
+ })
+
+ tabWidget, _ := walk.NewTabWidget(mtw)
+
+ mtw.tunnelsPage, _ = NewTunnelsPage()
+ tabWidget.Pages().Add(mtw.tunnelsPage.TabPage)
+
+ mtw.logPage, _ = NewLogPage()
+ tabWidget.Pages().Add(mtw.logPage.TabPage)
+
+ disposables.Spare()
+
+ mtw.tunnelChangedCB = service.IPCClientRegisterTunnelChange(mtw.onTunnelChange)
+ mtw.onTunnelChange(nil, service.TunnelUnknown, nil)
+
+ return mtw, nil
+}
+
+func (mtw *ManageTunnelsWindow) Dispose() {
+ if mtw.tunnelChangedCB != nil {
+ mtw.tunnelChangedCB.Unregister()
+ mtw.tunnelChangedCB = nil
+ }
+ mtw.MainWindow.Dispose()
+}
+
+func (mtw *ManageTunnelsWindow) onTunnelChange(tunnel *service.Tunnel, state service.TunnelState, err error) {
+ globalState, err2 := service.IPCClientGlobalState()
+ mtw.Synchronize(func() {
+ if err2 == nil {
+ icon, err2 := iconProvider.IconWithOverlayForState(globalState)
+ if err2 == nil {
+ mtw.SetIcon(icon)
+ }
+ }
+
+ if err != nil && mtw.Visible() {
+ errMsg := err.Error()
+ if len(errMsg) > 0 && errMsg[len(errMsg)-1] != '.' {
+ errMsg += "."
+ }
+ walk.MsgBox(mtw, "Tunnel Error", errMsg+"\n\nPlease consult the log for more information.", walk.MsgBoxIconWarning)
+ }
+ })
+}