Changes from JGraph 3.4.1 to JGraph 4.0:
========================================

- Replaced ValueChangeHandler with GraphLayoutCache.valueForCellChanged
- Moved createPoint, createRect to AttributeMap
- Added AttributeMap, factory method in GraphModel
- Fixed GraphEd add/remove point with shift
- Replaced Map with AttributeMap (major API change)


Changes from JGraph 3.4 to JGraph 3.4.1:
========================================

Disables some default behaviour, allows spline and bezier edges
with an arbitrary number of control points, fixes minor bugs.


Changes from JGraph 3.3 to JGraph 3.4:
======================================

Can handle overlapping edges, makes inner handles static,
moves some control methods to handles. Minor API changes.


Changes from JGraph 3.2 to JGraph 3.3:
======================================

Supports view-local attributes, sizeable in-place editors, sizing
and moving along one axis, and offers a series of minor
API changes and bug fixes. Includes latest examples.


Changes from JGraph 3.1 to JGraph 3.2:
======================================

Can draw labels along edges, uses double precision coordinates, fixes handling
of negative coordinates and in-place editing, adds map to default graph model.


Changes from JGraph 3.0 to JGraph 3.1:
======================================

Ant-based build environment. BSD-style license. A series of bug fixes and minor 
API changes.


Changes from JGraph 2.2.2 to JGraph 3.0:
========================================

This is a package renaming change and directory cleanup. More changes for 3.x 
are planned.


Changes from JGraph 2.2.1 to JGraph 2.2.2:
==========================================

This release fixes major bugs in the clipboard, as well as the ordering
of cells in the clipboard, and adds a hook in the EdgeRenderer class.



Changes from JGraph 2.2 to JGraph 2.2.1:
========================================

This is a bug fix release that fixes a bug in the clipboard. Some minor
API changes go with this release..



Changes from JGraph 2.1.1 to JGraph 2.2:
========================================

Painting performance improvements, cleaned up API, removed dependency 
between ParentMap and GraphModel, added clone method, added methods to 
access the previous state of the model after a change, new vertex
renderer constructor, and numerous bug fixes.



Changes from JGraph 2.1 to 2.1.1
================================

Minor changes such as bean property methods and empty constructor added to 
ConnectionSet for XMLEncoding, added Null-Check to isCellEditable, fixed 
shared points bug in DefaultEdge, disable autosize during in-place edit.


Changes from JGraph 2.0 to 2.1
==============================

Moved all GraphCell dependencies to the GraphModel, added multiple grid styles,
new font attribute, and the API is now ready for combined port/vertex cells.
Bug fixes include improved live-preview, better zoom/grid integration, handling
of negative coordinates, and minor bug fixes. Java 1.4 is the default version.



Changes from JGraph 1.0.7 to 2.0
================================

This release has a new API with new features. The get an overview of the 
most important changes and how they affect your code you should read the
"New Features" and "Upgrading from 1.0.x" chapters.

New Features:
-------------

* Cell Visiblity:
  The GraphView, which is now called GraphLayoutCache offers a set of methods
  to show/hide cells, namely the setVisible method. This method fully supports
  undo/redo and in contrast to the earlier implementation using the visible
  attribute, this implementation does not allocate memory for invisible cells
  in a cache. The GraphLayoutCache contains built-in functions to automatically
  show edges between visible cells. When inserting and editing cells in a
  partial view, that is, one that does not show all cells of the model, then
  you should use the GraphLayoutCache's insert and edit method to allow the
  view to make the cells automatically visible (this way, the cell becomes
  visible in the view where is was inserted. The view (aka. cache) can be set 
  up to insert new edges automatically in all views where the source and target
  ports are visible.
  Use the following GraphLayoutCache members to control automatic display:
  - showAllEdgesForVisibleVertices: Show edges on insert or change if their
    source and target vertex is visible
  - showEdgesOnShow: Show edges if their source and target vertex is displayed
  - hideEdgesOnHide: Hide edges if their source and target vertex is hidden
  - hideEdgesOnBecomeInvisible: Hide edges if their source and target becomes
    invisible (for example after removal)
  These members are set to true by default.
  Note: This feature allows to implement collapse/expand of groups.

* View-Local Attributes:
  In the 1.0.x version, the GraphModel decided if it was an attribute store by
  use of the isAttributeStore method. In 2.0.x, it is the view who decides
  which attributes are view-local and which are global. Also, the edit method
  can now be called with a single attribute map that uses cells as the keys.
  The GraphLayoutCache provides a hook for subclassers, namely the
  createLocalEdit method to implement attribute splitting. The CellView's
  implementation was changed to override the global attributes with the
  view-local ones for. To enable this feature the code must use the
  GraphLayoutCache's edit, insert and remove methods instead of the model's.
  The view analyzes these method arguments, and extracts the view-local
  attributes before updating the model for the change.
  Note: This new feature allows more fine-grained control of view-local and
  global attributes. By removing the isAttributeStore and isOrdered methods
  it is not any more required that the model is aware of this feature. The 
  ROUTING and POINTS attributes should be kept at the same location.
  Tip: Use GraphLayoutCache.rememberCellViews to control if view-local
  attributes should be remembered for hidden cells.

* Edge Routing & Self References:
  A new attribute ROUTING was added that is interpreted by the EdgeView. The
  values for this key must implement the Edge.Routing interface, which extends
  the Serializable interface. The GraphConstants class provides a static instance
  ROUTING_SIMPLE of the DefaultEdge.DefaultRouting class. As the name implies this
  is the default implementation of the Routing interface. It allows simple routing
  and handles self-references.

* Smaller Command History:
  The command history does only store the actual change, resulting in a smaller
  command history. In earlier versions, the complete state of all changed cells
  and views was stored.


API Changes:
------------
(Only the most important changes are listed below.)

Removed Members:
* GraphConstants.createPropertyMap
* GraphModel.isOrdered
* GraphModel.isAttributeStore
* GraphConstants.is/setVisible
* CellRenderer.supportsAttribute
* AbstractCellView.isControlAttribute

New members:
* BasicGraphUI.is/setSnapSelectedView
  A view under mousepointer may be snapped to the grid lines or moved by a
  constant increment during a drag operation based on this value.
* Edge.Routing
* GraphConstants.ROUTING_SIMPLE
* DefaultEdge.DefaultRouting class
* GraphConstants.get/setRouting
* GraphConstants.createAttributes
  This is a helper method that may be used to create an attribute map
* GraphLayoutCache.reset, is/setVisible, partial, ordered
* DefaultGraphModel.getSource/TargetVertex
  Static helper method that calls getParent(getSource/Target) on the model
* GraphLayoutCache.hiddenSet
  Used to remember local attributes of visible cells
* JGraph.VERSION (use JGraph -version)
* VertexRenderer.paintSelectionBorder
  Provided for subclassers to control drawing the selection border
* VertexRenderer.is/setHideGroups
  Controls whether groups are fully painted by the renderer
* Provide a handleEditTrigger Hook in BasicGraphUI.MouseHandler

Changes:
* GraphView renamed to GraphLayoutCache
  In accordance with JTree.TreeLayoutCache
* JGraph.get/setView renamed to JGraph.get/setGraphLayoutCache
  To reflect this change
* JGraph.SnapSize renamed to Tolerance (including getter, setter etc.)
* JGraph.convertValueToString support view-local values
  The CellView decides what label to display
* DefaultGraphCell.setAttributes renamed to changeAttributes
  Setter and getter methods should be used for bean properties.
* Port.add/remove renamed to Port.addEdge/removeEdge
  (see http://sourceforge.net/forum/forum.php?thread_id=773281&forum_id=140880)
* GraphConstants.ARROW prefix added to arrow styles
* GraphConstants.STYLE prefix added to line styles
* getPerimterPoint method was moved to the renderer
* GraphViewChange.getAttributeMap renamed to getAttributes
* GraphModelChange.getStoredAttributeMap renamed to getPreviousAttributes
* DefaultGraphModel.handlePropertyMap renamed to handleAttributes
* importData may return false to signal sender to not remove cells
  (Override importDataImpl instead of importData in GraphTransferHandler)
* DefaultGraphSelectionModel.isChildrenSelectable now supports a cell argument
* GraphLayoutCache.toBack/toFront take cells as arguments
* GraphModel.insert and edit Argument order unified


Fixed bugs:
-----------
  
* Rounding erros on large zoom levels removed:
  The BasicGraphUI.RootHandles implementation did not work property for
  large zoom levels. Thanks to Jenya for the patch!
* The maximum number of edges to paint in live-preview is now MAXCELLS
* EdgeHandle does now support the SHIFT-key for constrained moving
* Added some accessor methods to BasicMarqueeHandler for subclassers
* BasicGraphUI.PropertyChangeListener calls repaint after GraphLayoutCache change
* JGraph.setGraphLayoutCache checks and updates the cache's model if necessary
* Vertices are not removed when their last port is removed dynamically
  Groups are still automatically removed when their last child cell is removed
* EdgeRenderer now cached the created Shape in the corresponding EdgeView
* BasicGraphUI.isDescendant uses GraphModel interface to return its data
* Live preview during real DND (only for JDK < 1.4.0, see BasicGraphUI line 28)
* DefaultEdge.constructor offers user object und boolean (allows children)
* JGraph.disconnectOnMove must check the CONNECTABLE/DISCONNECTABLE attributes
* Vertex, Port and Edge may carry the CONNECTABLE/DISCONNECTABLE attributes
* NPE on edge change when new the port was not visible in other view removed
* Groups may contain ports (Concurrency side-effects in EdgeRenderer.createShape)
* Cache the bounds property of groups and recompute on change of children only
* GetBounds-Infinite-Loop solved by exluding childedges between childs to group
* Propagate CellView.update to parent instead of child (bubble up)
* TransferHandler now supports move and DnD across multiple views, models and JVMS
* Clone edges when reconnected and the Control key is pressed
* ExecutableGraphChange interface added to execute all changes in model (Delegation)
  Also the GraphLayoutCache's changes are executed and dispatched by the model
* In-place editing from empty to non-empty content is incorrectly undone
* Removed in-place manipulation of BOUNDS-attribute in SizeHandle and RootHandle
* Changed execution order of compound edits: first model then args in-order
* Use GraphModel interface in DefaultGraphModel.getRoots only (no typecast)
* GraphLayoutCache.getMapping may return null (if cell is not visible)
* GraphUndoManager.redo throws CannotRedoException instead of CannotUndoException
* Handles.initOffscreen is protected instead of package private


Other changes:
--------------

* To-do list added:
  A new to-do list for JGraph was added. The list is intended for developers
  as a roadmap for additional features, examples and research activities.
* Version Naming Changed:
  The new version naming uses Swiss cities, where each City denotes a major
  release of the API. This means, all JGraph 2.0.x are said to be based on
  the Geneva API.
* New JGraphpad Administrator:
  Please welcome Van Woods as the new JGraphpad administrator!
  See http://sourceforge.net/forum/message.php?msg_id=1833812
* JGraphpad updated:
  JGraphpad ported to JGraph 2.0. Release date is later this week.
* Examples updated:
  All example have been updated to use JGraph 2.0. Currently, the examples are
  only available for download. The CVS repository still contains the old code.
* Website updated:
  Many minor changes and updates on the website. Main changes include an
  optional license fee and donate button, a new banner and some additional
  links in the showcase etc.


Upgrading from 1.0.x:
---------------------

  Here is an example. Please note the following in the example below:

  => We use Cells as keys to create the nested map instead of CellViews
  => We use the GraphLayoutCache's edit method instead of the model's
  => The order of the edit/insert method's arguments has changed
  => We use graph.getLayoutCache instead of graph.getView
  
  * JGraph 1.0.x:

	if (!graph.getModel().isAttributeStore())
		cells = getView().getMapping(cells);
	Map viewMap = new Hashtable();
	for (int i = 0; i < cells.length; i++)
		viewMap.put(cells[i], GraphConstants.cloneMap(map));
	if (graph.getModel().isAttributeStore())
		graph.getModel().edit(null, viewMap, null, null);
	else
		graph.getView().edit(viewMap);

  * JGraph 2.0.x (Geneva Code):

	Map nested = new Hashtable();
	for (int i = 0; i < cells.length; i++)
		nested.put(cells[i], GraphConstants.cloneMap(map));
	graph.getGraphLayoutCache().edit(nested, null, null, null);

