gask/screen_about.go

96 lines
2.3 KiB
Go
Raw Normal View History

2019-02-15 17:15:26 +00:00
package main
import (
"fmt"
2019-02-15 17:15:26 +00:00
"time"
"github.com/br0xen/termbox-util"
termbox "github.com/nsf/termbox-go"
)
// AboutScreen holds all that's going on
type AboutScreen struct {
viewPort ViewPort
2019-02-15 17:15:26 +00:00
message string
messageTimeout time.Duration
messageTime time.Time
titleTemplate []string
commandsCol1 []Command
commandsCol2 []Command
}
type Command struct {
key string
description string
2019-02-15 17:15:26 +00:00
}
func (screen *AboutScreen) initialize(bundle Bundle) error {
screen.titleTemplate = []string{
" __ ",
" _________ _____| | __",
" / ___\\__ \\ / ___/ |/ /",
" / /_/ > __ \\_\\___ \\| < ",
" \\___ (____ /____ >__|_ \\",
"/_____/ \\/ \\/ \\/",
}
screen.commandsCol1 = []Command{
Command{"j,↓", "down"},
Command{"k,↑", "up"},
Command{"l,→", "open task"},
2019-02-22 23:29:23 +00:00
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"},
}
2019-02-15 17:15:26 +00:00
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)
2019-02-22 23:29:23 +00:00
exitTxt := "Press any key to return to tasks"
2019-02-15 17:15:26 +00:00
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++
}
}
}