Initial Commit
[packages] / xemacs-packages / oo-browser / tree-w32 / tree.h
1 /* ----------------------------------------------------------------------------\r
2  * File    : tree.h\r
3  * Purpose : Header file for dynamic tree program\r
4  * ----------------------------------------------------------------------------\r
5  */\r
6 \r
7 #define INTF 1          /* enable interface-specific code */\r
8 \r
9 #define FOREACH_CHILD(child, tree) \\r
10    for ((child) = (tree)->child ; (child) ; (child) = (child)->sibling)\r
11 \r
12 #define PT_IN_RECT(p1, p2, x1, y1, x2, y2)   \\r
13          ((p1) > (x1) &&                      \\r
14           (p2) > (y1) &&                       \\r
15           (p1) < (x2) &&                        \\r
16           (p2) < (y2))\r
17 \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
23 \r
24 #define IS_LEAF(node) \\r
25    ((node)->child == NULL)\r
26 \r
27 typedef struct line  TreePolyline;\r
28 typedef struct tnode Tree;\r
29 \r
30 typedef struct point {\r
31    int x;\r
32    int y;\r
33 } Point;\r
34 \r
35 typedef struct extent {\r
36    Point pos;                   /* top left corner of rectangle     */\r
37    int width;\r
38    int height;\r
39 } Extent;\r
40 \r
41 struct line {\r
42    int dx, dy;\r
43    TreePolyline *link;\r
44 };\r
45 \r
46 typedef struct polygon {\r
47    struct {\r
48       TreePolyline *head;\r
49       TreePolyline *tail;\r
50    } lower, upper;\r
51 } TreePolygon;\r
52 \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
58 } Label;\r
59 \r
60 struct tnode {\r
61    Tree    *parent;\r
62    Tree    *child;\r
63    Tree    *sibling;\r
64    int      width;\r
65    int      height;\r
66    int      border;\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
73    Label    label;\r
74    char*    value;\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
83 };\r
84 \r
85 typedef enum {\r
86    Erase,\r
87    Draw\r
88 } DrawMode;\r
89 \r
90 typedef enum {\r
91    Old,\r
92    New\r
93 } PosMode;                      /* Position mode */\r
94 \r
95 extern TreePolyline* MakeLine();\r
96 extern Tree*     MakeNode();\r
97 extern void      ComputeTreeSize();\r
98 extern void      Unzip();\r
99 extern void      Zip();\r
100 extern void      Delete (Tree* p);\r
101 extern void      DeleteTree (Tree* p, int contour);\r
102 \r
103 extern Tree     *TheTree;\r
104 extern int       NumLines;\r
105 extern int       NumNodes;\r