<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<apichanges>

    <apidefs>
        <apidef name="general">Visual Library API</apidef>
    </apidefs>

    <changes>
        <change>
            <api name="general"/>
            <summary>States for non-registered objects</summary>
            <version major="2" minor="49"/>
            <date day="27" month="9" year="2017"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    When the scene is incrementally rendered, it may be possible that a model object becomes selected before some widgets are registered with the scene.
                    Hover, select, focus flags can be attached even to unregistered objects.
                </p>
                <p>
                    Implemented in <a href="https://github.com/apache/incubator-netbeans/pull/308">PR #308</a>
                </p>
            </description>
            <class name="ObjectScene" package="org.netbeans.api.visual.model" link="yes"/>
        </change>
        
        <change>
            <api name="general"/>
            <summary>The library API becomes stable</summary>
            <version major="2" minor="0"/>
            <date day="8" month="3" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                The library API becomes stable.
            </description>
            <package name="org.netbeans.api.visual" link="no"/>
            <issue number="95110"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Cut-distance can be specified for Triangle anchor shape</summary>
            <version major="2" minor="0"/>
            <date day="9" month="3" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                AnchorShapeFactory.createTriangleAnchorShape factory method now takes cut-distance parameter.
            </description>
            <class package="org.netbeans.api.visual.anchor" name="AnchorShapeFactory" link="yes"/>
            <issue number="91613"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Renaming non-standard names - FillLayout and SerialLayout</summary>
            <version major="2" minor="0"/>
            <date day="9" month="3" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                FillLayout class has been renamed to OverlayLayout. SerialLayout class has been renamed to FlowLayout.
		        At the same time their factory methods has bee renamed too.
		        LayoutFactory.createFillLayout method renamed to LayoutFactory.createOverlayLayout.
		        LayoutFactory.createHorizontalLayout method renamed to LayoutFactory.createHorizontalFlowLayout.
		        LayoutFactory.createVerticalLayout method renamed to LayoutFactory.createVerticalFlowLayout.
		        The original methods are deprecated now and are going to be removed for 6.0 Milestone 9. The new methods has been added.
                Also BorderLayout.createFancyDashedBorder method is going to be removed for 6.0 Milestone 9.
                Use BorderLayout.createDashedBorder(...,true) method instead.
		        Note that the LayouFactory.SerialAlignment enum name is not changed.
            </description>
            <class package="org.netbeans.api.visual.layout" name="LayoutFactory" link="yes"/>
            <issue number="97562"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Move deprecated classes out from the public API - ListWidget and ListItemWidget</summary>
            <version major="2" minor="0"/>
            <date day="9" month="3" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
        		ListWidget and ListItemWidget are not in final shape and are deprecated. Therefore they have been moved out from the public-API packages.
                Now they are copied in the org.netbeans.modules.visual.experimental.widget.general package.
                The original classes are still deprecated and going to be removed for 6.0 Milestone 9.
                Note that if you want to use the experimental widgets (outside of the public-API packages), you have to set an implementation dependency
                on org.netbeans.api.visual module. Please, do not use implemementation dependency for anything except this.
            </description>
            <package name="org.netbeans.api.visual.widget.general" link="yes"/>
            <issue number="97564"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Added ActionFactory.createActionMapAction methods</summary>
            <version major="2" minor="0"/>
            <date day="13" month="3" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Added an action whith is using ActionMap and InputMap for handling key-presses and a popup menu.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="97563"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Added LabelWidget.orientation property</summary>
            <version major="2" minor="1"/>
            <date day="3" month="4" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Added support for rendering vertical labels.
            </description>
            <class package="org.netbeans.api.visual.widget" name="LabelWidget" link="yes"/>
            <issue number="98641"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Widget.paintBorder method introduced</summary>
            <version major="2" minor="1"/>
            <date day="3" month="4" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Widget.paintBorder method introduced.
            </description>
            <class package="org.netbeans.api.visual.widget" name="Widget" link="yes"/>
            <issue number="98307"/>
        </change>

        <change>
            <api name="general"/>
            <summary>AnimatorListener added</summary>
            <version major="2" minor="2"/>
            <date day="10" month="4" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                AnimatorListener interface has been added. It allows listening to important events of Animator interface implementation.
                Built-in animators are accessible using getters on SceneAnimator class.
            </description>
            <class package="org.netbeans.api.visual.animator" name="AnimatorListener" link="yes"/>
            <issue number="99048"/>
        </change>

        <change>
            <api name="general"/>
            <summary>ConnectionWidgetCollisionsCollection added</summary>
            <version major="2" minor="2"/>
            <date day="10" month="4" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                New ConnectionWidgetCollisionsCollection interface added.
                It allows to obtain a context of currently routed ConnectionWidget.
                It can be used using RouterFactory.createOrthogonalSearchRouter factory method.
            </description>
            <class package="org.netbeans.api.visual.router" name="ConnectionWidgetCollisionsCollector" link="yes"/>
            <issue number="99054"/>
        </change>

        <change id="animatedimagewidget">
            <api name="general"/>
            <summary>ImageWidget handles animated images</summary>
            <version major="2" minor="3"/>
            <date day="4" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Now ImageWidget uses ImageObserver to track changes and animations of image.
                Do not use Utilities.loadImage method for loading animated images since it produces static images only - use Toolkit.createImage instead.
            </description>
            <class package="org.netbeans.api.visual.widget" name="ImageWidget" link="yes"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Mouse dragging event processing improved</summary>
            <version major="2" minor="3"/>
            <date day="5" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Mouse dragging event processing improved. MoveAction and others are now smoothly scrolling a view.
            </description>
            <issue number="101523"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Additional ActionFactory.createExtendedConnectAction with modifiers parameter added</summary>
            <version major="2" minor="3"/>
            <date day="5" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                An additional ActionFactory.createExtendedConnectAction method was added.
                It allows to speficied a combination of MouseEvent.*_DOWN modifiers that triggers invocation of the action.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="103289"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Widget.getCursorAt method introduced, ConnectionWidget.controlPointsCursor property added</summary>
            <version major="2" minor="3"/>
            <date day="5" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Now the mouse cursor is changed also based on its local location in a widget.
		        Therefore ConnectionWidget has controlPointsCursor property which defines a cursor for mouse over control points.
            </description>
            <package name="org.netbeans.api.visual.widget" link="yes"/>
            <issue number="104662"/>
        </change>

        <change>
            <api name="general"/>
            <summary>ActionFactory.createMouseCenteredZoomAction method introduced</summary>
            <version major="2" minor="3"/>
            <date day="5" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                ActionFactory.createMouseCenteredZoomAction method introduced.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="104718"/>
        </change>

        <change>
            <api name="general"/>
            <summary>AnchorShapeFactory.createArrowAnchorShape method introduced</summary>
            <version major="2" minor="4"/>
            <date day="8" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                AnchorShapeFactory.createArrowAnchorShape method introduced.
            </description>
            <class package="org.netbeans.api.visual.anchor" name="AnchorShapeFactory" link="yes"/>
            <issue number="105499"/>
        </change>

        <change>
            <api name="general"/>
            <summary>GraphLayoutFactory.createTreeGraphLayout added</summary>
            <version major="2" minor="4"/>
            <date day="8" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                TreeGraphLayout added.
            </description>
            <class package="org.netbeans.api.visual.graph.layout" name="GraphLayoutFactory" link="yes"/>
            <issue number="105278"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Zoom actions are using Ctrl key modifier of invocation</summary>
            <version major="2" minor="4"/>
            <date day="8" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility semantic="incompatible" modification="yes"/>
            <description>
                All built-in zoom actions are using modifiers from Scene.getInputBindings().getZoomActionModifiers() method.
		Default value has been changed from nothing to Ctrl key which backward-incompatible change affecting all users.
		A part of the change InputBindings class has been introduces and assigned to a Scene.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="104976"/>
        </change>

        <change>
            <api name="general"/>
            <summary>VerticalFlowLayout and HorizontalFlowLayout calculates with weights</summary>
            <version major="2" minor="4"/>
            <date day="8" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                When a widget is using VerticalFlowLayout or HorizontalFlowLayout and a child widget has a Number constraint assigned,
                then the Number value represent a radio in with the remaining gap in the widget is split and added to particular child widget.
		See test.layout.WeightFlowLayoutTest for example.
            </description>
            <class package="org.netbeans.api.visual.layout" name="LayoutFactory" link="yes"/>
            <issue number="105390"/>
        </change>

        <change>
            <api name="general"/>
            <summary>ConnectionWidget.controlPointCutDistance property introduced to render smoother corners of the path</summary>
            <version major="2" minor="5"/>
            <date day="25" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                ConnectionWidget.controlPointCutDistance property allows you to specify a distance where the path should be cut
                at each control point.
		See test.widget.ConnectionWidgetCutDistanceTest for example.
            </description>
            <class package="org.netbeans.api.visual.widget" name="ConnectionWidget" link="yes"/>
            <issue number="106508"/>
        </change>

        <change>
            <api name="general"/>
            <summary>VMDColorScheme introduced</summary>
            <version major="2" minor="5"/>
            <date day="25" month="6" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                VMDColorScheme abstract class has been introduced to define a UI of VMD widget.
                There are two predefined schemes available in VMDFactory class. Use them as a paratemer in widget constructors.
            </description>
            <class package="org.netbeans.api.visual.vmd" name="VMDColorScheme" link="yes"/>
            <issue number="105929"/>
        </change>

        <change>
            <api name="general"/>
            <summary>BorderSupport.getSwingBorder method introduced</summary>
            <version major="2" minor="6"/>
            <date day="1" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                BorderSupport.getSwingBorder method introduced to acquired a Swing border from a library border.
            </description>
            <class package="org.netbeans.api.visual.border" name="BorderSupport" link="yes"/>
            <issue number="103456"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Widget.getDependencies method added</summary>
            <version major="2" minor="6"/>
            <date day="1" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Widget.getDependencies method is added
            </description>
            <class package="org.netbeans.api.visual.widget" name="Widget" link="yes"/>
            <issue number="107446"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Popup menu action could be invoked by Shift+F10 key</summary>
            <version major="2" minor="6"/>
            <date day="1" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Popup menu action (created by ActionFactory.createPopupMenuAction method) could be invoked by an user using Shift+F10 key.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="108783"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Widget implements javax.accessibility.Accessible interface</summary>
            <version major="2" minor="6"/>
            <date day="1" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                The Widget implements javax.accessibility.Accessible interface.
            </description>
            <class package="org.netbeans.api.visual.widget" name="Widget" link="yes"/>
            <issue number="109023"/>
        </change>

        <change>
            <api name="general"/>
            <summary>ActionMapAction is not handling mouse events to show popup menu</summary>
            <version major="2" minor="6"/>
            <date day="1" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility semantic="incompatible" deletion="yes"/>
            <description>
                ActionMapAction (created by ActionFactory.createActionMapAction method) is not handling mouse events to show popup menu.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="110146"/>
        </change>

        <change>
            <api name="general"/>
            <summary>CycleFocusAction is using Shift+Tab keystroke for focus-to-previous action</summary>
            <version major="2" minor="6"/>
            <date day="1" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility semantic="incompatible" modification="yes"/>
            <description>
                CycleFocusAction (created using ActionFactory.createCycleFocusAction method) is using Shift+Tab keystroke for focus-to-previous action.
                Previously it was Ctrl+Tab keystroke.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="110389"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Accesibility support improved</summary>
            <version major="2" minor="6"/>
            <date day="1" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility semantic="incompatible" modification="yes"/>
            <description>
                The old logic of resolving accessible context was wrong and was replaced be a logic which by default creates a tree structure
                of Accessible object that copies the structure of widgets in a scene.
            </description>
            <class package="org.netbeans.api.visual.widget" name="Widget" link="yes"/>
            <issue number="108856"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Accurate LabelWidget rendering using glyph vector</summary>
            <version major="2" minor="7"/>
            <date day="10" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                LabelWidget now has useGlyphVector property. If true then the text in a LabelWidget is converted into glyph-vector (a shape)
		that is rendered. This allows accurate rendering independently on zoom-factor of a scene.
                Note that the glyph-vector rendering is slower than regular rendering.
            </description>
            <class package="org.netbeans.api.visual.widget" name="LabelWidget" link="yes"/>
            <issue number="98762"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Widget.validate(Graphics2D) method added to support off-screen rendering</summary>
            <version major="2" minor="7"/>
            <date day="10" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Scene.validate(Graphics2D) method has been added. It allows to validate a scene without having a main scene view created and shown on screen.
                See test.view.OffscreenRenderingTest example for usage.
            </description>
            <class package="org.netbeans.api.visual.widget" name="Widget" link="yes"/>
            <issue number="104474"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Added support to checking AlignWith-actions with client areas</summary>
            <version major="2" minor="7"/>
            <date day="10" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                AlignWithMoveAction and AlignWithResizeAction allow checking client area of widget (widget boundary without border insets).
                There are 4 new methods in ActionFactory class introduces to allow specifying outerBounds parameter.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="105285"/>
        </change>

        <change>
            <api name="general"/>
            <summary>WheelPanAction introduced</summary>
            <version major="2" minor="7"/>
            <date day="10" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                WheelPanAction has been added to allow vertical and horizontal scrolling of a scene view using mouse wheel.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <issue number="107774"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Bird view support added</summary>
            <version major="2" minor="7"/>
            <date day="10" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Bird view is a window that is always under your mouse-cursor and shows the scene with a specified zoom factor.
                A bird view can be created using Scene.createBirdView method. To enable bird view you need to call the BirdViewController.show method on returned controller instance.
            </description>
            <class package="org.netbeans.api.visual.widget" name="Scene" link="yes"/>
            <issue number="108510"/>
        </change>

        <change>
            <api name="general"/>
            <summary>GraphLayouSupport.setTreeGraphLayoutProperties method introduced</summary>
            <version major="2" minor="7"/>
            <date day="10" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                The GraphLayouSupport.setTreeGraphLayoutProperties method allows change properties of tree graph layout i.e. originX, originY, verticalGap, horizontalGap, vertical.
            </description>
            <class package="org.netbeans.api.visual.graph.layout" name="GraphLayoutSupport" link="yes"/>
            <issue number="111339"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Anchor.notifyRevalidate method</summary>
            <version major="2" minor="8"/>
            <date day="21" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                Missing Anchor.notifyRevalidate method has been added. Now the Anchor should receive all necessary notification.
                It is used by VMDNodeAnchor too.
            </description>
            <class package="org.netbeans.api.visual.anchor" name="Anchor" link="yes"/>
            <issue number="111987"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Routing policy support for ConnectionWidget</summary>
            <version major="2" minor="9"/>
            <date day="31" month="8" year="2007"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                ConnectionWidget allows to specify routing policy. The policy defines behaviour of path routing in ConnectionWidget.
                There are 4 values: Always-route, Update-end-points-only, Disable-routing-until-end-point-is-moved, Disable-routing.
                AddRemoveControlPointAction and MoveControlPointAction has new factory methods for automatic assignment of routing policy.
            </description>
            <class package="org.netbeans.api.visual.widget" name="ConnectionWidget" link="yes"/>
            <issue number="113573"/>
        </change>
                <change>
            <api name="general"/>
            <summary>Add scene export feature.</summary>
            <version major="2" minor="10"/>
            <date day="26" month="2" year="2008"/>
            <author login="krichards"/>
            <compatibility addition="yes"/>
            <description>
                Added a convenience class, SceneExporter, to allow users to export a Scene to any of a defined set of formats. This 
                export class would also contain functionality to return to polygonal points for each widget that is a child of the 
                layers on the scene.
            </description>
            <package name="org.netbeans.api.visual.export" link="yes"/>
            <issue number="128387"/>
        </change>
        <change>
            <api name="general"/>
            <summary>Add scene printing feature.</summary>
            <version major="2" minor="10"/>
            <date day="26" month="2" year="2008"/>
            <author login="krichards"/>
            <compatibility addition="yes"/>
            <description>
                Added a convenience class (within a separate 
                package) to allow users to print a Scene according to standard constraints.
            </description>
            <package name="org.netbeans.api.visual.print" link="yes"/>
            <issue number="128388"/>
        </change>
        <change id="GraphLayoutFactory.createOrthogonalGraphLayout">
            <api name="general"/>
            <summary>GraphLayoutFactory.createOrthogonalGraphLayout added</summary>
            <version major="2" minor="12"/>
            <date day="12" month="3" year="2008"/>
            <author login="krichard"/>
            <compatibility addition="yes"/>
            <description>
                OrthogonalGraphLayout added.
            </description>
            <class package="org.netbeans.api.visual.graph.layout" name="GraphLayoutFactory" link="yes"/>
            <issue number="129948"/>
        </change>
        <change id="GraphLayoutFactory.createHierarchicalGraphLayout">
            <api name="general"/>
            <summary>GraphLayoutFactory.createHierarchicalGraphLayout added</summary>
            <version major="2" minor="12"/>
            <date day="12" month="3" year="2008"/>
            <author login="krichard"/>
            <compatibility addition="yes"/>
            <description>
                HierarchicalGraphLayout added.
            </description>
            <class package="org.netbeans.api.visual.graph.layout" name="GraphLayoutFactory" link="yes"/>
            <issue number="129948"/>
        </change>
        <change id="ConnectionWidgetLayout-constraints">
            <api name="general"/>
            <summary>New Connection Widget Layout Constraints Introduced</summary>
            <version major="2" minor="13"/>
            <date day="22" month="4" year="2008"/>
            <author login="tspiva"/>
            <compatibility addition="yes"/>
            <description>
                ConnectionWidgetLayout constraints specify where a child component should be 
                placed in releationship to the connection widget.  However simply stating left, 
                right is not enough when nodes can be moved.  The new constraints specify which
                connection end instead of left, right top, and bottom.
            </description>
            <class package="org.netbeans.api.visual.layout" name="LayoutFactory" link="yes"/>
            <issue number="128348"/>
        </change>
        <change id="attachable-AnchorShape">
            <api name="general"/>
            <summary>New Attachable AnchorShape.</summary>
            <version major="2" minor="13"/>
            <date day="22" month="4" year="2008"/>
            <author login="tspiva"/>
            <compatibility addition="yes"/>
            <description>
                The new anchor shape can wrap an existing anchor shape and provide
                a new cut distance.  One example of when an attachable anchor 
                shape would be used is when a label on a connection widget is
                to be placed between the anchor shape, and the related widget.
            </description>
            <class package="org.netbeans.api.visual.anchor" name="AnchorShapeFactory" link="yes"/>
            <class package="org.netbeans.api.visual.anchor" name="AnchorShapeLocationResolver" link="yes"/>
            <issue number="128348"/>
        </change>
        <change id="ResourceTable">
            <api name="general"/>
            <summary>New Resource Table.</summary>
            <version major="2" minor="14"/>
            <date day="29" month="4" year="2008"/>
            <author login="tspiva"/>
            <compatibility addition="yes"/>
            <description>
                The resource table will allow for a central location for
                properties like font, color and paint objects. The resource 
                table will help enforce an applications look and feel. When a 
                property is updated in the resource table, all interested
                widgets will be notified of the change. The notification allows 
                widgets to update when a resource property changes.
            </description>
            <class package="org.netbeans.api.visual.widget" name="ResourceTable" link="yes"/>
            <class package="org.netbeans.api.visual.widget" name="Widget" link="yes"/>
            <class package="org.netbeans.api.visual.border" name="BorderFactory" link="yes"/>
            <class package="org.netbeans.api.visual.widget" name="Scene" link="yes"/>
            <issue number="128348"/>
        </change>
        <change id="GraphLayoutFactory.createHierarchicalGraphLayout2">
            <api name="general"/>
            <summary>GraphLayoutFactory.createHierarchicalGraphLayout added two additional
            calls to allow configuration of inverted and layout spacing.</summary>
            <version major="2" minor="15"/>
            <date day="24" month="6" year="2008"/>
            <author login="krichard"/>
            <compatibility addition="yes"/>
            <description>
                There are certain graphs which demand that the hierarchical layout 
                be inverted (target above source). One such graph would be a UML 
                class diagram. For this reason I propose adding a static call to 
                the GraphLayoutFactory to allow for an "inverted" flag to be provided. 
                The default behavior sets inverted to false.
                
                Another call to be added the the GraphLayoutFactory would include 
                "inverted", "horizontal spacing", and "layer spacing" (vertical). 
                The default all remain the same.
            </description>
            <class package="org.netbeans.api.visual.graph.layout" name="GraphLayoutFactory" link="yes"/>
            <issue number="138104"/>
        </change>
        <change>
            <api name="general"/>
            <summary>Added interface that extends EditorController for ability to query for invocation type</summary>
            <version major="2" minor="16"/>
            <date day="25" month="8" year="2008"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                 <a href="@TOP@/org/netbeans/api/visual/action/InplaceEditorProvider.TypedEditorController.html"><code>InplaceEditorProvider.TypedEditorController</code></a>
                contains <code>getEditorInvocationType()</code> which returns <a href="@TOP@/org/netbeans/api/visual/action/InplaceEditorProvider.EditorInvocationType.html">invocation type</a>  
                (<code>MOUSE</code>, <code>KEY</code>, <code>CODE</code>).
            </description>
            <class package="org.netbeans.api.visual.action" name="InplaceEditorProvider" link="yes"/>
            <issue number="144123"/>
        </change>
        <change>
            <api name="general"/>
            <summary>Support for contiguous selection action added (factory method+provider+event)</summary>
            <version major="2" minor="17"/>
            <date day="7" month="9" year="2008"/>
            <author login="dkaspar"/>
            <compatibility addition="yes"/>
            <description>
                <a href="@TOP@/org/netbeans/api/visual/action/ActionFactory.html#createContiguousSelectAction-org.netbeans.api.visual.action.ContiguousSelectProvider-">
                    <code>ActionFactory.createContiguousSelectAction</code></a> creates contiguous selection action.
                <a href="@TOP@/org/netbeans/api/visual/action/ContiguousSelectProvider.html"><code>ContiguousSelectProvider</code></a>
                provides logic for selection action. 
                <a href="@TOP@/org/netbeans/api/visual/action/ContiguousSelectEvent.html"><code>ContiguousSelectEvent</code></a>
                is an event for <code>ContiguousSelectProvider</code>.
            </description>
            <class package="org.netbeans.api.visual.action" name="ActionFactory" link="yes"/>
            <class package="org.netbeans.api.visual.action" name="ContiguousSelectProvider" link="yes"/>
            <class package="org.netbeans.api.visual.action" name="ContiguousSelectEvent" link="yes"/>
            <issue number="144139"/>
        </change>
        <change>
            <api name="general"/>
            <summary>Enhancement of the old layout and adding the possibility of minimizing the gaps between nodes.</summary>
            <version major="2" minor="25"/>
            <date day="17" month="5" year="2010"/>
            <author login="ep-nb"/>
            <compatibility addition="yes"/>
            <description>
                The old layout was improved in a way that nodes in a subtree are vertically aligned by the center of the super nodes. Also the possibility of overlapping in the old layout was removed by adding an approach based on the envelope of the (sub)trees.
                The second improvement was done by adding the possibility of minimizing the gaps between nodes. If a tree was very wide, the old layout used a lot of space. To prevent this the new algorithm with the possibility of minimization of gaps is based on the envelope. Therefore subtrees move as close together as possible. 
            </description>
            <class package="org.netbeans.api.visual.graph.layout" name="GraphLayoutFactory" link="yes"/>
            <class package="org.netbeans.api.visual.graph.layout" name="GraphLayoutSupport" link="yes"/>
            <issue number="178705"/>
        </change>
        <change>
            <api name="general"/>
            <summary>Widget Implements Lookup.Provider</summary>
            <version major="2" minor="36"/>
            <date day="29" month="11" year="2012"/>
            <author login="jhavlin"/>
            <compatibility addition="yes"/>
            <description>
                Class <code>Widget</code> implements interface
                <code>Lookup.Provider</code>. It already contains method
                <code>getLookup()</code>.
            </description>
            <class package="org.netbeans.api.visual.widget" name="Widget"/>
            <issue number="216581"/>
        </change>

        <change>
            <api name="general"/>
            <summary>Pan action allows change of invoking mouse button</summary>
            <version major="2" minor="40"/>
            <date day="24" month="7" year="2013"/>
            <author login="mantlik"/>
            <compatibility addition="yes"/>
            <description>
                Built-in pan action is using button from <code>Scene.getInputBindings().getPanActionButton()</code> method.
		Default value remains <code>MouseEvent.BUTTON2</code>, i.e. mouse wheel, which is compatible with the previous
                implementation.
            </description>
            <class package="org.netbeans.api.visual.laf" name="InputBindings" link="yes"/>
            <issue number="233296"/>
        </change>

    </changes>

    <htmlcontents>
    <head>
      <title>Change History for the Visual Library API</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="@TOP@/overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>This document lists changes made to the <a href="@TOP@/overview-summary.html">Visual Library API</a>.
Please, ask on the users@graph.netbeans.org mailing list if you have any question about the details of a change,
or are wondering how to convert existing code to be compatible.</p>

      <hr/>
      <standard-changelists module-code-name="org.netbeans.api.visual"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
