add save file keybinding

develop
skanehira 5 years ago
parent 741c0252a2
commit e985c1ed25

@ -1,6 +1,7 @@
package gui
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
@ -155,3 +156,40 @@ func (g *Gui) walk(node *tview.TreeNode, text string) []*tview.TreeNode {
return nodes
}
func (g *Gui) SaveJSON() {
pageName := "save_to_file"
form := tview.NewForm()
form.AddInputField("file", "", 0, nil, nil).
AddButton("save", func() {
fileName := form.GetFormItem(0).(*tview.InputField).GetText()
fileName = os.ExpandEnv(fileName)
var b bytes.Buffer
enc := json.NewEncoder(&b)
enc.SetIndent("", " ")
if err := enc.Encode(g.Tree.OriginJSON); err != nil {
msg := fmt.Sprintf("can't make json: %s", err)
log.Println(msg)
g.Message(msg, "main", func() {})
return
}
if err := ioutil.WriteFile(fileName, b.Bytes(), 0666); err != nil {
msg := fmt.Sprintf("can't create file: %s", err)
log.Println(msg)
g.Message(msg, "main", func() {})
return
}
g.Pages.RemovePage(pageName)
}).
AddButton("cancel", func() {
g.Pages.RemovePage(pageName)
})
form.SetBorder(true).SetTitle("save to file").
SetTitleAlign(tview.AlignLeft)
g.Pages.AddAndSwitchToPage(pageName, g.Modal(form, 0, 8), true).ShowPage("main")
}

@ -11,6 +11,7 @@ import (
type Tree struct {
*tview.TreeView
OriginRoot *tview.TreeNode
OriginJSON interface{}
}
func NewTree() *Tree {
@ -28,6 +29,7 @@ func (t *Tree) UpdateView(g *Gui, i interface{}) {
t.SetRoot(root).SetCurrentNode(root)
originRoot := *root
t.OriginRoot = &originRoot
t.OriginJSON = i
})
}
@ -91,6 +93,8 @@ func (t *Tree) SetKeybindings(g *Gui) {
t.GetCurrentNode().SetExpanded(true)
case 'r':
g.LoadJSON()
case 's':
g.SaveJSON()
case '/':
g.Search()
}

Loading…
Cancel
Save