curseOutput.hh 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #pragma once
  2. #include <ncurses.h>
  3. #include <fstream>
  4. #include <list>
  5. #include <set>
  6. #include <map>
  7. #include "outputFlag.hh"
  8. #include "params.hh"
  9. class JSonElement;
  10. class JSonContainer;
  11. class JSonArray;
  12. class JSonObject;
  13. template<class T> class Optional;
  14. class CurseOutput
  15. {
  16. public:
  17. CurseOutput(JSonElement *rootData, const Params &);
  18. virtual ~CurseOutput();
  19. void run();
  20. bool onsig(int signo);
  21. private:
  22. virtual void loop();
  23. protected:
  24. void init();
  25. void shutdown();
  26. /**
  27. * return false if bottom of screen is touched
  28. **/
  29. bool redraw();
  30. bool redraw(std::pair<int, int> &, const std::pair<unsigned int, unsigned int> &maxWidth, const JSonElement *, const JSonContainer *);
  31. bool readInput();
  32. void getScreenSize(std::pair<unsigned int, unsigned int> &, std::pair<int, int> &) const;
  33. void checkSelection(const JSonElement *item, const JSonElement *parent, const std::pair<int, int>&);
  34. static unsigned int getNbLines(float nbChar, unsigned int maxWidth);
  35. const OutputFlag getFlag(const JSonElement *item) const;
  36. void write(const char *str, unsigned int maxWidth, const OutputFlag flags) const;
  37. unsigned int write(const int &x, const int &y, const JSonElement *item, unsigned int maxWidth, const OutputFlag);
  38. unsigned int write(const int &x, const int &y, const std::string &item, unsigned int maxWidth, const OutputFlag);
  39. unsigned int write(const int &x, const int &y, const char item, unsigned int maxWidth, const OutputFlag);
  40. unsigned int write(const int &x, const int &y, const char *item, unsigned int maxWidth, const OutputFlag);
  41. bool writeKey(const std::string &key, std::pair<int, int> &cursor, const std::pair<unsigned int, unsigned int> &maxWidth, OutputFlag, unsigned int extraLen =0);
  42. bool writeKey(const std::string &key, const std::string &after, std::pair<int, int> &cursor, const std::pair<unsigned int, unsigned int> &maxWidth, OutputFlag);
  43. bool writeContainer(std::pair<int, int> &, const std::pair<unsigned int, unsigned int> &maxSize, const JSonContainer *);
  44. bool writeContent(std::pair<int, int> &cursor, const std::pair<unsigned int, unsigned int> &maxSize, const std::list<JSonElement *> * obj);
  45. std::set<const JSonContainer *> collapsed;
  46. const JSonElement *data, *selection;
  47. const Params &params;
  48. SCREEN *screen;
  49. FILE *screen_fd;
  50. bool breakLoop;
  51. int topleft;
  52. std::set<char> colors;
  53. const JSonElement *select_up, *select_down;
  54. bool selectFound, selectIsLast, selectIsFirst;
  55. };