<?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/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@netbeans.apache.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>
