Lines Matching defs:tree
60 #define IsHorizontal(tw) ((tw)->tree.gravity == WestGravity || \
61 (tw)->tree.gravity == EastGravity)
100 * resources of the tree itself
104 XtOffsetOf(TreeRec, tree.auto_reconfigure), XtRImmediate,
107 XtOffsetOf(TreeRec, tree.hpad), XtRImmediate, (XtPointer) 0 },
109 XtOffsetOf(TreeRec, tree.vpad), XtRImmediate, (XtPointer) 0 },
111 XtOffsetOf(TreeRec, tree.foreground), XtRString,
114 XtOffsetOf(TreeRec, tree.line_width), XtRImmediate, (XtPointer) 0 },
116 XtOffsetOf(TreeRec, tree.gravity), XtRImmediate,
120 XtOffsetOf(TreeRec, tree.display_list), XtRImmediate,
127 * resources that are attached to all children of the tree
131 XtOffsetOf(TreeConstraintsRec, tree.parent), XtRImmediate, NULL },
133 XtOffsetOf(TreeConstraintsRec, tree.gc), XtRImmediate, NULL },
202 * tree utility routines *
240 values.foreground = w->tree.foreground;
241 if (w->tree.line_width != 0) {
243 values.line_width = w->tree.line_width;
256 nc->tree.parent = parent;
265 nindex = pc->tree.n_children;
267 if (pc->tree.n_children == pc->tree.max_children) {
268 pc->tree.max_children += (pc->tree.max_children / 2) + 2;
269 pc->tree.children = (WidgetList) XtRealloc ((char *)pc->tree.children,
271 ((size_t)pc->tree.max_children *
279 pc->tree.children[nindex] = node;
280 pc->tree.n_children++;
300 for (pos = 0; pos < pc->tree.n_children; pos++)
301 if (pc->tree.children[pos] == node) break;
303 if (pos == pc->tree.n_children) return;
308 pc->tree.n_children--;
314 for (i = pos; i < pc->tree.n_children; i++)
315 pc->tree.children[i] = pc->tree.children[i+1];
317 pc->tree.children[pc->tree.n_children] = NULL;
323 switch (tw->tree.gravity) {
327 tw->tree.gravity = grav;
335 * tree class methods *
367 if (request->tree.hpad == 0 && request->tree.vpad == 0) {
369 cnew->tree.hpad = TREE_HORIZONTAL_DEFAULT_SPACING;
370 cnew->tree.vpad = TREE_VERTICAL_DEFAULT_SPACING;
372 cnew->tree.hpad = TREE_VERTICAL_DEFAULT_SPACING;
373 cnew->tree.vpad = TREE_HORIZONTAL_DEFAULT_SPACING;
380 cnew->tree.gc = get_tree_gc (cnew);
385 cnew->tree.tree_root = (Widget) NULL;
388 cnew->tree.tree_root = XtCreateWidget ("root", widgetClass, gnew,
394 cnew->tree.largest = NULL;
395 cnew->tree.n_largest = 0;
396 initialize_dimensions (&cnew->tree.largest, &cnew->tree.n_largest,
417 tc->tree.n_children = 0;
418 tc->tree.max_children = 0;
419 tc->tree.children = (Widget *) NULL;
420 tc->tree.x = tc->tree.y = 0;
421 tc->tree.bbsubwidth = 0;
422 tc->tree.bbsubheight = 0;
430 if (tc->tree.parent)
431 insert_node (tc->tree.parent, cnew);
432 else if (tw->tree.tree_root)
433 insert_node (tw->tree.tree_root, cnew);
449 if (cnew->tree.foreground != current->tree.foreground ||
451 cnew->tree.line_width != current->tree.line_width) {
452 XtReleaseGC (gnew, cnew->tree.gc);
453 cnew->tree.gc = get_tree_gc (cnew);
459 * tree layout. layout_tree() does a redraw, so we don't
462 if (cnew->tree.gravity != current->tree.gravity) {
463 check_gravity (cnew, current->tree.gravity);
467 if (cnew->tree.vpad == current->tree.vpad &&
468 cnew->tree.hpad == current->tree.hpad) {
469 cnew->tree.vpad = current->tree.hpad;
470 cnew->tree.hpad = current->tree.vpad;
474 if (cnew->tree.vpad != current->tree.vpad ||
475 cnew->tree.hpad != current->tree.hpad ||
476 cnew->tree.gravity != current->tree.gravity) {
498 if (curc->tree.parent != newc->tree.parent){
499 if (curc->tree.parent)
500 delete_node (curc->tree.parent, cnew);
501 if (newc->tree.parent)
502 insert_node(newc->tree.parent, cnew);
527 if (tw->tree.tree_root == w) {
528 if (tc->tree.n_children > 0)
529 tw->tree.tree_root = tc->tree.children[0];
531 tw->tree.tree_root = NULL;
534 delete_node (tc->tree.parent, (Widget) w);
535 for (i = 0; i< tc->tree.n_children; i++)
536 insert_node (tc->tree.parent, tc->tree.children[i]);
567 if (tw->tree.auto_reconfigure) layout_tree (tw, FALSE);
583 XtReleaseGC (gw, w->tree.gc);
584 if (w->tree.largest) XtFree ((char *) w->tree.largest);
597 if (tw->tree.display_list)
598 XawRunDisplayList(gw, tw->tree.display_list, event, region);
615 if (child != tw->tree.tree_root && tc->tree.n_children) {
619 switch (tw->tree.gravity) {
635 for (j = 0; j < tc->tree.n_children; j++) {
636 Widget k = tc->tree.children[j];
637 GC gc = (tc->tree.gc ? tc->tree.gc : tw->tree.gc);
639 switch (tw->tree.gravity) {
697 preferred->width = tw->tree.maxwidth;
698 preferred->height = tw->tree.maxheight;
715 * tree layout algorithm *
717 * Each node in the tree is "shrink-wrapped" with a minimal bounding *
725 compute_bounding_box_subtree(TreeWidget tree, Widget w, int depth)
728 Bool horiz = IsHorizontal (tree);
736 if (depth >= tree->tree.n_largest) {
737 initialize_dimensions (&tree->tree.largest,
738 &tree->tree.n_largest, depth + 1);
741 if (tree->tree.largest[depth] < newwidth)
742 tree->tree.largest[depth] = newwidth;
748 tc->tree.bbwidth = (Dimension)(w->core.width + bw2);
749 tc->tree.bbheight = (Dimension)(w->core.height + bw2);
751 if (tc->tree.n_children == 0) return;
754 * Figure the size of the opposite dimension (vertical if tree is
760 for (i = 0; i < tc->tree.n_children; i++) {
761 Widget child = tc->tree.children[i];
764 compute_bounding_box_subtree (tree, child, depth + 1);
767 if (newwidth < cc->tree.bbwidth) newwidth = cc->tree.bbwidth;
768 newheight = (Dimension)(newheight + (tree->tree.vpad + cc->tree.bbheight));
770 if (newheight < cc->tree.bbheight) newheight = cc->tree.bbheight;
771 newwidth = (Dimension)(newwidth + (tree->tree.hpad + cc->tree.bbwidth));
776 tc->tree.bbsubwidth = newwidth;
777 tc->tree.bbsubheight = newheight;
784 tc->tree.bbwidth = (Dimension)(tc->tree.bbwidth + (tree->tree.hpad + newwidth));
785 newheight = (Dimension)(newheight - tree->tree.vpad);
786 if (newheight > tc->tree.bbheight) tc->tree.bbheight = newheight;
788 tc->tree.bbheight = (Dimension)(tc->tree.bbheight + (tree->tree.vpad + newheight));
789 newwidth = (Dimension)(newwidth - tree->tree.hpad);
790 if (newwidth > tc->tree.bbwidth) tc->tree.bbwidth = newwidth;
806 switch (tw->tree.gravity) {
808 tc->tree.x = (Position) (tw->tree.maxwidth -
809 w->core.width - tc->tree.x);
813 tc->tree.y = (Position) (tw->tree.maxheight -
814 w->core.height - tc->tree.y);
821 XtMoveWidget (w, tc->tree.x, tc->tree.y);
827 for (i = 0; i < tc->tree.n_children; i++)
828 set_positions (tw, tc->tree.children[i], level + 1);
834 arrange_subtree(TreeWidget tree, Widget w, int depth, int x, int y)
838 Bool horiz = IsHorizontal (tree);
848 tc->tree.x = (Position)x;
849 tc->tree.y = (Position)y;
854 if (myh > (int)tc->tree.bbsubheight) {
855 y += (myh - (int)tc->tree.bbsubheight) / 2;
861 if (myw > (int)tc->tree.bbsubwidth) {
862 x += (myw - (int)tc->tree.bbsubwidth) / 2;
867 if ((tmp = (Dimension)(x + tc->tree.bbwidth)) > tree->tree.maxwidth)
868 tree->tree.maxwidth = tmp;
869 if ((tmp = (Dimension)(y + tc->tree.bbheight)) > tree->tree.maxheight)
870 tree->tree.maxheight = tmp;
872 if (tc->tree.n_children == 0) return;
876 * Have children, so walk down tree laying out children, then laying
880 newx = x + tree->tree.largest[depth];
881 if (depth > 0) newx += tree->tree.hpad;
885 newy = y + tree->tree.largest[depth];
886 if (depth > 0) newy += tree->tree.vpad;
889 for (i = 0; i < tc->tree.n_children; i++) {
892 child = tc->tree.children[i]; /* last value is used outside loop */
895 arrange_subtree (tree, child, depth + 1, newx, newy);
897 newy += tree->tree.vpad + cc->tree.bbheight;
899 newx += tree->tree.hpad + cc->tree.bbwidth;
908 TreeConstraints firstcc = TREE_CONSTRAINT (tc->tree.children[0]);
916 tc->tree.x = (Position)x;
917 adjusted = (Position)(firstcc->tree.y +
918 ((lastcc->tree.y + (Position) child->core.height +
920 firstcc->tree.y - (Position) w->core.height -
922 if (adjusted > tc->tree.y) tc->tree.y = adjusted;
924 adjusted = (Position)(firstcc->tree.x +
925 ((lastcc->tree.x + (Position) child->core.width +
927 firstcc->tree.x - (Position) w->core.width -
929 if (adjusted > tc->tree.x) tc->tree.x = adjusted;
930 tc->tree.y = (Position)y;
967 * box for the tree at that position (and below). Then, walk again using
971 if (tw->tree.tree_root == NULL)
974 tw->tree.maxwidth = tw->tree.maxheight = 0;
975 for (i = 0, dp = tw->tree.largest; i < tw->tree.n_largest; i++, dp++)
977 initialize_dimensions (&tw->tree.largest, &tw->tree.n_largest,
978 tw->tree.n_largest);
979 compute_bounding_box_subtree (tw, tw->tree.tree_root, 0);
986 arrange_subtree (tw, tw->tree.tree_root, 0, 0, 0);
991 set_tree_size (tw, insetvalues, tw->tree.maxwidth, tw->tree.maxheight);
992 set_positions (tw, tw->tree.tree_root, 0);
1011 XawTreeForceLayout(Widget tree)
1013 layout_tree ((TreeWidget) tree, FALSE);