Doing some work

This commit is contained in:
2026-01-22 12:21:57 -06:00
parent 623bc860d4
commit a216f1ca5b
15 changed files with 1048 additions and 71 deletions

View File

@@ -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) }