package main import ( "fmt" "time" "github.com/br0xen/termbox-screen" "github.com/br0xen/termbox-util" termbox "github.com/nsf/termbox-go" ) const AboutScreenId = 2 // AboutScreen holds all that's going on type AboutScreen struct { message string messageTimeout time.Duration messageTime time.Time titleTemplate []string commandsCol1 []Command commandsCol2 []Command } type Command struct { key string description string } func (screen *AboutScreen) Id() int { return AboutScreenId } func (screen *AboutScreen) Initialize(bundle termboxScreen.Bundle) error { screen.titleTemplate = []string{ " __ ", " _________ _____| | __", " / ___\\__ \\ / ___/ |/ /", " / /_/ > __ \\_\\___ \\| < ", " \\___ (____ /____ >__|_ \\", "/_____/ \\/ \\/ \\/", } screen.commandsCol1 = []Command{ Command{"j,↓", "down"}, Command{"k,↑", "up"}, Command{"l,→", "open task"}, Command{"[space]", "toggle task complete"}, Command{"g", "goto top"}, Command{"G", "goto bottom"}, Command{"ctrl+f", "jump down"}, Command{"ctrl+b", "jump up"}, } screen.commandsCol2 = []Command{ Command{"D", "move task to done.txt"}, Command{"?", "this screen"}, Command{"q", "quit program"}, } return nil } func (screen *AboutScreen) ResizeScreen() { screen.Initialize(nil) } func (screen *AboutScreen) HandleKeyEvent(event termbox.Event) int { return MainScreenId } func (screen *AboutScreen) DrawScreen() { width, height := termbox.Size() xPos := (width - len(screen.titleTemplate[0])) / 2 yPos := 1 for _, line := range screen.titleTemplate { termboxUtil.DrawStringAtPoint(line, xPos, yPos, DefaultFg, DefaultBg) yPos++ } numCols := 2 if width < 80 { numCols = 1 } col1XPos := (width - (width * 3 / 4)) col2XPos := (width - (width * 2 / 4)) if numCols == 1 { col2XPos = col1XPos } screen.drawCommandsAtPoint(screen.commandsCol1, col1XPos, yPos) screen.drawCommandsAtPoint(screen.commandsCol2, col2XPos, yPos) exitTxt := "Press any key to return to tasks" termboxUtil.DrawStringAtPoint(exitTxt, (width-len(exitTxt))/2, height-1, TitleFg, TitleBg) } func (screen *AboutScreen) drawCommandsAtPoint(commands []Command, x, y int) { xPos, yPos := x, y for index, cmd := range commands { termboxUtil.DrawStringAtPoint(fmt.Sprintf("%6s", cmd.key), xPos, yPos, DefaultFg, DefaultBg) termboxUtil.DrawStringAtPoint(cmd.description, xPos+8, yPos, DefaultFg, DefaultBg) yPos++ if index > 2 && index%2 == 1 { yPos++ } } }