A tree drawing widget for Mozart/Tk
The TkTreeWidget provides a class TreeWidget (derived from Tk.frame)
that can be used to draw trees (what a surprise!).
The tree layout algorithm is borrowed from the Oz Explorer.
The TreeWidget has to be created by calling something like
MyTreeWidget = {New {MakeTreeWidget Helper}}
The Helper contains all the information you want to provide about what
your nodes should look like. You can find the specification for a
helper here. The creation of the widget and
an example helper can be found in the examples subdirectory.
For the nodes the tree is built of, the object oriented syntax of Oz
has been used. That means that the tree you want to display must be
built of objects of some node class. The TreeWidget provides a node
class that your objects must inherit (it contains all the necessary
methods for layout and visualization).
In addition, your nodes have to match a certain interface:
Every node must provide a getChildren($) - Method.
In the examples subdirectory you will find a functor in the file
node.oz that you can use as a skeleton for your node class.
Drawing the tree is then easy - just call
{MyTreeWidget redrawTree(RootNode)}
with the root node of your tree as an argument.
The layout and drawing work incrementally. That means that you can
built a partial tree, display it, and then add subtrees. These changes
can only be displayed if you tell the TreeWidget so! This is how you
can do that:
For every new node N, call
{N dirtyUp}
(which marks the new node and all its parents as "dirty" - to be
redrawn.) Then call
{MyTreeWidget redrawTree(RootNode)} again - thats it!
There are several other things you can do with nodes, e.g. hide subtrees, select nodes etc. Please take a look at the examples that make use of all the features.