diff --git a/app/screen_home.go b/app/screen_home.go index e8713e3..ae6310c 100644 --- a/app/screen_home.go +++ b/app/screen_home.go @@ -43,6 +43,8 @@ type ScreenHome struct { menuLayout *w.TopMenuLayout menu *w.Menu + openPdsEntry *w.Field + layout *w.LinearLayout columns *w.LinearLayout @@ -55,15 +57,12 @@ type ScreenHome struct { expandedEntries map[string]interface{} recordIdsToNSIDs map[string]syntax.NSID - alert *w.Alert - alertLayout *w.LinearLayout - cli *w.Cli - isLoading bool - loading *w.Spinner - loadingFrame *w.Text - pdsStatus *w.Text + doOpen bool + isLoading bool + loading *w.Spinner + pdsStatus *w.Text cursor int } @@ -75,11 +74,14 @@ func (s *ScreenHome) Init(a *App) { s.expandedEntries = make(map[string]interface{}) s.recordIdsToNSIDs = make(map[string]syntax.NSID) - s.isLoading = true + s.openPdsEntry = w.NewField("home.openpds.field", s.style) + s.openPdsEntry.SetLabel("ID") + s.openPdsEntry.SetActive(true) + s.openPdsEntry.SetPos(w.Coord{X: 2, Y: 1}) + s.openPdsEntry.SetSize(w.Coord{X: 20, Y: 1}) + s.doOpen = true - s.loadingFrame = w.NewText("home.loadingframe", s.style) - s.loadingFrame.SetText("┤ ├") - s.loadingFrame.SetPos(w.Coord{X: 1, Y: 1}) + s.isLoading = false s.pdsStatus = w.NewText("home.pdsstatus", s.style.Foreground(tcell.ColorRed)) s.pdsStatus.SetText("𐄂") s.pdsStatus.SetPos(w.Coord{X: 2, Y: 1}) @@ -92,11 +94,7 @@ func (s *ScreenHome) Init(a *App) { s.cli = w.NewCli("home.cli", s.style) s.initCli() - - s.alert = w.NewAlert("home.alert", s.style) - s.alert.SetVisible(false) - s.alertLayout = w.NewLinearLayout("home.alertlayout", s.style) - s.alertLayout.Add(s.alert) + s.cli.SetVisible(false) s.layout = w.NewLinearLayout("home.layout", s.style) @@ -107,7 +105,7 @@ func (s *ScreenHome) Init(a *App) { s.pdsListing.SetBorder( []rune{'─', '┬', '│', '┴', '─', '└', '│', '┌', '├', '─', '┤', '┬', '│', '┴', '┼'}, ) - s.pdsListing.SetTitle("─── No PDS Loaded") + s.pdsListing.SetTitle(" ") s.pdsListing.SetOnSelect(s.selectPdsListingEntry) s.pdsListing.SetOnChange(s.updateJsonView) s.pdsListing.SetVimMode(viper.GetBool(data.KeyVimMode)) @@ -132,13 +130,21 @@ func (s *ScreenHome) HandleResize(ev *tcell.EventResize) { } func (s *ScreenHome) HandleKey(ev *tcell.EventKey) bool { - if s.alert.Visible() { - return s.alert.HandleKey(ev) - } if ev.Key() == tcell.KeyF12 { s.toggleCli() return true } + if s.doOpen { + if ev.Key() == tcell.KeyCtrlU { + s.openPdsEntry.SetValue("") + return true + } + + if ev.Key() == tcell.KeyEnter { + return s.cliGetPds("getpds", s.openPdsEntry.Value()) + } + return s.openPdsEntry.HandleKey(ev) + } return s.menuLayout.HandleKey(ev) } @@ -147,12 +153,19 @@ func (s *ScreenHome) HandleTime(ev *tcell.EventTime) { s.loading.HandleTime(ev) } func (s *ScreenHome) Draw() { + if s.doOpen { + s.menuLayout.SetStyle(s.style.Foreground(tcell.ColorGray)) + } + s.menuLayout.SetStyle(s.style) s.a.DrawWidget(s.menuLayout) + if s.doOpen { + s.a.DrawWidget(s.openPdsEntry) + } // These are outside of the menuLayout - //s.a.DrawWidget(s.loadingFrame) - //s.a.DrawWidget(s.loading) - //s.a.DrawWidget(s.pdsStatus) + if s.isLoading { + s.a.DrawWidget(s.loading) + } } func (s *ScreenHome) Exit() error { return nil } func (s *ScreenHome) Log(t string, a ...any) { @@ -168,7 +181,13 @@ func (s *ScreenHome) initMenu() { } s.menuLayout.AddMenuItems( s.menuLayout.CreateMenuItem("file", "File", nil, 'f', + s.menuLayout.CreateMenuItem("file.openpds", "Open PDS", func() bool { + s.menuLayout.ToggleMenu() + s.doOpen = true + return true + }, 'o'), s.menuLayout.CreateMenuItem("file.reloadpds", "Reload PDS", func() bool { + s.menuLayout.ToggleMenu() if s.activePds == nil { return false } @@ -181,6 +200,7 @@ func (s *ScreenHome) initMenu() { ), s.menuLayout.CreateMenuItem("settings", "Settings", nil, 's', s.menuLayout.CreateMenuItem("settings.vimmode", vimText, func() bool { + s.menuLayout.ToggleMenu() viper.Set(data.KeyVimMode, !viper.GetBool(data.KeyVimMode)) viper.WriteConfig() s.update() @@ -190,26 +210,12 @@ func (s *ScreenHome) initMenu() { ) } -func (s *ScreenHome) setPdsStatusLoading() { - s.loading.SetVisible(true) - s.pdsStatus.SetVisible(false) - s.pdsStatus.SetStyle(s.style.Foreground(tcell.ColorLime)) - s.pdsStatus.SetText(" ") -} -func (s *ScreenHome) setPdsStatusGood() { - s.loading.SetVisible(false) - s.pdsStatus.SetVisible(true) - s.pdsStatus.SetStyle(s.style.Foreground(tcell.ColorLime)) - s.pdsStatus.SetText("✔") -} -func (s *ScreenHome) setPdsStatusBad() { - s.loading.SetVisible(false) - s.pdsStatus.SetVisible(true) - s.pdsStatus.SetStyle(s.style.Foreground(tcell.ColorRed)) - s.pdsStatus.SetText("𐄂") -} - func (s *ScreenHome) update() { + if s.doOpen { + s.menuLayout.SetWidget(s.openPdsEntry) + } else { + s.menuLayout.SetWidget(s.layout) + } s.pdsListing.SetVimMode(viper.GetBool(data.KeyVimMode)) vimMI := s.menuLayout.FindItem("settings.vimmode") var vimText = "Enable Vim Mode" @@ -265,6 +271,7 @@ func (s *ScreenHome) cliGetPds(args ...string) bool { s.cli.Log(err.Error()) s.isLoading = false } + s.doOpen = false s.cli.Log("Retrieved: %s (%s)", pds.AtId, pds.Did) s.activePds = pds s.expandedEntries = make(map[string]interface{}) diff --git a/go.mod b/go.mod index 073c431..20d1c27 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module git.bullercodeworks.com/brian/expds go 1.25.1 require ( - git.bullercodeworks.com/brian/tcell-widgets v0.2.1 + git.bullercodeworks.com/brian/tcell-widgets v0.2.3 github.com/bluesky-social/indigo v0.0.0-20260120225912-12d69fa4d209 github.com/gdamore/tcell v1.4.1 github.com/ipfs/go-cid v0.4.1 diff --git a/go.sum b/go.sum index 0de5a53..0568f0c 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,10 @@ git.bullercodeworks.com/brian/tcell-widgets v0.2.0 h1:f6ZYHdz/lZsIHf770dviuRenWA git.bullercodeworks.com/brian/tcell-widgets v0.2.0/go.mod h1:3TlKbuGjY8nrKL5Qcp28h+KnEsXBl3iCwACTy79bdPg= git.bullercodeworks.com/brian/tcell-widgets v0.2.1 h1:f7rvveTXf2U3XdTbL/1h3lSPt3NnKa7dCgzXYeMX/Go= git.bullercodeworks.com/brian/tcell-widgets v0.2.1/go.mod h1:3TlKbuGjY8nrKL5Qcp28h+KnEsXBl3iCwACTy79bdPg= +git.bullercodeworks.com/brian/tcell-widgets v0.2.2 h1:DcZYyGMv5U/TGSAj8CpxfrYufPa2SPYsncd7Fnl8EGg= +git.bullercodeworks.com/brian/tcell-widgets v0.2.2/go.mod h1:3TlKbuGjY8nrKL5Qcp28h+KnEsXBl3iCwACTy79bdPg= +git.bullercodeworks.com/brian/tcell-widgets v0.2.3 h1:/57GmrSDru27lhkm13q/sh2xLryayvQcp7MrSpixIKo= +git.bullercodeworks.com/brian/tcell-widgets v0.2.3/go.mod h1:3TlKbuGjY8nrKL5Qcp28h+KnEsXBl3iCwACTy79bdPg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=