model.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package editor
  2. import (
  3. "moose/internal/buffer"
  4. "moose/internal/layout"
  5. "github.com/gdamore/tcell/v3"
  6. )
  7. type Model struct {
  8. Screen tcell.Screen
  9. Style tcell.Style
  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, style tcell.Style) Model {
  18. blank := buffer.NewBuffer()
  19. model := Model{
  20. Screen: screen,
  21. Style: style,
  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: return m.AM.Normal
  37. case ModeWrite: return m.AM.Insert
  38. case ModePalette: return m.AM.Palette
  39. }
  40. return nil
  41. }
  42. func (m *Model) Quit() {
  43. m.ShouldQuit = true
  44. }