63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
termbox "github.com/nsf/termbox-go"
|
||
|
)
|
||
|
|
||
|
type Screen interface {
|
||
|
handleKeyEvent(termbox.Event) int
|
||
|
initialize(Bundle) error
|
||
|
drawScreen()
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
ScreenMain = iota
|
||
|
ScreenTask
|
||
|
ScreenAbout
|
||
|
ScreenExit
|
||
|
|
||
|
DefaultBg = termbox.ColorBlack
|
||
|
DefaultFg = termbox.ColorWhite
|
||
|
TitleFg = termbox.ColorWhite
|
||
|
TitleBg = termbox.ColorBlue
|
||
|
CursorFg = termbox.ColorBlack
|
||
|
CursorBg = termbox.ColorGreen
|
||
|
)
|
||
|
|
||
|
func (a *AppState) BuildScreens() {
|
||
|
mainScreen := MainScreen{
|
||
|
viewPort: &ViewPort{},
|
||
|
}
|
||
|
aboutScreen := AboutScreen{}
|
||
|
taskScreen := TaskScreen{
|
||
|
viewPort: &ViewPort{},
|
||
|
}
|
||
|
a.screens = append(a.screens, &mainScreen)
|
||
|
a.screens = append(a.screens, &taskScreen)
|
||
|
a.screens = append(a.screens, &aboutScreen)
|
||
|
}
|
||
|
|
||
|
func (a *AppState) drawBackground(bg termbox.Attribute) {
|
||
|
termbox.Clear(0, bg)
|
||
|
}
|
||
|
|
||
|
func (a *AppState) layoutAndDrawScreen(s Screen) {
|
||
|
a.drawBackground(DefaultBg)
|
||
|
s.drawScreen()
|
||
|
termbox.Flush()
|
||
|
}
|
||
|
|
||
|
// ViewPort helps keep track of what's being displayed on the screen
|
||
|
type ViewPort struct {
|
||
|
bytesPerRow int
|
||
|
numberOfRows int
|
||
|
firstRow int
|
||
|
cursor int
|
||
|
}
|
||
|
|
||
|
func readUserInput(e chan termbox.Event) {
|
||
|
for {
|
||
|
e <- termbox.PollEvent()
|
||
|
}
|
||
|
}
|