1 /* ----------------------------------------------------------------------------
\r
3 * Purpose : Header file for dynamic tree program
\r
4 * ----------------------------------------------------------------------------
\r
7 #define INTF 1 /* enable interface-specific code */
\r
9 #define FOREACH_CHILD(child, tree) \
\r
10 for ((child) = (tree)->child ; (child) ; (child) = (child)->sibling)
\r
12 #define PT_IN_RECT(p1, p2, x1, y1, x2, y2) \
\r
18 #define PT_IN_EXTENT(p1, p2, extent) \
\r
19 ((p1) > (extent).pos.x && \
\r
20 (p2) > (extent).pos.y && \
\r
21 (p1) < ((extent).pos.x + (extent).width) && \
\r
22 (p2) < ((extent).pos.y + (extent).height))
\r
24 #define IS_LEAF(node) \
\r
25 ((node)->child == NULL)
\r
27 typedef struct line TreePolyline;
\r
28 typedef struct tnode Tree;
\r
30 typedef struct point {
\r
35 typedef struct extent {
\r
36 Point pos; /* top left corner of rectangle */
\r
46 typedef struct polygon {
\r
53 typedef struct label {
\r
54 char *text; /* the actual label text */
\r
55 int len; /* length of label text */
\r
56 int xoffset; /* the X offset of label inside rectangle */
\r
57 int yoffset; /* the Y offset of label inside rectangle */
\r
67 TreePolygon contour;
\r
68 Point offset; /* offset is relative to 'predecessor' */
\r
69 Point pos; /* position is screen coordinates of node */
\r
70 Point old_pos; /* position is screen coordinates of node */
\r
71 int node_height; /* height of node in tree */
\r
72 /* all fields below are interface-specific */
\r
75 Extent subextent; /* extent of subtree (excluding this node) */
\r
76 TreePolygon old_contour; /* for caching old contour in elision */
\r
77 char elision; /* TRUE if this node is collapsed */
\r
78 char on_path; /* true if on path to root from node */
\r
79 char split; /* flag for drawing subtree contours */
\r
80 char show_contour; /* flag to show or hide subtree contour */
\r
81 char highlight; /* TRUE if node shoulf be drawn highlighted*/
\r
82 char focus; /* TRUE if node is a selected node */
\r
93 } PosMode; /* Position mode */
\r
95 extern TreePolyline* MakeLine();
\r
96 extern Tree* MakeNode();
\r
97 extern void ComputeTreeSize();
\r
98 extern void Unzip();
\r
100 extern void Delete (Tree* p);
\r
101 extern void DeleteTree (Tree* p, int contour);
\r
103 extern Tree *TheTree;
\r
104 extern int NumLines;
\r
105 extern int NumNodes;
\r