|
|
@ -60,7 +60,7 @@ func (g *Gui) Message(message, page string, doneFunc func()) {
|
|
|
|
AddButtons([]string{doneLabel}).
|
|
|
|
AddButtons([]string{doneLabel}).
|
|
|
|
SetDoneFunc(func(buttonIndex int, buttonLabel string) {
|
|
|
|
SetDoneFunc(func(buttonIndex int, buttonLabel string) {
|
|
|
|
g.Pages.RemovePage("message")
|
|
|
|
g.Pages.RemovePage("message")
|
|
|
|
g.Pages.SwitchToPage(page)
|
|
|
|
g.Pages.SwitchToPage(page).ShowPage("main")
|
|
|
|
if buttonLabel == doneLabel {
|
|
|
|
if buttonLabel == doneLabel {
|
|
|
|
doneFunc()
|
|
|
|
doneFunc()
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -82,40 +82,70 @@ func (g *Gui) Input(text, label string, width int, doneFunc func(text string)) {
|
|
|
|
g.Pages.AddAndSwitchToPage("input", g.Modal(input, 0, 3), true).ShowPage("main")
|
|
|
|
g.Pages.AddAndSwitchToPage("input", g.Modal(input, 0, 3), true).ShowPage("main")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (g *Gui) LoadJSON() {
|
|
|
|
func (g *Gui) Form(fieldLabel []string, doneLabel, title, pageName string,
|
|
|
|
pageName := "read_from_file"
|
|
|
|
height int, doneFunc func(values map[string]string) error) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if g.Pages.HasPage(pageName) {
|
|
|
|
|
|
|
|
g.Pages.ShowPage(pageName)
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
form := tview.NewForm()
|
|
|
|
form := tview.NewForm()
|
|
|
|
form.AddInputField("file", "", 0, nil, nil).
|
|
|
|
for _, label := range fieldLabel {
|
|
|
|
AddButton("read", func() {
|
|
|
|
form.AddInputField(label, "", 0, nil, nil)
|
|
|
|
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{}
|
|
|
|
form.AddButton(doneLabel, func() {
|
|
|
|
if err := json.Unmarshal(b, &i); err != nil {
|
|
|
|
values := make(map[string]string)
|
|
|
|
msg := fmt.Sprintf("can't read file: %s", err)
|
|
|
|
|
|
|
|
log.Println(msg)
|
|
|
|
for _, label := range fieldLabel {
|
|
|
|
g.Message(msg, "main", func() {})
|
|
|
|
item := form.GetFormItemByLabel(label)
|
|
|
|
return
|
|
|
|
switch item.(type) {
|
|
|
|
|
|
|
|
case *tview.InputField:
|
|
|
|
|
|
|
|
input, ok := item.(*tview.InputField)
|
|
|
|
|
|
|
|
if ok {
|
|
|
|
|
|
|
|
values[label] = os.ExpandEnv(input.GetText())
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g.Tree.UpdateView(g, i)
|
|
|
|
if err := doneFunc(values); err != nil {
|
|
|
|
g.Pages.RemovePage(pageName)
|
|
|
|
g.Message(err.Error(), pageName, func() {})
|
|
|
|
}).
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g.Pages.RemovePage(pageName)
|
|
|
|
|
|
|
|
}).
|
|
|
|
AddButton("cancel", func() {
|
|
|
|
AddButton("cancel", func() {
|
|
|
|
g.Pages.RemovePage(pageName)
|
|
|
|
g.Pages.RemovePage(pageName)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
form.SetBorder(true).SetTitle("read from file").
|
|
|
|
form.SetBorder(true).SetTitle(title).
|
|
|
|
SetTitleAlign(tview.AlignLeft)
|
|
|
|
SetTitleAlign(tview.AlignLeft)
|
|
|
|
|
|
|
|
|
|
|
|
g.Pages.AddAndSwitchToPage(pageName, g.Modal(form, 0, 8), true).ShowPage("main")
|
|
|
|
g.Pages.AddAndSwitchToPage(pageName, g.Modal(form, 0, height), true).ShowPage("main")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (g *Gui) LoadJSON() {
|
|
|
|
|
|
|
|
labels := []string{"file"}
|
|
|
|
|
|
|
|
g.Form(labels, "read", "read from file", "read_from_file", 7, func(values map[string]string) error {
|
|
|
|
|
|
|
|
file := values[labels[0]]
|
|
|
|
|
|
|
|
b, err := ioutil.ReadFile(file)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Println(fmt.Sprintf("can't read file: %s", err))
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var i interface{}
|
|
|
|
|
|
|
|
if err := json.Unmarshal(b, &i); err != nil {
|
|
|
|
|
|
|
|
log.Println(fmt.Sprintf("can't unmarshal json: %s", err))
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g.Tree.UpdateView(g, i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (g *Gui) Search() {
|
|
|
|
func (g *Gui) Search() {
|
|
|
@ -159,40 +189,27 @@ func (g *Gui) walk(nodes []*tview.TreeNode, text string) []*tview.TreeNode {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (g *Gui) SaveJSON() {
|
|
|
|
func (g *Gui) SaveJSON() {
|
|
|
|
pageName := "save_to_file"
|
|
|
|
labels := []string{"file"}
|
|
|
|
form := tview.NewForm()
|
|
|
|
g.Form(labels, "save", "save to file", "save_to_file", 7, func(values map[string]string) error {
|
|
|
|
form.AddInputField("file", "", 0, nil, nil).
|
|
|
|
file := values[labels[0]]
|
|
|
|
AddButton("save", func() {
|
|
|
|
file = os.ExpandEnv(file)
|
|
|
|
fileName := form.GetFormItem(0).(*tview.InputField).GetText()
|
|
|
|
|
|
|
|
fileName = os.ExpandEnv(fileName)
|
|
|
|
var buf bytes.Buffer
|
|
|
|
|
|
|
|
enc := json.NewEncoder(&buf)
|
|
|
|
var buf bytes.Buffer
|
|
|
|
enc.SetIndent("", " ")
|
|
|
|
enc := json.NewEncoder(&buf)
|
|
|
|
|
|
|
|
enc.SetIndent("", " ")
|
|
|
|
if err := enc.Encode(g.makeJSON(g.Tree.GetRoot())); err != nil {
|
|
|
|
|
|
|
|
log.Println(fmt.Sprintf("can't marshal json: %s", err))
|
|
|
|
if err := enc.Encode(g.makeJSON(g.Tree.GetRoot())); err != nil {
|
|
|
|
return err
|
|
|
|
msg := fmt.Sprintf("can't marshal json: %s", err)
|
|
|
|
}
|
|
|
|
log.Println(msg)
|
|
|
|
|
|
|
|
g.Message(msg, "main", func() {})
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := ioutil.WriteFile(fileName, buf.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").
|
|
|
|
if err := ioutil.WriteFile(file, buf.Bytes(), 0666); err != nil {
|
|
|
|
SetTitleAlign(tview.AlignLeft)
|
|
|
|
log.Println(fmt.Sprintf("can't create file: %s", err))
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g.Pages.AddAndSwitchToPage(pageName, g.Modal(form, 0, 8), true).ShowPage("main")
|
|
|
|
return nil
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (g *Gui) makeJSON(node *tview.TreeNode) interface{} {
|
|
|
|
func (g *Gui) makeJSON(node *tview.TreeNode) interface{} {
|
|
|
|