Refactored UI code, began impl. of mainscreen

pull/17/head
マリウス 2 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/image v0.0.0-20191206065243-da761ea9ff43 // indirect
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 // indirect
golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 // indirect
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d // indirect
golang.org/x/text v0.3.6 // indirect
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/tools v0.1.1 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // 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-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-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-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-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-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.3.0/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.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
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-20181108054448-85acf8d2951c/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
import (
"context"
"embed"
"time"
"log"
"os"
"github.com/mrusme/superhighway84/database"
"github.com/mrusme/superhighway84/tui"
"go.uber.org/zap"
)
//go:embed superhighway84.jpeg
var EMBEDFS embed.FS
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// ctx, cancel := context.WithCancel(context.Background())
// defer cancel()
dbInit := false
dbInitValue := os.Getenv("SUPERHIGHWAY84_DB_INIT")
@ -35,28 +33,29 @@ func main() {
log.Panicln("SUPERHIGHWAY84_DB_CACHE missing!")
}
logger, err := zap.NewDevelopment()
if err != nil {
log.Panicln(err)
}
// logger, err := zap.NewDevelopment()
// if err != nil {
// log.Panicln(err)
// }
TUI := tui.Init(&EMBEDFS)
db, err := database.NewDatabase(ctx, dbURI, dbCache, dbInit, logger)
if err != nil {
log.Panicln(err)
}
defer db.Disconnect()
db.Connect(func() {
//TUI.App.Stop()
})
// db, err := database.NewDatabase(ctx, dbURI, dbCache, dbInit, logger)
// if err != nil {
// log.Panicln(err)
// }
// defer db.Disconnect()
// db.Connect(func() {
// //TUI.App.Stop()
// })
go func() {
time.Sleep(time.Second * 2)
TUI.SetView("mainscreen")
TUI.Refresh()
}()
TUI.Launch()
// db.Connect()
//
// var input string
// for {
// 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 {
Canvas *tview.TextView
View
ImageBytes []byte
}
@ -36,9 +35,8 @@ func (splashscreen *Splashscreen) GetCanvas() (tview.Primitive) {
return splashscreen.Canvas
}
func(splashscreen *Splashscreen) Draw() {
canvas := splashscreen.Canvas
_, _, w, h := canvas.Box.GetRect()
func(splashscreen *Splashscreen) Refresh() {
_, _, w, h := splashscreen.Canvas.Box.GetRect()
// TODO:
// (h * 2) is a workaround for what looks like a bug in
@ -48,7 +46,7 @@ func(splashscreen *Splashscreen) Draw() {
if err != nil {
return
}
canvas.Clear()
fmt.Fprint(canvas, tview.TranslateANSI(logoImage.RenderExt(false, false)))
// splashscreen.Canvas.Clear()
fmt.Fprint(splashscreen.Canvas, tview.TranslateANSI(logoImage.RenderExt(false, false)))
}

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

Loading…
Cancel
Save