Refactored UI code, began impl. of mainscreen

pull/17/head
マリウス 3 years ago
parent 5362c401d1
commit e3f63f5906
No known key found for this signature in database
GPG Key ID: 272ED814BF63261F

@ -210,9 +210,9 @@ require (
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf // indirect golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf // indirect
golang.org/x/image v0.0.0-20191206065243-da761ea9ff43 // indirect golang.org/x/image v0.0.0-20191206065243-da761ea9ff43 // indirect
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 // indirect golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 // indirect
golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 // indirect golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
golang.org/x/text v0.3.6 // indirect golang.org/x/text v0.3.7 // indirect
golang.org/x/tools v0.1.1 // indirect golang.org/x/tools v0.1.1 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/grpc v1.33.2 // indirect google.golang.org/grpc v1.33.2 // indirect

@ -1482,11 +1482,15 @@ golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q=
golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -1494,6 +1498,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

@ -1,23 +1,21 @@
package main package main
import ( import (
"context"
"embed" "embed"
"time"
"log" "log"
"os" "os"
"github.com/mrusme/superhighway84/database"
"github.com/mrusme/superhighway84/tui" "github.com/mrusme/superhighway84/tui"
"go.uber.org/zap"
) )
//go:embed superhighway84.jpeg //go:embed superhighway84.jpeg
var EMBEDFS embed.FS var EMBEDFS embed.FS
func main() { func main() {
ctx, cancel := context.WithCancel(context.Background()) // ctx, cancel := context.WithCancel(context.Background())
defer cancel() // defer cancel()
dbInit := false dbInit := false
dbInitValue := os.Getenv("SUPERHIGHWAY84_DB_INIT") dbInitValue := os.Getenv("SUPERHIGHWAY84_DB_INIT")
@ -35,28 +33,29 @@ func main() {
log.Panicln("SUPERHIGHWAY84_DB_CACHE missing!") log.Panicln("SUPERHIGHWAY84_DB_CACHE missing!")
} }
logger, err := zap.NewDevelopment() // logger, err := zap.NewDevelopment()
if err != nil { // if err != nil {
log.Panicln(err) // log.Panicln(err)
} // }
TUI := tui.Init(&EMBEDFS) TUI := tui.Init(&EMBEDFS)
db, err := database.NewDatabase(ctx, dbURI, dbCache, dbInit, logger) // db, err := database.NewDatabase(ctx, dbURI, dbCache, dbInit, logger)
if err != nil { // if err != nil {
log.Panicln(err) // log.Panicln(err)
} // }
defer db.Disconnect() // defer db.Disconnect()
db.Connect(func() { // db.Connect(func() {
//TUI.App.Stop() // //TUI.App.Stop()
}) // })
go func() {
time.Sleep(time.Second * 2)
TUI.SetView("mainscreen")
TUI.Refresh()
}()
TUI.Launch() TUI.Launch()
// db.Connect()
//
// var input string // var input string
// for { // for {
// fmt.Scanln(&input) // fmt.Scanln(&input)

@ -0,0 +1,60 @@
package tui
import (
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
type Mainscreen struct {
Canvas *tview.Grid
}
func(t *TUI) NewMainscreen() (*Mainscreen) {
mainscreen := new(Mainscreen)
newPrimitive := func(text string) tview.Primitive {
return tview.NewTextView().
SetTextAlign(tview.AlignCenter).
SetText(text)
}
groups := tview.NewList().
AddItem("List item 1", "Some explanatory text", 'a', nil).
AddItem("List item 2", "Some explanatory text", 'b', nil).
AddItem("List item 3", "Some explanatory text", 'c', nil).
AddItem("List item 4", "Some explanatory text", 'd', nil).
AddItem("Quit", "Press to exit", 'q', func() {
})
articles := tview.NewList().
SetWrapAround(true).
SetHighlightFullLine(true).
SetSelectedBackgroundColor(tcell.ColorTeal).
SetSecondaryTextColor(tcell.ColorGrey).
AddItem("List item 1", "Some explanatory text", ' ', nil).
AddItem("List item 2", "Some explanatory text", ' ', nil).
AddItem("List item 3", "Some explanatory text", ' ', nil).
AddItem("List item 4", "Some explanatory text", ' ', nil)
mainscreen.Canvas = tview.NewGrid().
SetRows(3, 0, 3).
SetColumns(30, 0).
SetBorders(true).
AddItem(newPrimitive("Header"), 0, 0, 1, 2, 0, 0, false).
AddItem(newPrimitive("Footer"), 2, 0, 1, 2, 0, 0, false)
mainscreen.Canvas.AddItem(groups, 1, 0, 1, 1, 0, 0, false).
AddItem(articles, 1, 1, 1, 1, 0, 0, false)
return mainscreen
}
func (mainscreen *Mainscreen) GetCanvas() (tview.Primitive) {
return mainscreen.Canvas
}
func(mainscreen *Mainscreen) Refresh() {
}

@ -12,7 +12,6 @@ import (
type Splashscreen struct { type Splashscreen struct {
Canvas *tview.TextView Canvas *tview.TextView
View
ImageBytes []byte ImageBytes []byte
} }
@ -36,9 +35,8 @@ func (splashscreen *Splashscreen) GetCanvas() (tview.Primitive) {
return splashscreen.Canvas return splashscreen.Canvas
} }
func(splashscreen *Splashscreen) Draw() { func(splashscreen *Splashscreen) Refresh() {
canvas := splashscreen.Canvas _, _, w, h := splashscreen.Canvas.Box.GetRect()
_, _, w, h := canvas.Box.GetRect()
// TODO: // TODO:
// (h * 2) is a workaround for what looks like a bug in // (h * 2) is a workaround for what looks like a bug in
@ -48,7 +46,7 @@ func(splashscreen *Splashscreen) Draw() {
if err != nil { if err != nil {
return return
} }
canvas.Clear() // splashscreen.Canvas.Clear()
fmt.Fprint(canvas, tview.TranslateANSI(logoImage.RenderExt(false, false))) fmt.Fprint(splashscreen.Canvas, tview.TranslateANSI(logoImage.RenderExt(false, false)))
} }

@ -17,7 +17,7 @@ type TUI struct {
type View interface { type View interface {
GetCanvas() (tview.Primitive) GetCanvas() (tview.Primitive)
Draw() Refresh()
} }
func Init(embedfs *embed.FS) (*TUI) { func Init(embedfs *embed.FS) (*TUI) {
@ -46,6 +46,7 @@ func Init(embedfs *embed.FS) (*TUI) {
t.Views = make(map[string]View) t.Views = make(map[string]View)
t.Views["splashscreen"] = t.NewSplashscreen(&logoBytes) t.Views["splashscreen"] = t.NewSplashscreen(&logoBytes)
t.Views["mainscreen"] = t.NewMainscreen()
t.initInput() t.initInput()
return t return t
@ -55,7 +56,7 @@ func (t *TUI) initInput() {
t.App.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { t.App.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Key() { switch event.Key() {
case tcell.KeyCtrlR: case tcell.KeyCtrlR:
t.Draw() t.Refresh()
return nil return nil
case tcell.KeyCtrlQ: case tcell.KeyCtrlQ:
t.App.Stop() t.App.Stop()
@ -66,11 +67,10 @@ func (t *TUI) initInput() {
} }
func (t *TUI) Launch() { func (t *TUI) Launch() {
t.SetView("splashscreen")
go func() { go func() {
time.Sleep(200 * time.Millisecond) time.Sleep(time.Millisecond * 200)
t.Draw() t.SetView("splashscreen")
t.Refresh()
}() }()
if err := t.App.Run(); err != nil { if err := t.App.Run(); err != nil {
@ -79,12 +79,13 @@ func (t *TUI) Launch() {
} }
func(t *TUI) SetView(name string) { func(t *TUI) SetView(name string) {
t.App.SetRoot(t.Views[name].GetCanvas(), true)
t.ActiveView = name t.ActiveView = name
t.App.SetRoot(t.Views[t.ActiveView].GetCanvas(), true)
t.App.Draw()
} }
func (t *TUI) Draw() { func (t *TUI) Refresh() {
t.Views[t.ActiveView].Draw() t.Views[t.ActiveView].Refresh()
t.App.Draw() t.App.Draw()
} }

Loading…
Cancel
Save