Mercurial > hg > xemacs-beta
diff pkg-src/tree-x/tree.h @ 163:0132846995bd r20-3b8
Import from CVS: tag r20-3b8
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:43:35 +0200 |
parents | |
children | 85ec50267440 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg-src/tree-x/tree.h Mon Aug 13 09:43:35 2007 +0200 @@ -0,0 +1,102 @@ +/* ---------------------------------------------------------------------------- + * File : tree.h + * Purpose : Header file for dynamic tree program + * ---------------------------------------------------------------------------- + */ + +#define INTF 1 /* enable interface-specific code */ + +#define FOREACH_CHILD(child, tree) \ + for ((child) = (tree)->child ; (child) ; (child) = (child)->sibling) + +#define PT_IN_RECT(p1, p2, x1, y1, x2, y2) \ + ((p1) > (x1) && \ + (p2) > (y1) && \ + (p1) < (x2) && \ + (p2) < (y2)) + +#define PT_IN_EXTENT(p1, p2, extent) \ + ((p1) > (extent).pos.x && \ + (p2) > (extent).pos.y && \ + (p1) < ((extent).pos.x + (extent).width) && \ + (p2) < ((extent).pos.y + (extent).height)) + +#define IS_LEAF(node) \ + ((node)->child == NULL) + +typedef struct line Polyline; +typedef struct tnode Tree; + +typedef struct point { + int x; + int y; +} Point; + +typedef struct extent { + Point pos; /* top left corner of rectangle */ + int width; + int height; +} Extent; + +struct line { + int dx, dy; + Polyline *link; +}; + +typedef struct polygon { + struct { + Polyline *head; + Polyline *tail; + } lower, upper; +} Polygon; + +typedef struct label { + char *text; /* the actual label text */ + int len; /* length of label text */ + int xoffset; /* the X offset of label inside rectangle */ + int yoffset; /* the Y offset of label inside rectangle */ +} Label; + +struct tnode { + Tree *parent; + Tree *child; + Tree *sibling; + int width; + int height; + int border; + Polygon contour; + Point offset; /* offset is relative to 'predecessor' */ + Point pos; /* position is screen coordinates of node */ + Point old_pos; /* position is screen coordinates of node */ + int node_height; /* height of node in tree */ + /* all fields below are interface-specific */ + Label label; + char* value; + Extent subextent; /* extent of subtree (excluding this node) */ + Polygon old_contour; /* for caching old contour in elision */ + char elision; /* TRUE if this node is collapsed */ + char on_path; /* true if on path to root from node */ + char split; /* flag for drawing subtree contours */ + char show_contour; /* flag to show or hide subtree contour */ +}; + +typedef enum { + Erase, + Draw +} DrawMode; + +typedef enum { + Old, + New +} PosMode; /* Position mode */ + +extern Polyline* MakeLine(); +extern Tree* MakeNode(); +extern Tree* ReadTreeFromFile(); +extern void ComputeTreeSize(); +extern void Unzip(); +extern void Zip(); + +extern Tree *TheTree; +extern int NumLines; +extern int NumNodes;