home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tv20cpp.zip / tvision / outline.h < prev    next >
C/C++ Source or Header  |  1998-01-19  |  6KB  |  190 lines

  1. /*
  2.  * outline.h
  3.  *
  4.  * Turbo Vision - Version 2.0
  5.  *
  6.  * Copyright (c) 1994 by Borland International
  7.  * All Rights Reserved.
  8.  *
  9.  * Modified by Sergio Sigala <ssigala@globalnet.it>
  10.  */
  11.  
  12. #if defined( Uses_TOutlineViewer ) && !defined( __TOutlineViewer )
  13. #define __TOutlineViewer
  14.  
  15. const int
  16.   ovExpanded = 0x01,
  17.   ovChildren = 0x02,
  18.   ovLast     = 0x04;
  19.  
  20. const int
  21.   cmOutlineItemSelected = 301;
  22.  
  23. class TNode
  24. {
  25. public:
  26. inline TNode(char* aText);
  27. inline TNode(char* aText, TNode* aChildren, TNode* aNext, Boolean initialState = True);
  28.     virtual ~TNode();
  29.  
  30.     TNode* next;
  31.     char* text;
  32.     TNode* childList;
  33.     Boolean expanded;
  34. };
  35.  
  36. inline TNode::TNode(char* aText) :
  37.     next(0), text(newStr(aText)), childList(0), expanded(True)
  38. {
  39. }
  40.  
  41. inline TNode::TNode( char* aText, TNode* aChildren,
  42.                      TNode* aNext, Boolean initialState ) :
  43.     next(aNext), text(newStr(aText)),
  44.     childList(aChildren), expanded(initialState)
  45. {
  46. }
  47.  
  48. inline TNode::~TNode() {
  49.   delete [] text;
  50. }
  51.  
  52. /* ------------------------------------------------------------------------*/
  53. /*      class TOutlineViewer                                               */
  54. /*                                                                         */
  55. /*      Palette layout                                                     */
  56. /*        1 = Normal color                                                 */
  57. /*        2 = Focus color                                                  */
  58. /*        3 = Select color                                                 */
  59. /*        4 = Not expanded color                                           */
  60. /* ------------------------------------------------------------------------*/
  61.  
  62. class TRect;
  63. class TScrollBar;
  64. class TEvent;
  65.  
  66. class TOutlineViewer : public TScroller
  67. {
  68. public:
  69.     TOutlineViewer(const TRect& bounds, TScrollBar* aHScrollBar,
  70.         TScrollBar* aVScrollBar);
  71.     TOutlineViewer(StreamableInit s);
  72.     virtual void adjust(TNode* node, Boolean expand)=0;
  73.     virtual void draw();
  74.     virtual void focused(int i);
  75.     virtual TNode* getChild(TNode* node, int i)=0;
  76.     virtual char* getGraph(int level, long lines, ushort flags);
  77.     virtual int getNumChildren(TNode* node)=0;
  78.     virtual TNode* getNode(int i);
  79.     virtual TPalette& getPalette() const;
  80.     virtual TNode* getRoot()=0;
  81.     virtual char* getText(TNode* node)=0;
  82.     virtual void handleEvent(TEvent& event);
  83.     virtual Boolean hasChildren(TNode* node)=0;
  84.     virtual Boolean isExpanded(TNode* node)=0;
  85.     virtual Boolean isSelected(int i);
  86.     virtual void selected(int i);
  87.     virtual void setState(ushort aState, Boolean enable);
  88.  
  89.     void update();
  90.     void expandAll(TNode* node);
  91.     TNode* firstThat(Boolean (*test)(TOutlineViewer*, TNode*,int,int,long,
  92.         ushort));
  93.     TNode* forEach(Boolean (*action)(TOutlineViewer*, TNode*,int,int,long,
  94.         ushort));
  95.  
  96.     char* createGraph(int level, long lines, ushort flags, int levWidth,
  97.         int endWidth, const char* chars);
  98.  
  99.     int foc;
  100.     static const char* graphChars;
  101.  
  102. protected:
  103.     static void disposeNode(TNode* node);
  104.     virtual void write( opstream& );
  105.     virtual void *read( ipstream& );
  106.  
  107. public:
  108.     static TStreamable *build();
  109.     static const char * const name;
  110.  
  111. private:
  112.     void adjustFocus(int newFocus);
  113.     TNode* iterate(Boolean (*action)(TOutlineViewer*, TNode*, int, int, long,
  114.                 ushort), Boolean checkResult);
  115. };
  116.  
  117. inline TOutlineViewer::TOutlineViewer( StreamableInit s) :
  118.     TScroller(s)
  119. {
  120. }
  121.  
  122. #endif // Uses_TOutlineViewer
  123.  
  124. #if defined( Uses_TOutline ) && !defined( __TOutline )
  125. #define __TOutline
  126.  
  127. /* ------------------------------------------------------------------------*/
  128. /*      class TOutline                                                     */
  129. /*                                                                         */
  130. /*      Palette layout                                                     */
  131. /*        1 = Normal color                                                 */
  132. /*        2 = Focus color                                                  */
  133. /*        3 = Select color                                                 */
  134. /*        4 = Not expanded color                                           */
  135. /* ------------------------------------------------------------------------*/
  136.  
  137. class TRect;
  138. class TScrollBar;
  139. class TEvent;
  140.  
  141. class TOutline : public TOutlineViewer
  142. {
  143. public:
  144.     TOutline(const TRect& bounds, TScrollBar* aHScrollBar, TScrollBar* aVScrollBar,
  145.         TNode* aRoot);
  146.     ~TOutline();
  147.  
  148.     virtual void adjust(TNode* node, Boolean expand);
  149.     virtual TNode* getRoot();
  150.     virtual int getNumChildren(TNode* node);
  151.     virtual TNode* getChild(TNode* node, int i);
  152.     virtual char* getText(TNode* node);
  153.     virtual Boolean isExpanded(TNode* node);
  154.     virtual Boolean hasChildren(TNode* node);
  155.  
  156.     TNode* root;
  157.  
  158. protected:
  159.     virtual void write( opstream& );
  160.     virtual void* read( ipstream& );
  161.     virtual void writeNode( TNode*, opstream& );
  162.     virtual TNode* readNode( ipstream& );
  163.     TOutline( StreamableInit );
  164.  
  165. public:
  166.     static TStreamable* build();
  167.     static const char* const name;
  168.  
  169. private:
  170.     virtual const char *streamableName() const
  171.         { return name; }
  172.  
  173. };
  174.  
  175. inline TOutline::TOutline( StreamableInit s ) : TOutlineViewer( s )
  176. {
  177. }
  178.  
  179. inline ipstream& operator >> ( ipstream& is, TOutline& o )
  180.     { return is >> (TStreamable&)o; }
  181. inline ipstream& operator >> ( ipstream& is, TOutline*& o )
  182.     { return is >> (void *&)o; }
  183.  
  184. inline opstream& operator << ( opstream& os, TOutline& o )
  185.     { return os << (TStreamable&)o; }
  186. inline opstream& operator << ( opstream& os, TOutline* o )
  187.     { return os << (TStreamable*)o; }
  188.  
  189. #endif // Uses_TOutline
  190.