model.go 1003 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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) CurrentActionSet() []Action {
  36. switch m.Mode {
  37. case ModeNormal:
  38. return m.AM.Normal
  39. case ModeWrite:
  40. return m.AM.Insert
  41. case ModePalette:
  42. return m.AM.Palette
  43. }
  44. return nil
  45. }
  46. func (m *Model) Quit() {
  47. m.ShouldQuit = true
  48. }