Changed package name from github.com/lmika/audax to github.com/lmika/dynamo-browse
77 lines
2.3 KiB
Go
77 lines
2.3 KiB
Go
package colselector
|
|
|
|
import (
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/controllers"
|
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/ui/keybindings"
|
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/ui/teamodels/layout"
|
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/ui/teamodels/utils"
|
|
)
|
|
|
|
const (
|
|
overlayWidth = 50
|
|
overlayHeight = 25
|
|
)
|
|
|
|
type Model struct {
|
|
columnsController *controllers.ColumnsController
|
|
subModel tea.Model
|
|
colListModel *colListModel
|
|
compositor *layout.Compositor
|
|
w, h int
|
|
}
|
|
|
|
func New(submodel tea.Model, keyBinding *keybindings.KeyBindings, columnsController *controllers.ColumnsController) *Model {
|
|
colListModel := newColListModel(keyBinding, columnsController)
|
|
|
|
compositor := layout.NewCompositor(submodel)
|
|
|
|
return &Model{
|
|
columnsController: columnsController,
|
|
subModel: submodel,
|
|
compositor: compositor,
|
|
colListModel: colListModel,
|
|
}
|
|
}
|
|
|
|
func (m *Model) Init() tea.Cmd {
|
|
return m.subModel.Init()
|
|
}
|
|
|
|
func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
var cc utils.CmdCollector
|
|
switch msg := msg.(type) {
|
|
case controllers.ShowColumnOverlay:
|
|
m.colListModel.setColumnsFromModel(m.columnsController.Columns())
|
|
m.compositor.SetOverlay(m.colListModel, m.w/2-overlayWidth/2, m.h/2-overlayHeight/2, overlayWidth, overlayHeight)
|
|
case controllers.HideColumnOverlay:
|
|
m.compositor.ClearOverlay()
|
|
case controllers.ColumnsUpdated:
|
|
m.colListModel.refreshTable()
|
|
m.subModel = cc.Collect(m.subModel.Update(msg)).(tea.Model)
|
|
case controllers.SetSelectedColumnInColSelector:
|
|
m.compositor = cc.Collect(m.compositor.Update(msg)).(*layout.Compositor)
|
|
case tea.KeyMsg:
|
|
m.compositor = cc.Collect(m.compositor.Update(msg)).(*layout.Compositor)
|
|
default:
|
|
m.subModel = cc.Collect(m.subModel.Update(msg)).(tea.Model)
|
|
}
|
|
return m, cc.Cmd()
|
|
}
|
|
|
|
func (m *Model) View() string {
|
|
return m.compositor.View()
|
|
}
|
|
|
|
func (m *Model) Resize(w, h int) layout.ResizingModel {
|
|
m.w, m.h = w, h
|
|
m.compositor.MoveOverlay(m.w/2-overlayWidth/2, m.h/2-overlayHeight/2)
|
|
m.subModel = layout.Resize(m.subModel, w, h)
|
|
m.colListModel = layout.Resize(m.colListModel, w, h).(*colListModel)
|
|
return m
|
|
}
|
|
|
|
func (m *Model) ColSelectorVisible() bool {
|
|
return m.compositor.HasOverlay()
|
|
}
|