layout.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package editor
  2. import (
  3. "moose/internal/buffer"
  4. "slices"
  5. )
  6. func (m *Model) AddBuffer(newNode bool) {
  7. b := buffer.NewBuffer()
  8. idx := len(m.BM.Buffers)
  9. m.BM.Buffers = append(m.BM.Buffers, b)
  10. m.BM.CurrentIdx = idx
  11. m.LM.InsertBuffer(idx, newNode)
  12. }
  13. func (m *Model) AddBufferFromPath(path string, newNode bool) {
  14. b := buffer.NewBufferFromPath(path)
  15. idx := len(m.BM.Buffers)
  16. m.BM.Buffers = append(m.BM.Buffers, b)
  17. m.BM.CurrentIdx = idx
  18. m.LM.InsertBuffer(idx, newNode)
  19. }
  20. func (m *Model) CycleActiveBuffer(horisontal float32, vertical float32) {
  21. m.LM.CycleActiveBuffer(horisontal, vertical)
  22. bufIdx := m.LM.GetActiveBufferIdx()
  23. m.BM.CurrentIdx = bufIdx
  24. }
  25. func (m *Model) RemoveActiveBuffer() {
  26. if len(m.BM.Buffers) == 0 {
  27. m.BM.Buffers = []buffer.Buffer{buffer.NewBuffer()}
  28. m.BM.CurrentIdx = 0
  29. return
  30. }
  31. removedIdx := m.BM.CurrentIdx
  32. if removedIdx < 0 || removedIdx >= len(m.BM.Buffers) {
  33. return
  34. }
  35. ws, ok := m.LM.Workspaces[m.LM.ActiveIdx]
  36. if !ok || !ws.RootContainer.ContainsBufferIdx(removedIdx) {
  37. return
  38. }
  39. newActiveIdx := m.LM.RemoveActiveBufferAndReindex(removedIdx)
  40. m.BM.Buffers = slices.Delete(m.BM.Buffers, removedIdx, removedIdx+1)
  41. if len(m.BM.Buffers) == 0 {
  42. m.BM.Buffers = []buffer.Buffer{buffer.NewBuffer()}
  43. m.BM.CurrentIdx = 0
  44. return
  45. }
  46. if newActiveIdx < 0 || newActiveIdx >= len(m.BM.Buffers) {
  47. newActiveIdx = len(m.BM.Buffers) - 1
  48. }
  49. m.BM.CurrentIdx = newActiveIdx
  50. }