model.go 980 B

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