Doing some work
This commit is contained in:
80
app/app.go
80
app/app.go
@@ -22,13 +22,28 @@ THE SOFTWARE.
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.bullercodeworks.com/brian/expds/data"
|
||||
w "git.bullercodeworks.com/brian/tcell-widgets"
|
||||
h "git.bullercodeworks.com/brian/tcell-widgets/helpers"
|
||||
"github.com/gdamore/tcell"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
repo *data.Repo
|
||||
Name string
|
||||
h, w int
|
||||
|
||||
running bool
|
||||
tScreen tcell.Screen
|
||||
|
||||
screen AppScreen
|
||||
repo *data.Repo
|
||||
|
||||
AppLogs []data.AppLog
|
||||
|
||||
style tcell.Style
|
||||
}
|
||||
|
||||
@@ -44,10 +59,67 @@ func NewApp() *App {
|
||||
func (a *App) init() error {
|
||||
var err error
|
||||
a.repo, err = data.NewRepo()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error initializing repo: %w", err)
|
||||
}
|
||||
if a.tScreen, err = tcell.NewScreen(); err != nil {
|
||||
return fmt.Errorf("error creating screen: %w", err)
|
||||
}
|
||||
if err = a.tScreen.Init(); err != nil {
|
||||
return fmt.Errorf("error initializing screen: %w", err)
|
||||
}
|
||||
a.tScreen.SetStyle(a.style)
|
||||
a.tScreen.Clear()
|
||||
|
||||
a.SetScreen(&ScreenHome{})
|
||||
|
||||
go func() {
|
||||
var err error
|
||||
for err == nil {
|
||||
time.Sleep(time.Millisecond * 100)
|
||||
err = a.PostNowEvent()
|
||||
}
|
||||
}()
|
||||
return err
|
||||
}
|
||||
|
||||
func (a *App) Run(args []string) error {
|
||||
a.running = true
|
||||
for {
|
||||
if !a.running {
|
||||
return nil
|
||||
}
|
||||
if a.screen != nil {
|
||||
a.ClearScreen()
|
||||
a.screen.Draw()
|
||||
} else {
|
||||
a.DrawText(1, 1, "No screen loaded", tcell.StyleDefault)
|
||||
}
|
||||
|
||||
a.tScreen.Show()
|
||||
// Poll Events
|
||||
ev := a.tScreen.PollEvent()
|
||||
switch ev := ev.(type) {
|
||||
case *tcell.EventResize:
|
||||
a.tScreen.Sync()
|
||||
a.w, a.h = ev.Size()
|
||||
a.screen.HandleResize(ev)
|
||||
case *tcell.EventKey:
|
||||
if ev.Key() == tcell.KeyCtrlC {
|
||||
a.Stop()
|
||||
} else if ev.Key() == tcell.KeyCtrlJ {
|
||||
// Ctrl+J is the keypad 'Enter'
|
||||
ev = tcell.NewEventKey(tcell.KeyEnter, 0, 0)
|
||||
}
|
||||
if a.screen != nil && !a.screen.HandleKey(ev) {
|
||||
// Screen didn't handle the key
|
||||
}
|
||||
case *tcell.EventTime:
|
||||
if a.screen != nil {
|
||||
a.screen.HandleTime(ev)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -84,14 +156,14 @@ func (a *App) Cleanup() { a.tScreen.Fini() }
|
||||
func (a *App) GetRepo() *data.Repo { return a.repo }
|
||||
|
||||
// Draw a rune to the screen
|
||||
func (a *DhApp) DrawRune(x, y int, style tcell.Style, r rune) {
|
||||
func (a *App) DrawRune(x, y int, style tcell.Style, r rune) {
|
||||
a.tScreen.SetContent(x, y, r, nil, style)
|
||||
}
|
||||
|
||||
// Draw text to the screen
|
||||
func (a *DhApp) DrawText(x, y int, text string, style tcell.Style) {
|
||||
func (a *App) DrawText(x, y int, text string, style tcell.Style) {
|
||||
h.DrawText(x, y, text, style, a.tScreen)
|
||||
}
|
||||
|
||||
// Draw a widget to the screen
|
||||
func (a *DhApp) DrawWidget(w w.Widget) { w.Draw(a.tScreen) }
|
||||
func (a *App) DrawWidget(w w.Widget) { w.Draw(a.tScreen) }
|
||||
|
||||
Reference in New Issue
Block a user