From 4e084289f946528c1778e2aa37aa55a7e31a1663 Mon Sep 17 00:00:00 2001 From: skanehira Date: Wed, 30 Oct 2019 22:28:53 +0900 Subject: [PATCH] add load json from file keybinding --- gui/gui.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ gui/tree.go | 2 ++ 2 files changed, 59 insertions(+) diff --git a/gui/gui.go b/gui/gui.go index e9fa336..8be60e6 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -1,7 +1,11 @@ package gui import ( + "encoding/json" + "fmt" + "io/ioutil" "log" + "os" "github.com/gdamore/tcell" "github.com/rivo/tview" @@ -46,6 +50,22 @@ func (g *Gui) Modal(p tview.Primitive, width, height int) tview.Primitive { AddItem(p, 1, 1, 1, 1, 0, 0, true) } +func (g *Gui) Message(message, page string, doneFunc func()) { + doneLabel := "ok" + modal := tview.NewModal(). + SetText(message). + AddButtons([]string{doneLabel}). + SetDoneFunc(func(buttonIndex int, buttonLabel string) { + g.Pages.RemovePage("message") + g.Pages.SwitchToPage(page) + if buttonLabel == doneLabel { + doneFunc() + } + }) + + g.Pages.AddAndSwitchToPage("message", g.Modal(modal, 80, 29), true).ShowPage("main") +} + func (g *Gui) Input(text string, doneFunc func(text string)) { input := tview.NewInputField().SetText(text) input.SetBorder(true) @@ -58,3 +78,40 @@ func (g *Gui) Input(text string, doneFunc func(text string)) { g.Pages.AddAndSwitchToPage("input", g.Modal(input, 0, 3), true).ShowPage("main") } + +func (g *Gui) LoadJSON() { + width := 30 + pageName := "read_from_file" + form := tview.NewForm() + form.AddInputField("file", "", width, nil, nil). + AddButton("read", func() { + file := form.GetFormItem(0).(*tview.InputField).GetText() + file = os.ExpandEnv(file) + b, err := ioutil.ReadFile(file) + if err != nil { + msg := fmt.Sprintf("can't read file: %s", err) + log.Println(msg) + g.Message(msg, "main", func() {}) + return + } + + var i interface{} + if err := json.Unmarshal(b, &i); err != nil { + msg := fmt.Sprintf("can't read file: %s", err) + log.Println(msg) + g.Message(msg, "main", func() {}) + return + } + + g.Tree.UpdateView(g, i) + g.Pages.RemovePage(pageName) + }). + AddButton("cancel", func() { + g.Pages.RemovePage(pageName) + }) + + form.SetBorder(true).SetTitle("read from file"). + SetTitleAlign(tview.AlignLeft) + + g.Pages.AddAndSwitchToPage(pageName, g.Modal(form, 0, 8), true).ShowPage("main") +} diff --git a/gui/tree.go b/gui/tree.go index 50c4cef..f5746c6 100644 --- a/gui/tree.go +++ b/gui/tree.go @@ -86,6 +86,8 @@ func (t *Tree) SetKeybindings(g *Gui) { t.GetRoot().ExpandAll() case 'l': t.GetCurrentNode().SetExpanded(true) + case 'r': + g.LoadJSON() } return event