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
|
/* 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/ringlogger"
"golang.zx2c4.com/wireguard/windows/service"
)
type ManageTunnelsWindow struct {
*walk.MainWindow
icon *walk.Icon
logger *ringlogger.Ringlogger
tunnelsPage *TunnelsPage
logPage *LogPage
}
func NewManageTunnelsWindow(icon *walk.Icon, logger *ringlogger.Ringlogger) (*ManageTunnelsWindow, error) {
var err error
var disposables walk.Disposables
defer disposables.Treat()
mtw := &ManageTunnelsWindow{
icon: icon,
logger: logger,
}
mtw.MainWindow, err = walk.NewMainWindowWithName("WireGuard")
if err != nil {
return nil, err
}
disposables.Add(mtw)
mtw.SetIcon(mtw.icon)
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(logger)
tabWidget.Pages().Add(mtw.logPage.TabPage)
disposables.Spare()
return mtw, nil
}
func (mtw *ManageTunnelsWindow) TunnelTracker() *TunnelTracker {
return mtw.tunnelsPage.tunnelTracker
}
func (mtw *ManageTunnelsWindow) SetTunnelTracker(tunnelTracker *TunnelTracker) {
mtw.tunnelsPage.tunnelTracker = tunnelTracker
mtw.tunnelsPage.confView.SetTunnelTracker(tunnelTracker)
}
func (mtw *ManageTunnelsWindow) SetTunnelState(tunnel *service.Tunnel, state service.TunnelState) {
mtw.tunnelsPage.SetTunnelState(tunnel, state)
icon, err := mtw.tunnelsPage.tunnelsView.imageProvider.IconWithOverlayForState(mtw.icon, state)
if err != nil {
return
}
mtw.SetIcon(icon)
}
|