Mercurial > hg > xemacs-beta
view pkg-src/tree-x/tree.h @ 164:4e0740e5aab2
Added tag r20-3b8 for changeset 0132846995bd
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:43:39 +0200 |
parents | 0132846995bd |
children | 85ec50267440 |
line wrap: on
line source
/* ---------------------------------------------------------------------------- * 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;