package main import ( "fmt" "time" "github.com/br0xen/termbox-util" termbox "github.com/nsf/termbox-go" ) // AboutScreen holds all that's going on type AboutScreen struct { viewPort ViewPort message string messageTimeout time.Duration messageTime time.Time titleTemplate []string commandsCol1 []Command commandsCol2 []Command } type Command struct { key string description string } func (screen *AboutScreen) initialize(bundle Bundle) error { screen.titleTemplate = []string{ " .__ ", " ____ |__| _____ ____ ", " / ___\\| |/ \\_/ __ \\ ", " / /_/ > | Y Y \\ ___/ ", " \\___ /|__|__|_| /\\___ >", "/_____/ \\/ \\/ ", } screen.commandsCol1 = []Command{ Command{"j,↓", "down"}, Command{"k,↑", "up"}, Command{"l,→", "open task"}, Command{"------", "---------"}, Command{"g", "goto top"}, Command{"G", "goto bottom"}, Command{"ctrl+f", "jump down"}, Command{"ctrl+b", "jump up"}, } screen.commandsCol2 = []Command{ Command{"D", "archive timer to done.txt"}, Command{"------", "---------"}, Command{"?", "this screen"}, Command{"q", "quit program"}, } return nil } func (screen *AboutScreen) handleKeyEvent(event termbox.Event) int { return ScreenMain } 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 _, cmd := range commands { termboxUtil.DrawStringAtPoint(fmt.Sprintf("%6s", cmd.key), xPos, yPos, DefaultFg, DefaultBg) termboxUtil.DrawStringAtPoint(cmd.description, xPos+8, yPos, DefaultFg, DefaultBg) yPos++ } }