//selectAction shows information about the action that is selected in the ActionListView func (c *CUI) selectAction(g *gocui.Gui, v *gocui.View) error { c.selectedCommand = c.getCursorListPos(g, v) if c.selectedCommand > len(c.cmdList)-1 { return nil } var l string var t string //Load the message from the commandList l = c.cmdList[c.selectedCommand].Message.ChildrenText() t = c.cmdList[c.selectedCommand].Message.Message maxX, maxY := g.Size() if v, err := g.SetView("ActionViewTitle", maxX/2-30, maxY/3-2, maxX/2+30, maxY/3); err != nil { if err != gocui.ErrorUnkView { return err } fmt.Fprintln(v, t) } if v, err := g.SetView("ActionView", maxX/2-30, maxY/3, maxX/2+30, 2*maxY/3); err != nil { if err != gocui.ErrorUnkView { return err } v.Wrap = true fmt.Fprintln(v, l) if err := g.SetCurrentView("ActionView"); err != nil { return err } } err := c.printActionHelp(g) return err }
//abortQuit goes back to the ActionListView if the quit message is rejected func (c *CUI) abortQuit(g *gocui.Gui, v *gocui.View) error { if err := g.DeleteView("QuitWarnView"); err != nil { return err } if err := g.SetCurrentView("ActionListView"); err != nil { return err } return nil }
//deleteView deletes ActionView + ActionViewTittle and gives focus to ActionListView func (c *CUI) deleteView(g *gocui.Gui, v *gocui.View) error { if err := g.DeleteView("ActionView"); err != nil { return err } if err := g.DeleteView("ActionViewTitle"); err != nil { return err } if err := g.SetCurrentView("ActionListView"); err != nil { return err } if err := c.printGeneralHelp(g); err != nil { return err } return nil }
//quit is called when the user wants to finish the execution of the gui. It should display a warning screen and give an // error result to all the pending actions. If no pending actions exists, it just exists func (c *CUI) quit(g *gocui.Gui, v *gocui.View) error { if len(c.cmdList) > 0 { maxX, maxY := g.Size() if v, err := g.SetView("QuitWarnView", maxX/2-30, maxY/4, maxX/2+30, 3*maxY/4); err != nil { if err != gocui.ErrorUnkView { return err } fmt.Fprintf(v, "By pressing <Ctrl-X> all pending actions will be cancelled.\nPress <Enter> to go back") v.BgColor = gocui.ColorYellow v.FgColor = gocui.ColorBlack if err := g.SetCurrentView("QuitWarnView"); err != nil { return err } } return nil } return c.quitAcknowledged(g, v) }
//layout sets the initial layou of the gui putting the windows in place func (c *CUI) layout(g *gocui.Gui) error { maxX, maxY := g.Size() if v, err := g.SetView("ActionListTitle", -1, -1, int(0.7*float32(maxX)), 2); err != nil { if err != gocui.ErrorUnkView { return err } fmt.Fprint(v, " Action List") v.FgColor = gocui.ColorGreen } if v, err := g.SetView("ActionListView", -1, 2, int(0.7*float32(maxX)), maxY-5); err != nil { if err != gocui.ErrorUnkView { return err } v.Highlight = true if err := g.SetCurrentView("ActionListView"); err != nil { return err } } if v, err := g.SetView("LogViewTitle", int(0.7*float32(maxX)), -1, maxX, 2); err != nil { if err != gocui.ErrorUnkView { return err } fmt.Fprintf(v, " Log View") v.FgColor = gocui.ColorGreen } if v, err := g.SetView("LogView", int(0.7*float32(maxX)), 2, maxX, maxY-5); err != nil { if err != gocui.ErrorUnkView { return err } v.Highlight = true } if v, err := g.SetView("HelpView", 0, maxY-5, maxX, maxY-1); err != nil { if err != gocui.ErrorUnkView { return err } v.Frame = false v.FgColor = gocui.ColorGreen if err := c.printGeneralHelp(g); err != nil { return err } } return nil }
//ActionError displays a window to give a description of the error occurred on a specific action func (c *CUI) ActionError(g *gocui.Gui, v *gocui.View) error { if c.selectedCommand < 0 { panic(errors.New("Invalid command selection value")) } //send an error on maxX, maxY := g.Size() if v, err := g.SetView("ErrorMessageTittleView", maxX/2-30, maxY/4-2, maxX/2+30, maxY/4); err != nil { if err != gocui.ErrorUnkView { return err } fmt.Fprintln(v, " Write a description for the error (<Enter> when done)") v.FgColor = gocui.ColorRed if err := g.SetCurrentView("ActionView"); err != nil { return err } } if v, err := g.SetView("ErrorMessageView", maxX/2-30, maxY/4, maxX/2+30, 3*maxY/4); err != nil { if err != gocui.ErrorUnkView { return err } if err := g.SetCurrentView("ActionView"); err != nil { return err } v.Editable = true } if err := g.SetCurrentView("ErrorMessageView"); err != nil { return err } return nil }
//nextView jumps between the ActionListView and the LogView func (c *CUI) nextView(g *gocui.Gui, v *gocui.View) error { if v == nil || v.Name() == "ActionListView" { return g.SetCurrentView("LogView") } return g.SetCurrentView("ActionListView") }