parent
0f40569150
commit
6ad1fb38b9
Binary file not shown.
@ -0,0 +1,37 @@ |
||||
// +build !windows
|
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"os" |
||||
"syscall" |
||||
|
||||
"github.com/nsf/termbox-go" |
||||
) |
||||
|
||||
func mainLoop(style Style) { |
||||
screens := createScreens() |
||||
displayScreen := screens[MainScreenIndex] |
||||
layoutAndDrawScreen(displayScreen, style) |
||||
for { |
||||
event := termbox.PollEvent() |
||||
if event.Type == termbox.EventKey { |
||||
if event.Key == termbox.KeyCtrlZ { |
||||
process, _ := os.FindProcess(os.Getpid()) |
||||
termbox.Close() |
||||
process.Signal(syscall.SIGSTOP) |
||||
termbox.Init() |
||||
} |
||||
newScreenIndex := displayScreen.handleKeyEvent(event) |
||||
if newScreenIndex < len(screens) { |
||||
displayScreen = screens[newScreenIndex] |
||||
layoutAndDrawScreen(displayScreen, style) |
||||
} else { |
||||
break |
||||
} |
||||
} |
||||
if event.Type == termbox.EventResize { |
||||
layoutAndDrawScreen(displayScreen, style) |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,20 @@ |
||||
package main |
||||
|
||||
import termbox "github.com/nsf/termbox-go" |
||||
|
||||
type Screen interface { |
||||
handleKeyEvent(event termbox.Event) int |
||||
performLayout() |
||||
drawScreen(style Style) |
||||
} |
||||
|
||||
func drawBackground(bg termbox.Attribute) { |
||||
termbox.Clear(0, bg) |
||||
} |
||||
|
||||
func layoutAndDrawScreen(screen Screen, style Style) { |
||||
screen.performLayout() |
||||
drawBackground(style.defaultBg) |
||||
screen.drawScreen(style) |
||||
termbox.Flush() |
||||
} |
@ -0,0 +1,142 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
|
||||
"github.com/br0xen/termbox-util" |
||||
"github.com/nsf/termbox-go" |
||||
) |
||||
|
||||
/* |
||||
Command is a struct for associating descriptions to keys |
||||
*/ |
||||
type Command struct { |
||||
key string |
||||
description string |
||||
} |
||||
|
||||
// AboutScreen is just a basic 'int' type that we can extend to make this screen
|
||||
type AboutScreen struct { |
||||
titleArt []string |
||||
commands [][]Command |
||||
} |
||||
|
||||
func CreateAboutScreen() *AboutScreen { |
||||
var err error |
||||
s := new(AboutScreen) |
||||
s.titleArt = []string{ |
||||
" __ _ ", |
||||
" ___ ____ / /_(_)_ _ ___ ", |
||||
" / _ `/ _ \\/ __/ / ' \\/ -_)", |
||||
" \\_, /\\___/\\__/_/_/_/_/\\__/ ", |
||||
"/___/ ", |
||||
} |
||||
s.commands = append(s.commands, []Command{ |
||||
{"h,←", "close parent"}, |
||||
{"j,↓", "down"}, |
||||
{"k,↑", "up"}, |
||||
{"l,→", "open item"}, |
||||
|
||||
{"g", "goto top"}, |
||||
{"G", "goto bottom"}, |
||||
{"ctrl+f", "jump down"}, |
||||
{"ctrl+b", "jump up"}, |
||||
}) |
||||
s.commands = append(s.commands, []Command{ |
||||
{"p,P", "create pair/at parent"}, |
||||
{"b,B", "create bucket/at parent"}, |
||||
{"e", "edit value of pair"}, |
||||
{"r", "rename pair/bucket"}, |
||||
{"D", "delete item"}, |
||||
{"x,X", "export as string/json to file"}, |
||||
{"?", "this screen"}, |
||||
{"q", "quit program"}, |
||||
}) |
||||
} |
||||
|
||||
func (screen *AboutScreen) drawCommandsAtPoint(x int, y int, style Style) { |
||||
xPos, yPos := x, y |
||||
for _, cmds := range screen.commands { |
||||
for index, cmd := range commands { |
||||
termboxUtil.DrawStringAtPoint(fmt.Sprintf("%6s", cmd.key), xPos, yPos, style.defaultFg, style.defaultBg) |
||||
termboxUtil.DrawStringAtPoint(cmd.description, xPos+8, yPos, style.defaultFg, style.defaultBg) |
||||
yPos++ |
||||
if index > 2 && index%2 == 1 { |
||||
yPos++ |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
func (screen *AboutScreen) handleKeyEvent(event termbox.Event) int { |
||||
return MainScreenIndex |
||||
} |
||||
|
||||
func (screen *AboutScreen) performLayout() {} |
||||
|
||||
func (screen *AboutScreen) drawScreen(style Style) { |
||||
defaultFg := style.defaultFg |
||||
defaultBg := style.defaultBg |
||||
width, height := termbox.Size() |
||||
|
||||
firstLine := screen.titleArt[0] |
||||
startX := (width - len(firstLine)) / 2 |
||||
startY := ((height - 2*len(template)) / 2) - 2 |
||||
xPos := startX |
||||
yPos := startY |
||||
if height <= 20 { |
||||
title := AppName |
||||
startY = 0 |
||||
yPos = 0 |
||||
termboxUtil.DrawStringAtPoint(title, (width-len(title))/2, startY, style.titleFg, style.titleBg) |
||||
} else { |
||||
if height < 25 { |
||||
startY = 0 |
||||
yPos = 0 |
||||
} |
||||
for _, line := range template { |
||||
xPos = startX |
||||
for _, runeValue := range line { |
||||
bg := defaultBg |
||||
displayRune := ' ' |
||||
if runeValue != ' ' { |
||||
displayRune = runeValue |
||||
termbox.SetCell(xPos, yPos, displayRune, defaultFg, bg) |
||||
} |
||||
xPos++ |
||||
} |
||||
yPos++ |
||||
} |
||||
} |
||||
|
||||
commands1 := [...]Command{ |
||||
{"h,←", "close parent"}, |
||||
{"j,↓", "down"}, |
||||
{"k,↑", "up"}, |
||||
{"l,→", "open item"}, |
||||
|
||||
{"g", "goto top"}, |
||||
{"G", "goto bottom"}, |
||||
{"ctrl+f", "jump down"}, |
||||
{"ctrl+b", "jump up"}, |
||||
} |
||||
|
||||
commands2 := [...]Command{ |
||||
{"p,P", "create pair/at parent"}, |
||||
{"b,B", "create bucket/at parent"}, |
||||
{"e", "edit value of pair"}, |
||||
{"r", "rename pair/bucket"}, |
||||
{"D", "delete item"}, |
||||
{"x,X", "export as string/json to file"}, |
||||
|
||||
{"?", "this screen"}, |
||||
{"q", "quit program"}, |
||||
} |
||||
xPos = startX // + 20
|
||||
yPos++ |
||||
|
||||
drawCommandsAtPoint(commands1[:], xPos, yPos+1, style) |
||||
drawCommandsAtPoint(commands2[:], xPos+20, yPos+1, style) |
||||
exitTxt := "Press any key to return to browser" |
||||
termboxUtil.DrawStringAtPoint(exitTxt, (width-len(exitTxt))/2, height-1, style.titleFg, style.titleBg) |
||||
} |
@ -0,0 +1,40 @@ |
||||
package main |
||||
|
||||
import ( |
||||
termbox "github.com/nsf/termbox-go" |
||||
"gogs.bullercodeworks.com/brian/gotime" |
||||
"gogs.bullercodeworks.com/brian/user-config" |
||||
) |
||||
|
||||
type MainScreen struct { |
||||
config *userConfig.Config |
||||
got *gotime.GoTime |
||||
} |
||||
|
||||
func CreateMainScreen() *MainScreen { |
||||
var err error |
||||
m := new(MainScreen) |
||||
|
||||
m.config, err = userConfig.NewConfig(AppName) |
||||
|
||||
if m.config.Get("dir") != "" { |
||||
m.got = gotime.Create(dir) |
||||
} |
||||
|
||||
return *m |
||||
} |
||||
|
||||
func (screen *MainScreen) handleKeyEvent(event termbox.Event) int { |
||||
if event.Ch == '?' { |
||||
return AboutScreenIndex |
||||
} |
||||
return MainScreenIndex |
||||
} |
||||
|
||||
func (screen *MainScreen) performLayout() { |
||||
|
||||
} |
||||
|
||||
func (screen *MainScreen) drawScreen(style Style) { |
||||
|
||||
} |
@ -0,0 +1,27 @@ |
||||
package main |
||||
|
||||
import termbox "github.com/nsf/termbox-go" |
||||
|
||||
/* |
||||
Style Defines the colors for the terminal display, basically |
||||
*/ |
||||
type Style struct { |
||||
defaultBg termbox.Attribute |
||||
defaultFg termbox.Attribute |
||||
titleFg termbox.Attribute |
||||
titleBg termbox.Attribute |
||||
cursorFg termbox.Attribute |
||||
cursorBg termbox.Attribute |
||||
} |
||||
|
||||
func defaultStyle() Style { |
||||
var style Style |
||||
style.defaultBg = termbox.ColorBlack |
||||
style.defaultFg = termbox.ColorWhite |
||||
style.titleFg = termbox.ColorBlack |
||||
style.titleBg = termbox.ColorGreen |
||||
style.cursorFg = termbox.ColorBlack |
||||
style.cursorBg = termbox.ColorGreen |
||||
|
||||
return style |
||||
} |
Loading…
Reference in new issue