curseSplitOutput.hh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #pragma once
  2. #include <deque>
  3. #include <stack>
  4. #include "curseOutput.hh"
  5. #include "levenshtein.hpp"
  6. #include "jsonContainer.hh"
  7. class LevenshteinMatrice_base;
  8. typedef struct
  9. {
  10. std::string fileName;
  11. JSonElement *root;
  12. const JSonElement *selection, *lastSelection, *select_up, *select_down;
  13. WINDOW *innerWin, *outerWin;
  14. std::list<const JSonElement*> searchResults;
  15. unsigned int scrollTop;
  16. t_Cursor cursor;
  17. std::stack<std::pair<int, JSonContainer*> > parentsIterators; // Offset in JSonContainer::list
  18. //TODO back to std::stack<JSonContainer::const_iterator> ?
  19. bool selectFound, selectIsLast;
  20. } t_subWindow;
  21. class CurseSplitOutput: public CurseOutput
  22. {
  23. public:
  24. CurseSplitOutput(const Params &);
  25. virtual ~CurseSplitOutput();
  26. /**
  27. * Display data, and shutdown ncurses at the end
  28. **/
  29. void run(const std::deque<std::string> &, const std::deque<JSonElement *> &);
  30. void checkSelection(const JSonElement *item);
  31. bool redraw();
  32. bool redraw(const t_Cursor &screenSize, std::pair<int, JSonContainer *> &, bool isRoot =false);
  33. bool redraw(const t_Cursor &screenSize, JSonElement *, bool isRoot =false);
  34. Optional<bool> redrawOneItemToWorkingWin(t_subWindow &w, const t_Cursor &);
  35. bool writeContainer(const t_Cursor &maxSize, JSonContainer *, bool opening = true);
  36. bool writeContent(const t_Cursor &maxSize, std::list<JSonElement*> *_item);
  37. bool writeKey(const std::string &key, const size_t keylen, const t_Cursor &maxSize, OutputFlag flags, unsigned int extraLen =0);
  38. bool writeKey(const std::string &key, const size_t keylen, const std::string &after, const size_t afterlen, t_Cursor &cursor, const t_Cursor &maxWidth, OutputFlag);
  39. unsigned int write(const int &x, const int &y, const char item, unsigned int maxWidth, OutputFlag flags);
  40. unsigned int write(const int &x, const int &y, const std::string &str, const size_t strlen, unsigned int maxWidth, const OutputFlag flags);
  41. void write(const std::string &str, const OutputFlag flags) const;
  42. void writeTopLine(const std::string &currentBuffer, short color) const;
  43. bool jumpToNextSearch(const JSonElement *current, bool &selectFound);
  44. bool jumpToNextSearch();
  45. unsigned int search(const SearchPattern &searchPattern);
  46. unsigned int search(const SearchPattern &searchPattern, const JSonElement *current);
  47. /**
  48. * get the screen size
  49. **/
  50. const t_Cursor getScreenSize() const;
  51. /**
  52. * Release ncurses
  53. **/
  54. void shutdown();
  55. void destroyAllSubWin();
  56. /**
  57. * get flags to be passed to write.
  58. * Contains indications on who to write item
  59. **/
  60. const OutputFlag getFlag(const JSonElement *item) const;
  61. const OutputFlag getFlag(const JSonElement *item, const JSonElement *selection) const;
  62. protected:
  63. inputResult selectUp();
  64. inputResult selectDown();
  65. inputResult selectPUp();
  66. inputResult selectPDown();
  67. inputResult expandSelection();
  68. inputResult collapseSelection();
  69. inputResult initSearch();
  70. inputResult nextResult();
  71. inputResult changeWindow(char, bool);
  72. void setSelection(const JSonElement *);
  73. void computeDiff();
  74. std::deque<t_subWindow> subWindows;
  75. /**
  76. * currently searching pattern and its results
  77. **/
  78. const LevenshteinMatrice_base *diffMatrice;
  79. /**
  80. * Viewport start
  81. **/
  82. unsigned short nbInputs, selectedWin, workingWin;
  83. class reachNext {};
  84. // TODO t_subWindow &workingSubwin, &selectedSubwin ??
  85. };