Exemplo n.º 1
0
//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
}
Exemplo n.º 2
0
//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
}
Exemplo n.º 3
0
//ReportError instantiates a command result with the contents of the ErrorMessageView as the message for the error,
// sends the error on the channel and deletes the views on error reporting. Deletes the action from the window too
func (c *CUI) ReportError(g *gocui.Gui, v *gocui.View) error {
	res := *NewCUICommandResult(c.cmdList[c.selectedCommand].Id, errors.New(v.Buffer())) //TODO strip \n ??
	c.CmdOut <- res
	err := c.cmdDone(c.selectedCommand)
	if err != nil {
		return err
	}
	//find all the views and exit
	if err := c.G.DeleteView("ErrorMessageTittleView"); err != nil {
		return err
	}
	if err := c.G.DeleteView("ErrorMessageView"); err != nil {
		return err
	}
	return c.deleteView(g, v)
}
Exemplo n.º 4
0
//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)
}
Exemplo n.º 5
0
//cursorUp moves the cursor up one position. When reaching the top, windows the text
func (c *CUI) cursorUp(g *gocui.Gui, v *gocui.View) error {
	if v != nil {
		ox, oy := v.Origin()
		cx, cy := v.Cursor()
		if err := v.SetCursor(cx, cy-1); err != nil && oy > 0 {
			if err := v.SetOrigin(ox, oy-1); err != nil {
				return err
			}
		}
	}
	return nil
}
Exemplo n.º 6
0
//cursorDown moves the cursor down one position. When reaching the bottom, windows the text
func (c *CUI) cursorDown(g *gocui.Gui, v *gocui.View) error {
	if v != nil {
		cx, cy := v.Cursor()
		if err := v.SetCursor(cx, cy+1); err != nil {
			ox, oy := v.Origin()
			if err := v.SetOrigin(ox, oy+1); err != nil {
				return err
			}
		}
	}
	return nil
}
Exemplo n.º 7
0
//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")
}
Exemplo n.º 8
0
//getCursorListPos returns the position of selection in the given view
func (c *CUI) getCursorListPos(g *gocui.Gui, v *gocui.View) (y int) {
	_, oy := v.Origin()
	_, cy := v.Cursor()
	y = oy + cy
	return
}