itemview.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #define Uses_TWindow
  3. #define Uses_TCollection
  4. #define Uses_TScroller
  5. #define Uses_TEvent
  6. #define Uses_TKeys
  7. #define Uses_TProgram
  8. #define Uses_TStatusLine
  9. #define Uses_TStreamableClass
  10. #define Uses_opstream
  11. #include <tvision/tv.h>
  12. // Single Line Frame Characters
  13. const char BOX_SINGLE_HORIZONTAL = '\xC4'; // ─
  14. const char BOX_SINGLE_VERTICAL = '\xB3'; // │
  15. // Double Line Frame Characters
  16. const char BOX_DOUBLE_HORIZONTAL = '\xCD'; // ═
  17. const char BOX_DOUBLE_VERTICAL = '\xBA'; // ║
  18. // Junctions: Single Horizontal to Double Vertical
  19. const char BOX_SINGLE_HORIZONTAL_TO_DOUBLE_VERTICAL_TOP =
  20. '\xD1'; // ╤ (Approximation)
  21. const char BOX_SINGLE_HORIZONTAL_TO_DOUBLE_VERTICAL_BOTTOM =
  22. '\xCF'; // ╧ (Approximation)
  23. const char BOX_SINGLE_HORIZONTAL_TO_SINGLE_VERTICAL_TOP = '\xC2'; // ┬
  24. // Junctions: Double Horizontal to Single Vertical
  25. const char BOX_DOUBLE_HORIZONTAL_TO_SINGLE_VERTICAL_LEFT =
  26. '\xC3'; // ╟ (Approximation)
  27. const char BOX_DOUBLE_HORIZONTAL_TO_SINGLE_VERTICAL_RIGHT =
  28. '\xB4'; // ╢ (Approximation)
  29. // Cross junctions
  30. const char BOX_CROSS_SINGLE = '\xC5'; // ┼
  31. const char BOX_CROSS_DOUBLE =
  32. '\xCE'; // ╬ (No direct equivalent, used closest match)
  33. const char BOX_CROSS_SINGLE_TO_DOUBLE = '\xD8'; // ╪ (Approximation)
  34. const char BOX_CROSS_DOUBLE_TO_SINGLE = '\xD7'; // ╫ (Approximation)
  35. // Corners
  36. const char BOX_CORNER_TOP_LEFT_SINGLE = '\xDA'; // ┌
  37. const char BOX_CORNER_TOP_RIGHT_SINGLE = '\xBF'; // ┐
  38. const char BOX_CORNER_BOTTOM_LEFT_SINGLE = '\xC0'; // └
  39. const char BOX_CORNER_BOTTOM_RIGHT_SINGLE = '\xD9'; // ┘
  40. const char BOX_CORNER_TOP_LEFT_DOUBLE = '\xC9'; // ╔
  41. const char BOX_CORNER_TOP_RIGHT_DOUBLE = '\xBB'; // ╗
  42. const char BOX_CORNER_BOTTOM_LEFT_DOUBLE = '\xC8'; // ╚
  43. const char BOX_CORNER_BOTTOM_RIGHT_DOUBLE = '\xBC'; // ╝
  44. class TItemCollection : public TCollection {
  45. public:
  46. TItemCollection(short lim, short delta) : TCollection(lim, delta) {}
  47. virtual void freeItem(void *p) { delete[] (char *)p; }
  48. private:
  49. virtual void *readItem(ipstream &) { return 0; }
  50. virtual void writeItem(void *, opstream &) {}
  51. };
  52. class TItemViewer : public TScroller {
  53. int selectedLine = 0;
  54. public:
  55. enum class ViewedColumn { Items, Categories, Weights };
  56. char *fileName;
  57. TCollection *fileLines;
  58. Boolean isValid;
  59. TItemViewer(const TRect &bounds, TScrollBar *aHScrollBar,
  60. TScrollBar *aVScrollBar, const ViewedColumn &col);
  61. ~TItemViewer();
  62. TItemViewer(StreamableInit) : TScroller(streamableInit){};
  63. void draw();
  64. void setState(ushort aState, Boolean enable);
  65. void scrollDraw();
  66. Boolean valid(ushort command) const;
  67. virtual void handleEvent(TEvent &event) override;
  68. int findSel(TPoint p);
  69. virtual TPalette &getPalette() const override;
  70. private:
  71. virtual const char *streamableName() const { return name; }
  72. protected:
  73. virtual void write(opstream &);
  74. virtual void *read(ipstream &);
  75. public:
  76. static const char *const name;
  77. static TStreamable *build();
  78. };
  79. #define cpTestView "\x6\x7\x2\x9"