1
0

model.go 1.4 KB

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