1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
static char help_text[] ="\n"
"Introduction\n"
"\n"
" OO-Browser Graphical Interface\n"
"\n"
" This program demonstrates a dynamic tree-drawing \n"
" algorithm developed by Sven Moen. The algorithm is \n"
" published in \"IEEE Software\", July 1990, pp. 21-28.\n"
" If you desire more information than the description\n"
" given below, see the above-referenced article. \n"
"\n"
" A number of the features mentioned herein are not\n"
" included in this version of the program.\n"
"\n"
"Algorithm\n"
"\n"
" Unlike other algorithms, Moen's algorithm uses an \n"
" explicit representation of node and subtree contours\n"
" and it stores each contour as a polygon. \n"
"\n"
" Trees with nodes of any polygonal shape can be drawn\n"
" compactly, and the data structure supports insert and\n"
" delete operations on subtrees. The results are tidy\n"
" trees and efficient relayouts when the tree changes.\n"
"\n"
" In the Layout step, the tree is traversed in depth-first\n"
" fashion until the leaf nodes are reached. The contour\n"
" of each leaf node is formed by creating a linked list of\n"
" lines that wrap around the node's shape. This is the \n"
" LayoutLeaf step. As the return trip is made back to the\n"
" root, the contour of each interior node is formed by\n"
" joining the individual contours of each child. This Join\n"
" step involves a Merge step where the offset between\n"
" two neighboring contours is computed to avoid overlap. \n"
" Since the width of each subtree contour is known at\n"
" each step, each interior node is centered over its\n"
" children, and the subtree contour is extended to include\n"
" the interior node. This is the AttachParent step.\n"
"\n"
" In a dynamic update operation (insert or delete), the\n"
" algorithm reuses the contours not influenced by the\n"
" change and updates them efficiently. When a given \n"
" node changes, subtree contours at higher levels must\n"
" be disassembled before the change. This is called\n"
" the Unzip step, which call RuboutLeaf, Split, and\n"
" DetachParent, all inverses of LayoutLeaf, Join, and\n"
" AttachParent, respectively. After the change is made,\n"
" the Zip step reassembles the contours by again calling\n"
" Layout, Join, and AttachParent.\n"
"\n"
"User Interface\n"
" \n"
" This program offers an interactive environment for \n"
" creating and updating trees of arbitrary size. Trees\n"
" can be loaded from a file or created on-the-fly. You\n"
" can also save trees, and specify various layout and\n"
" animation options. Each feature is associated with \n"
" a menu item which is explained in the next section.\n"
"\n"
" When invoking the program, you may specify a single\n"
" argument indicating the name of a tree file. This file\n"
" will be loaded upon startup. If you start the program\n"
" without arguments, the canvas will be blank.\n"
"\n"
"Tree Menu\n"
"\n"
" New Tree... Create a new tree. You specify \n"
" a new root, and the existing tree, \n"
" if any, is deleted.\n"
"\n"
" Load Tree... Load a tree specification file.\n"
" (see the File Format section)\n"
"\n"
" Save Tree... Save a tree specification file.\n"
" (see the File Format section)\n"
"\n"
" Quit Exits the program.\n"
"\n"
#if 0
"Layout Menu\n"
"\n"
" Layout Spacing...\n"
" Displays a dialog that allows you\n"
" to change the spacing between nodes\n"
" on the same level and the spacing\n"
" between levels. \n"
"\n"
" Align Nodes on Level\n"
" Adds a constraint to the layout\n"
" algorithm that forces all nodes\n"
" on the same level to have the same\n"
" x-position. This leads to truncation\n"
" of nodes if necessary. The maximum\n"
" node width is controlled by the\n"
" Level Spacing. By default, this is\n"
" disabled.\n"
"\n"
#endif
"Node Menu\n"
"\n"
" This popup menu is invoked by pressing and holding\n"
" the left mouse button on a node. This menu offers\n"
" several actions that can be performed on nodes.\n"
"\n"
#if 0
" Add Child Add a child to the node. The new child\n"
" is added after the bottommost child.\n"
"\n"
" Add Sibling Before\n"
" Add a sibling before this node.\n"
"\n"
" Add Sibling After\n"
" Add a sibling after this node.\n"
"\n"
#endif
" Collapse Node Collapses or expands the subtree\n"
" Expand Node beginning at the specified node.\n"
" This operation is similiar to a\n"
" Delete operation, except that the\n"
" subtree is preserved so that you\n"
" can display it again. Collapsed\n"
" nodes are marked with a gray box.\n"
"\n"
" Delete Node Delete the subtree beginning at the\n"
" specified node.\n"
"\n"
"Tree File Format\n"
"\n"
" If you wish to load a file, you can load a file created\n"
" by the OO-Browser with the {M-d} or {M-g} commands within\n"
" a browser listing buffer.\n"
"\n"
" Node labels are sequences of characters delimited by\n"
" newlines or end-of-file. \n"
"\n"
" Files must begin with an OO-Browser Environment path\n"
" name. The next line must be a label, which indicates the\n"
" root node. Optionally, lists containing labels may\n"
" follow. Each child label is indented two spaces more \n"
" its parent. Lists of labels are nested to produce trees. \n"
"\n"
" For example, a three-level binary tree is as follows:\n"
"\n"
" ^^c++-^^~/OOBR\n"
" root node level1\n"
" level2-1\n"
" level3-1\n"
" level3-2\n"
" level2-2\n"
" level3-3\n"
" level3-4\n"
"\n"
"X11 Resources\n"
"\n"
" Various settings in the program can be manipulated by \n"
" using X11 resources, specified either on the command\n"
" line or in a resource setting file. The supported \n"
" resources are:\n"
"\n"
" tree.font: Sets the font of the label nodes.\n"
" Default is \"fixed\".\n"
"\n"
" tree.backgroundColor:\n"
" Sets the background color of the \n"
" canvas. Default is \"white\".\n"
"\n"
" tree.treeColor: Sets the color of the displayed tree.\n"
" Default is \"black\".\n"
"\n"
" tree.splitColor:\n"
" Sets the color of split contours which\n"
" appear during a dynamic update.\n"
" Default is \"goldenrod\".\n"
" \n"
" tree.highlightColor:\n"
" Sets the color of highlighted nodes.\n"
" Default is \"OrangeRed\".\n"
"\n"
"Help\n"
"\n"
" If you are reading this, chances are that you found the\n"
" Help button on the menubar. \n"
"\n"
"Author\n"
" \n"
" A number of people have contributed to the evolution of this\n"
" tree handling program: Mark L. Stern, Stephan Zachwieja,\n"
" Torgeir Veimo, Bob Weiner, Martin Buchholz, Steve Baur and\n"
" Kirill Katsnelson. The other authors have granted Bob Weiner\n"
" rights to distribute any of their work in this code as part of\n"
" the OO-Browser.\n";
|