aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/logpage.go
diff options
context:
space:
mode:
authorAlexander Neumann <alexander.neumann@picos-software.com>2019-04-24 15:29:38 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-04-24 15:42:51 +0200
commit48f11e502cc7ee03a9c1dd554c3665883fc90cff (patch)
tree5df163a3e81b948fdf05f26429739d12b41ffc2e /ui/logpage.go
parentui: programmatically compute colors (diff)
downloadwireguard-windows-48f11e502cc7ee03a9c1dd554c3665883fc90cff.tar.xz
wireguard-windows-48f11e502cc7ee03a9c1dd554c3665883fc90cff.zip
ui: use tabs in main window and refactor tunnels ui and log dialog into tab pages
requires https://github.com/lxn/walk/commit/edb74ee350e9585ddd212acad445ec383950f2cc for status image background Signed-off-by: Alexander Neumann <alexander.neumann@picos-software.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--ui/logpage.go (renamed from ui/logdialog.go)108
1 files changed, 49 insertions, 59 deletions
diff --git a/ui/logdialog.go b/ui/logpage.go
index a2f23903..4f39ae87 100644
--- a/ui/logdialog.go
+++ b/ui/logpage.go
@@ -17,104 +17,94 @@ import (
"golang.zx2c4.com/wireguard/windows/ringlogger"
)
-func runLogDialog(owner walk.Form, logger *ringlogger.Ringlogger) {
- dlg := &LogDialog{logger: logger}
- dlg.model = newLogModel(dlg, logger)
- defer func() {
- dlg.model.quit <- true
- }()
+func NewLogPage(logger *ringlogger.Ringlogger) (*LogPage, error) {
+ lp := &LogPage{logger: logger}
var disposables walk.Disposables
defer disposables.Treat()
- showError := func(err error) bool {
- if err == nil {
- return false
- }
-
- walk.MsgBox(owner, "Viewing log dialog failed", err.Error(), walk.MsgBoxIconError)
-
- return true
- }
-
var err error
- if dlg.Dialog, err = walk.NewDialog(owner); showError(err) {
- return
+ if lp.TabPage, err = walk.NewTabPage(); err != nil {
+ return nil, err
}
- disposables.Add(dlg)
+ disposables.Add(lp)
- dlg.SetTitle("WireGuard Log")
- dlg.SetLayout(walk.NewVBoxLayout())
- dlg.Layout().SetMargins(walk.Margins{18, 18, 18, 18})
- dlg.SetMinMaxSize(walk.Size{600, 400}, walk.Size{})
+ lp.Disposing().Attach(func() {
+ lp.model.quit <- true
+ })
- if dlg.logView, err = walk.NewTableView(dlg); showError(err) {
- return
+ lp.SetTitle("Log")
+ lp.SetLayout(walk.NewVBoxLayout())
+ lp.Layout().SetMargins(walk.Margins{18, 18, 18, 18})
+
+ if lp.logView, err = walk.NewTableView(lp); err != nil {
+ return nil, err
}
- dlg.logView.SetAlternatingRowBGColor(walk.Color(win.GetSysColor(win.COLOR_BTNFACE)))
- dlg.logView.SetLastColumnStretched(true)
+ lp.logView.SetAlternatingRowBGColor(walk.Color(win.GetSysColor(win.COLOR_BTNFACE)))
+ lp.logView.SetLastColumnStretched(true)
stampCol := walk.NewTableViewColumn()
stampCol.SetName("Stamp")
stampCol.SetTitle("Time")
stampCol.SetFormat("2006-01-02 15:04:05.000")
stampCol.SetWidth(150)
- dlg.logView.Columns().Add(stampCol)
+ lp.logView.Columns().Add(stampCol)
msgCol := walk.NewTableViewColumn()
msgCol.SetName("Line")
msgCol.SetTitle("Log message")
- dlg.logView.Columns().Add(msgCol)
+ lp.logView.Columns().Add(msgCol)
- dlg.logView.SetModel(dlg.model)
- dlg.scrollToBottom()
+ lp.model = newLogModel(lp, logger)
+ lp.logView.SetModel(lp.model)
- buttonsContainer, err := walk.NewComposite(dlg)
+ buttonsContainer, err := walk.NewComposite(lp)
+ if err != nil {
+ return nil, err
+ }
buttonsContainer.SetLayout(walk.NewHBoxLayout())
buttonsContainer.Layout().SetMargins(walk.Margins{0, 12, 0, 0})
- saveButton, err := walk.NewPushButton(buttonsContainer)
- saveButton.SetText("Save")
- saveButton.Clicked().Attach(dlg.onSaveButtonClicked)
-
walk.NewHSpacer(buttonsContainer)
- closeButton, err := walk.NewPushButton(buttonsContainer)
- closeButton.SetText("Close")
- closeButton.Clicked().Attach(dlg.Accept)
-
- dlg.SetDefaultButton(closeButton)
- dlg.SetCancelButton(closeButton)
+ saveButton, err := walk.NewPushButton(buttonsContainer)
+ if err != nil {
+ return nil, err
+ }
+ saveButton.SetText("Save")
+ saveButton.Clicked().Attach(lp.onSaveButtonClicked)
disposables.Spare()
- dlg.Run()
+ return lp, nil
}
-type LogDialog struct {
- *walk.Dialog
+type LogPage struct {
+ *walk.TabPage
logView *walk.TableView
logger *ringlogger.Ringlogger
model *logModel
}
-func (dlg *LogDialog) isAtBottom() bool {
- return dlg.logView.ItemVisible(len(dlg.model.items) - 1)
+func (lp *LogPage) isAtBottom() bool {
+ return lp.logView.ItemVisible(len(lp.model.items) - 1)
}
-func (dlg *LogDialog) scrollToBottom() {
- dlg.logView.EnsureItemVisible(len(dlg.model.items) - 1)
+func (lp *LogPage) scrollToBottom() {
+ lp.logView.EnsureItemVisible(len(lp.model.items) - 1)
}
-func (dlg *LogDialog) onSaveButtonClicked() {
+func (lp *LogPage) onSaveButtonClicked() {
fd := walk.FileDialog{
Filter: "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
FilePath: fmt.Sprintf("wireguard-log-%s.txt", time.Now().Format("2006-01-02T150405")),
Title: "Export log to file",
}
- if ok, _ := fd.ShowSave(dlg); !ok {
+ form := lp.Form()
+
+ if ok, _ := fd.ShowSave(form); !ok {
return
}
@@ -123,8 +113,8 @@ func (dlg *LogDialog) onSaveButtonClicked() {
fd.FilePath = fd.FilePath + extensions[fd.FilterIndex-1]
}
- writeFileWithOverwriteHandling(dlg, fd.FilePath, func(file *os.File) error {
- if _, err := dlg.logger.WriteTo(file); err != nil {
+ writeFileWithOverwriteHandling(form, fd.FilePath, func(file *os.File) error {
+ if _, err := lp.logger.WriteTo(file); err != nil {
return fmt.Errorf("exportLog: Ringlogger.WriteTo failed: %v", err)
}
@@ -134,14 +124,14 @@ func (dlg *LogDialog) onSaveButtonClicked() {
type logModel struct {
walk.ReflectTableModelBase
- dlg *LogDialog
+ lp *LogPage
quit chan bool
logger *ringlogger.Ringlogger
items []ringlogger.FollowLine
}
-func newLogModel(dlg *LogDialog, logger *ringlogger.Ringlogger) *logModel {
- mdl := &logModel{dlg: dlg, quit: make(chan bool), logger: logger}
+func newLogModel(lp *LogPage, logger *ringlogger.Ringlogger) *logModel {
+ mdl := &logModel{lp: lp, quit: make(chan bool), logger: logger}
var lastCursor uint32
mdl.items, lastCursor = logger.FollowFromCursor(ringlogger.CursorAll)
@@ -167,14 +157,14 @@ func newLogModel(dlg *LogDialog, logger *ringlogger.Ringlogger) *logModel {
lastCursor = cursor
lastStamp = stamp
- mdl.dlg.Synchronize(func() {
- isAtBottom := mdl.dlg.isAtBottom()
+ mdl.lp.Synchronize(func() {
+ isAtBottom := mdl.lp.isAtBottom()
mdl.items = items
mdl.PublishRowsReset()
if isAtBottom {
- mdl.dlg.scrollToBottom()
+ mdl.lp.scrollToBottom()
}
})
}