package views import ( "github.com/jroimartin/gocui" "github.com/pkg/errors" "github.com/edouardparis/lntop/config" "github.com/edouardparis/lntop/ui/cursor" "github.com/edouardparis/lntop/ui/models" ) type View interface { Set(*gocui.Gui, int, int, int, int) error Delete(*gocui.Gui) error Wrap(*gocui.View) View Name() string cursor.View } type Views struct { Main View Help *Help Header *Header Menu *Menu Summary *Summary Channels *Channels Channel *Channel Transactions *Transactions Transaction *Transaction Routing *Routing } func (v Views) Get(vi *gocui.View) View { if vi == nil { return nil } switch vi.Name() { case CHANNELS: return v.Channels.Wrap(vi) case HELP: return v.Help.Wrap(vi) case MENU: return v.Menu.Wrap(vi) case CHANNEL: return v.Channel.Wrap(vi) case TRANSACTIONS: return v.Transactions.Wrap(vi) case TRANSACTION: return v.Transaction.Wrap(vi) case ROUTING: return v.Routing.Wrap(vi) default: return nil } } func (v *Views) Layout(g *gocui.Gui, maxX, maxY int) error { err := v.Header.Set(g, 0, -1, maxX, 1) if err != nil { return err } err = v.Summary.Set(g, 0, 1, maxX, 6) if err != nil { return err } current := g.CurrentView() if current != nil { switch current.Name() { case v.Help.Name(): return nil case v.Menu.Name(): err = v.Menu.Set(g, 0, 6, 10, maxY) if err != nil { return err } err = v.Main.Set(g, 11, 6, maxX-1, maxY) if err != nil { return err } return nil } } err = v.Main.Set(g, 0, 6, maxX-1, maxY) if err != nil && err != gocui.ErrUnknownView { return err } _, err = g.SetCurrentView(v.Main.Name()) if err != nil { return errors.WithStack(err) } return nil } func New(cfg config.Views, m *models.Models) *Views { main := NewChannels(cfg.Channels, m.Channels) return &Views{ Header: NewHeader(m.Info), Help: NewHelp(), Menu: NewMenu(), Summary: NewSummary(m.Info, m.ChannelsBalance, m.WalletBalance, m.Channels), Channels: main, Channel: NewChannel(m.Channels), Transactions: NewTransactions(cfg.Transactions, m.Transactions), Transaction: NewTransaction(m.Transactions), Routing: NewRouting(cfg.Routing, m.RoutingLog, m.Channels), Main: main, } }