Graph Window
============
	The graph window displays the currently active class graph.
It attempts to scale and place the graph so that the complete current
graph is within view.

Right button [Selecting]
	Clicking on a node will select that node (just as it does in
the Class listing below), and display the relevant class in the text
window.

Middle button [Moving Nodes]
	Nodes may be moved by clicking and dragging with the middle
mouse button.

Left button [Recenter Graph]
	Clicking on the left button will make the currently selected
node visible in the graph window

Left slider:
	This is responsible for scaling the graph.
See the bugs section - there are bad interactions between scaling and
scrolling.

Horizontal vs. Vertical view
============================
	The graph may be laid out either from top to bottom (vertically)
or from left to right (horizontally).  The default style is determined
by the variable gHorizontalGraph, and may be toggled using the menu
item "Horizontal Graph"

Separating out the Graph Window
===============================
	You can choose to view the graph in a separate window by
choosing the Multi Window configuration from the configuration menu.
You will have to restart the browser to have this take effect. 


Speed
=====
	Updating the graph can be time-consuming for large graphs. For faster,
purely textual browsing, turn off Graph Updating in the graph menu.


Implementation
--------------
The implementation of the graph pane may be found in the file browserGraph.tcl

Functions
---------
graphCreate
	Create the graph for a given canvas and window size. Name is
	in gGraphFrame 
	.c is the main window with the canvas
	.scale is the scale widget
graphUpdate
	Get data from sather end to display a new graph (either because
	of changes in what's visible or because of choice of new node).
	(gCurNodeName)


Bindings
--------
	<1> is bound to node selection graphSelectNodeBind
	<2> is bound to  node movement graphNodeBeginMoveBind
	<b2-motion> continuation of motion
	<b2-buttonrelease> end of node movement
	<3> is bound to graph recentering graphRecenter

Edge (arrow) tags:      [See proc graphConnect]
                  ${srcName} 
                  ${destName} 
                  arrow${srcName} 
                  arrow${destName} 
                  arrow  
                  [one of the following tags, depending on the type of edge
        	        subtype 
			moduleContains 
			include
                  ]

Note: graphMoveArrowsTouching uses the first 2 tags to redraw the arrow.
 and the second 2 tags to determine arrows touching a node
Node tags:
           ${fullNodeText}     node     node${fullNodeText}    ${nodeText} 
+ [one of:  abstract  	concrete     	module            ]


Private functions
graphMakeTextNodeAt - construct text node
graphConnect 	    - connect nodes
graphSelectNodeBind - select a particular node. calls updateForClass
graphClear - delete all nodes/edges
graphZoom  - zoom the graph to the scale indicated by the .scale window
graphHighlight	    - highlights nodes and edge colors to colors set in
graphSetFonts 	    - set the node fonts to the ones mentioned in 
			browserFontsNColors.tcl	
graphSetScale (set scale to new value)
graphReZero   - Reset view to upper left corer
graphRecenter - Recenter around selected node

Node movement:
graphMoveArrowsTouching
		- move all arrows touching a node to its new position
graphNodeBeginMoveBind
graphNodeContinueMoveBind
graphNodeEndMoveBind







