model.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package editor
  2. import (
  3. "github.com/gdamore/tcell/v3"
  4. "moose/internal/buffer"
  5. "moose/internal/layout"
  6. )
  7. type Model struct {
  8. Screen tcell.Screen
  9. Config Config
  10. Mode Mode
  11. BM buffer.BufferManager
  12. AM ActionManager
  13. LM layout.LayoutManager
  14. ShouldQuit bool
  15. DebugLog string
  16. }
  17. func NewModel(screen tcell.Screen) Model {
  18. blank := buffer.NewBuffer()
  19. model := Model{
  20. Screen: screen,
  21. Config: DefaultConfig(),
  22. Mode: ModeNormal,
  23. BM: buffer.BufferManager{
  24. Buffers: []buffer.Buffer{blank},
  25. CurrentIdx: 0,
  26. PaletteBuffer: buffer.NewBuffer(),
  27. },
  28. AM: DefaultActionManager(),
  29. LM: layout.NewLayoutManager(),
  30. ShouldQuit: false,
  31. }
  32. model.ReloadConfig()
  33. return model
  34. }
  35. func (m *Model) ReloadConfig() {
  36. m.Config.StyleDefault = m.Config.StyleDefault.Background(tcell.GetColor(m.Config.Colors.MainBackground)).Foreground(tcell.GetColor(m.Config.Colors.MainForeground))
  37. m.Screen.SetStyle(m.Config.StyleDefault)
  38. }
  39. func (m *Model) CurrentActionSet() []Action {
  40. switch m.Mode {
  41. case ModeNormal:
  42. return m.AM.Normal
  43. case ModeWrite:
  44. return m.AM.Insert
  45. case ModePalette:
  46. return m.AM.Palette
  47. }
  48. return nil
  49. }
  50. func (m *Model) Quit() {
  51. m.ShouldQuit = true
  52. }