<?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.

-->
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<apichanges>
<apidefs>
<apidef name="explorer">Explorer API</apidef>
</apidefs>
<changes>
    <change id="ScrollOnExpand">
        <api name="explorer"/>
        <summary>Expose scrollOnExpand property on TreeView.</summary>
        <version major="6" minor="73"/>
        <date day="13" month="12" year="2020"/>
        <author login="lkishalmi"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            It is now possible to set/get the <code>scrollOnExpand</code> property
            in TreeView.
        </description>
        <class package="org.openide.explorer.view" name="TreeView"/>
        <issue number="NETBEANS-5146"/>
    </change>
    <change id="HideIcons">
        <api name="explorer"/>
        <summary>Hide node icons in OutlineView and TreeView.</summary>
        <version major="6" minor="59"/>
        <date day="20" month="10" year="2014"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            It is possible not to show icons in OutlineView and in TreeView and it's descendants.
            Methods OutlineView.setShowNodeIcons(boolean)/isShowNodeIcons()
            and NodeRenderer.setShowIcons(boolean)/isShowIcons()
            are added for this purpose.
        </description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <class package="org.openide.explorer.view" name="NodeRenderer"/>
        <issue number="247556"/>
    </change>
    <change id="NoAutoComplete">
        <api name="explorer"/>
        <summary>Turn auto-complete in combo box editor off.</summary>
        <version major="6" minor="55"/>
        <date day="11" month="11" year="2013"/>
        <author login="saubrecht"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            Now it's possible to turn off the default autocomplete for in-line
            combo box editors by using "canAutoComplete" attribute to Boolean.FALSE on appropriate FeatureDescriptor.
        </description>
        <issue number="238038"/>
    </change>
    <change id="PropertySheetExtensions">
        <api name="explorer"/>
        <summary>PropertySheet extensions</summary>
        <version major="6" minor="47"/>
        <date day="6" month="9" year="2012"/>
        <author login="saubrecht"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            PropertySheet class has new methods which allow subclasses to provide custom
            popup menu, check expansion state, expand/collapse property categories,
            retrieve the selected property.
        </description>
        <class package="org.openide.explorer.propertysheet" name="PropertySheet"/>
        <issue number="217624"/>
    </change>
    <change id="OutlineView_setPropertyColumnAttribute">
        <api name="explorer"/>
        <summary>setPropertyColumnAttribute() method added to OutlineView</summary>
        <version major="6" minor="44"/>
        <date day="4" month="4" year="2012"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            In order to conveniently set attributes to column properties,
            setPropertyColumnAttribute() method is added to OutlineView.
            After OutlineView.setProperties() method was deprecated, the preferred
            way how to add columns is via addPropertyColumn()/setPropertyColumns().
            But then there's no Node.Property to set additional attributes on.
            This is why setPropertyColumnAttribute() method is introduced.
        </description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <issue number="208713"/>
    </change>
    <change id="OutlineView_with_quicksearch">
        <api name="explorer"/>
        <summary>QuickSearch attached to OutlineView</summary>
        <version major="6" minor="43"/>
        <date day="8" month="3" year="2012"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            Added <a href="@TOP@/org/openide/explorer/view/OutlineView.html#isQuickSearchAllowed--">OutlineView.isQuickSearchAllowed()</a>,
            <a href="@TOP@/org/openide/explorer/view/OutlineView.html#setQuickSearchAllowed-boolean-">OutlineView.setQuickSearchAllowed()</a>
            and <a href="@TOP@/org/openide/explorer/view/OutlineView.html#setQuickSearchTableFilter-org.openide.explorer.view.QuickSearchTableFilter-boolean-">OutlineView.setQuickSearchTableFilter()</a>
            methods to control quick search functionality on OutlineView.
            Interface <a href="@TOP@/org/openide/explorer/view/QuickSearchTableFilter.html">QuickSearchTableFilter</a>
            introduced to provide custom table cell data for quick search.
        </description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <class package="org.openide.explorer.view" name="QuickSearchTableFilter"/>
        <issue number="110686"/>
    </change>
    <change id="PropertyEnv.create">
        <api name="explorer"/>
        <summary>API method for creating a PropertyEnv instance</summary>
        <version major="6" minor="39"/>
        <date day="31" month="8" year="2011"/>
        <author login="tpavek"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            Added <a href="@TOP@/org/openide/explorer/propertysheet/PropertyEnv.html#create-java.beans.FeatureDescriptor-java.lang.Object...-">PropertyEnv.create</a>
            method for creating an instance of PropertyEnv for given property and beans (nodes).
            To be used when there is a need to initialize an ExPropertyEditor instance independently from
            PropertySheet or PropertyPanel infrastructure (e.g. before the property appears in UI).
        </description>
        <class package="org.openide.explorer.propertysheet" name="PropertyEnv"/>
        <issue number="201223"/>
    </change>
    <change id="slowRename">
        <api name="explorer"/>
        <summary>In-place rename can be processed on background</summary>
        <version major="6" minor="38"/>
        <date day="30" month="6" year="2011"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            By providing <a href="@TOP@/architecture-summary.html#property-slowRename">slowRename</a>
            property, nodes can request in-place rename to be finished on background.
        </description>
        <class package="org.openide.explorer.view" name="TreeView"/>
        <class package="org.openide.explorer.view" name="TreeTableView"/>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <issue number="190736"/>
    </change>
    <change id="BaseTable.setQuickSearchAllowed">
        <api name="explorer"/>
        <summary>Allows one to disable quick search in property sheets, either globally or per-instance.</summary>
        <version major="6" minor="37"/>
        <date day="10" month="6" year="2011"/>
        <author login="tomwheeler"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            Added methods <code>setQuickSearchAllowed(boolean)</code> and <code>isQuickSearchAllowed()</code>
            to BaseTable to control and query whether the quick search feature is enabled.  Since the BaseTable
            instance of a PropertySheet is private, <code>setQuickSearchAllowed(boolean)</code> and 
            <code>isQuickSearchAllowed()</code> delegate methods were also added to PropertySheet. This allows
            a developer control on a per-instance basis, though it is also possible to disable property sheet
            quick search globally by setting the <code>ps.quickSearch.disabled.global</code> system property
            to <code>true</code>.
        </description>
        <class package="org.openide.explorer.propertysheet" name="BaseTable" link="no" />
        <class package="org.openide.explorer.propertysheet" name="PropertySheet"/>
        <issue number="199349"/>
    </change>
    <change id="TreeView.quickSearchAllowed">
        <api name="explorer"/>
        <summary>It's possible to define whether the quick search is enabled or disabled in TreeView.</summary>
        <version major="6" minor="33"/>
        <date day="16" month="11" year="2010"/>
        <author login="theanuradha"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            Methods <code>setQuickSearchAllowed()</code> and <code>isQuickSearchAllowed()</code>
            added to TreeView to control quick search enable or disable.
        </description>
        <class package="org.openide.explorer.view" name="TreeView"/>
        <issue number="181452"/>
    </change>
    <change id="OutlineView.defaultActionAllowed">
        <api name="explorer"/>
        <summary>It's possible to define whether the default action is allowed or not in OutlineView.</summary>
        <version major="6" minor="32"/>
        <date day="4" month="10" year="2010"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            Methods <code>setDefaultActionAllowed()</code> and <code>isDefaultActionAllowed()</code>
            added to OutlineView to control invocation of the default action.
        </description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <issue number="190258"/>
    </change>
    <change id="OutlineView.setTreeHorizontalScrollBarPolicy">
        <api name="explorer"/>
        <summary>OutlineView can provide horizontal scroll bar in the tree column.</summary>
        <version major="6" minor="30"/>
        <date day="7" month="7" year="2010"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            In order to be able to provide horizontal scroll bar in the tree column,
            two methods are added: <code>getTreeHorizontalScrollBarPolicy()</code>
            and <code>setTreeHorizontalScrollBarPolicy()</code>.
        </description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <issue number="188130"/>
    </change>
    <change id="ListView.setShowParentNode">
        <api name="explorer"/>
        <summary>ListView can now display ".." item</summary>
        <version major="6" minor="28"/>
        <date day="24" month="4" year="2010"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>
            To simplify navigation "up" in the <code>ListView</code> one
            can turn on <a href="@TOP@/org/openide/explorer/view/ListView.html#setShowParentNode-boolean-">showParentNode</a>
            property.
        </description>
        <class package="org.openide.explorer.view" name="ListView"/>
        <issue number="35954"/>
    </change>
    <change id="OutlineView.setPropertyColumns">
        <api name="explorer"/>
        <summary><code>OutlineView.setPropertyColumns</code>,
                 <code>OutlineView.addPropertyColumn</code> and
                 <code>OutlineView.removePropertyColumn</code> added.
        </summary>
        <version major="6" minor="25"/>
        <date day="11" month="1" year="2010"/>
        <author login="tboudreau"/>
        <compatibility binary="compatible" source="compatible" deprecation="yes" deletion="no" addition="yes"/>
        <description>
            Added methods to manipulate the displayed columns of an OutlineView
            without needing to create prototype property objects, both making
            it simpler to use, and avoiding the common problem of properties
            not appearing because the prototype property does not use the
            exact type required.
            <p/>
            Deprecated <code>OutlineView.setProperties()</code>, as this was
            only needed for ease of replacement of TreeTableView.
        </description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <issue number="179397"/>
    </change>
    <change id="OutlineView.setTreeSortable">
        <api name="explorer"/>
        <summary><code>OutlineView.setTreeSortable</code> added.</summary>
        <version major="6" minor="24"/>
        <date day="21" month="12" year="2009"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>Added method to set or unset the tree column as sortable.</description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <issue number="178613"/>
    </change>
    <change id="TreeView.setAutoWaitCursor">
        <api name="explorer"/>
        <summary><code>TreeView.setAutoWaitCursor</code> added.</summary>
        <version major="6" minor="21"/>
        <date day="19" month="10" year="2009"/>
        <author login="t_h"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>Added method to control automatic setting of wait cursor when node is expanded.</description>
        <class package="org.openide.explorer.view" name="TreeView"/>
        <issue number="169353"/>
    </change>
    <change id="CheckNodes">
        <api name="explorer"/>
        <summary>Support for check-boxes displayed next to node icons.</summary>
        <version major="6" minor="18"/>
        <date day="8" month="3" year="2009"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>Nodes can have check-boxes rendered next to their icons or display names.
        </description>
        <class package="org.openide.explorer.view" name="CheckableNode"/>
        <issue number="159546"/>
    </change>    
    <change id="SetSelectedNodes">
        <api name="explorer"/>
        <summary>setSelectedNodes() does partial selection instead of throwing IllegalArgumentException when
        some of newly selected nodes are not under root context.</summary>
        <version major="6" minor="16"/>
        <date day="16" month="9" year="2008"/>
        <author login="t_h"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="no"/>
        <description>Nodes can be removed outside of AWT thread while e.g. view can
        try to select them. This generated IllegalArgumentException during checking if
        such a node is under root context. Now
        <a href="@TOP@/org/openide/explorer/ExplorerManager.html#setSelectedNodes-org.openide.nodes.Node:A-"><code>setSelectedNodes()</code></a>.
        does partial selection
        of valid nodes instead of throwing IllegalArgumentException.
        </description>
        <class package="org.openide.explorer" name="ExplorerManager"/>
        <issue number="145376"/>
    </change>
    <change id="OutlineView">
        <api name="explorer"/>
        <summary>Added OutlineView component which is a replacement for buggy TreeTableView.</summary>
        <version major="6" minor="15"/>
        <date day="29" month="5" year="2008"/>
        <author login="saubrecht"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no" addition="yes"/>
        <description>Added new OutlineView component which is a table with expandable 
        tree-like part and which replaces the current buggy TreeTableView.
        </description>
        <class package="org.openide.explorer.view" name="OutlineView"/>
        <issue number="33281"/>
    </change>
    <change id="ColumnDisplayNameWithMnemonicTTV">
        <api name="explorer"/>
        <summary>Added support for property ColumnDisplayNameWithMnemonicTTV.</summary>
        <version major="6" minor="12"/>
        <date day="2" month="11" year="2007"/>
        <author login="saubrecht"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no"/>
        <description>Added support for property ColumnDisplayNameWithMnemonicTTV. This
        property may be used to specify column names with mnemonic char using '&amp;' char.
        Such display name will be used in 'Change Visible Columns' dialog window.
        </description>
        <class package="org.openide.explorer.view" name="NodeTableModel"/>
        <issue number="113642"/>
    </change>
    <change id="setUseSubstringInQuickSearch">
        <api name="explorer"/>
        <summary>Added method TreeView.setUseSubstringInQuickSearch(boolean).</summary>
        <version major="6" minor="11"/>
        <date day="11" month="7" year="2007"/>
        <author login="dstrupl"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no"/>
        <description>Added method setUseSubstringInQuickSearch(boolean). This
        method allows using substring search for the typed in text in the quick
        search feature instead of the (default) prefix search.
        </description>
        <class package="org.openide.explorer.view" name="TreeView"/>
        <issue number="108729"/>
    </change>
     <change id="extendedDelete">
        <api name="explorer"/>
        <summary>Added an interface and a registration slot
        for explorer delete action interceptors.</summary>
        <version major="6" minor="10"/>
        <date day="15" month="6" year="2007"/>
        <author login="pnejedly"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no"/>
        <description>Added an interface ExtendedDelete that can be registered to
        handle deletion of selected nodes instead of the default implementation.
        </description>
        <class package="org.openide.explorer" name="ExtendedDelete"/>
        <issue number="76722"/>
    </change>

     <change id="descriptionAreaAndPopupConfig">
        <api name="explorer"/>
        <summary>Added setters to show/hide the description area and 
        enable/disable the popup menu</summary>
        <version major="6" minor="9"/>
        <date day="1" month="6" year="2007"/>
        <author login="tboudreau"/>
        <compatibility binary="compatible" source="compatible" deprecation="no" deletion="no"/>
        <description>Added setters for the visibility of the description area
        and availability of the popup menu to PropertySheet
        </description>
        <class package="org.openide.explorer.propertysheet" name="PropertySheet"/>
        <issue number="100170"/>
    </change>

    <change id="deleted-PropertySheetSettings">
        <api name="explorer"/>
        <summary>PropertySheetSettings was deleted</summary>
        <version major="6" minor="8"/>
        <date day="9" month="11" year="2006"/>
        <author login="rmatous"/>
        <compatibility binary="compatible" source="incompatible" deprecation="no" deletion="yes"/>
        <description>PropertySheetSettings was deleted from org.openide.explorer. 
        To ensure binary compatibility there was added dependency transformation that ensures 
        that for all modules that depend on org.openide.explorer with spec.version &lt; 6.8 is added additional dependency
        on org.openide.options with spec.version 6.6 during runtime.            
        </description>
        <class package="org.openide.explorer.propertysheet" name="PropertySheetSettings" link="no"/>
        <issue number="88769"/>
    </change>
    
    <change id="ExternalDragAndDrop.explorer">
        <api name="explorer"/>
        <summary>When an external object(s) is dragged over the Explorer, the drag
        events are passed to Nodes under the cursor.</summary>
        <version major="6" minor="7"/>
        <date day="30" month="5" year="2006"/>
        <author login="saubrecht"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description> <p>When an external object (e.g. file(s)) is dragged over the
            Explorer, the drag events passed to Nodes under the cursor. It means
            that the appropriate Node is asked whether the dragged object(s) can
            be dropped to it. The drag support classes will also provide appropriate
            visual drag feedback - change cursor shape and/or draw drop line indicator.
            </p>
            <p>When the object is dropped then the Node under the cursor will be
            asked to provide supported <code>PasteType</code>s that will handle
            the drop.</p>
        </description>
        <package name="org.openide.explorer.view" />
        <issue number="35228"/>
    </change>

    <change id="dnd.convertor.drag">
        <api name="explorer"/>
        <summary>
        	Dragging uses 
          Node.drag 
          and 
          ExClipboard.convert
</summary>
        <version major="6" minor="3"/>
        <date day="29" month="4" year="2005"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
        	  When doing drag and drop of nodes from explorer
            to another place in explorer the 
            <a href="@org-openide-nodes@/org/openide/nodes/Node.html">
						Node.drag</a> method is called when doing copy            
            and in both cases of copy or move the
            <a href="@org-openide-util-ui@/org/openide/util/datatransfer/ExClipboard.html">
		          ExClipboard.convert
    	      </a> method is called for Transferable containing
            all the nodes, so one can wrap the whole transfer with
            pre and post operations.
        </description>
        <package name="org.openide.explorer.view" />
        <issue number="57972"/>
    </change>
<change id="NodeTableModel.ColumnMnemonicCharTTV">
        <api name="explorer"/>
        <summary>Added a new <code>ColumnMnemonicCharTTV</code> property to <code>NodeTableModel</code>
</summary>
        <version major="5" minor="9"/>
        <date day="30" month="3" year="2005"/>
        <author login="saubrecht"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            The new property allows you to specify a mnemonic character for display names
            of <code>TreeTableView</code> columns.
        </description>
        <class package="org.openide.explorer.view" name="NodeTableModel"/>
        <issue number="56781"/>
    </change>
<change id="item-separator-attribute-for-StringArrayPropertyEditor">
       <api name="explorer"/>
       <summary>One can specify separator for property editor for <code>String[]</code> </summary>
       <version major="5" minor="7"/>
       <date day="18" month="3" year="2005"/>
       <author login="jtulach"/>
       <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible" deprecation="no" deletion="no" modification="no"/>
       <description>
         One can specify an item separator for properties using string array editor. For example
         following code:
         <pre xml:space="preserve">
           Node.Property np = new Node.Property (String[].class, ...);
           np.setValue ("item.separator", "-");        
         </pre>
         separates items returned from <code>getAsText</code> and parsed by <code>setAsText</code>
         by <q>-</q>. List of supported parameters can be found 
         <a href="@TOP@/org/openide/explorer/doc-files/propertyViewCustomization.html#core_editors_custom_parameters" shape="rect">here</a>.
       </description>
       <class package="org.openide.explorer.propertysheet" name="PropertyPanel"/>
       <issue number="56257"/>
     </change>
<change id="ExplorerActions.DeleteActionPerfomer">
        <api name="explorer"/>
        <summary>Nodes in explorer can supress default confirmation dialog during delete operation</summary>
        <version major="5" minor="6"/>
        <date day="11" month="3" year="2005"/>
        <author login="rkubacki"/>
        <compatibility modification="yes" semantic="compatible" binary="compatible" source="compatible" deprecation="no" addition="no" deletion="no"/>
        <description>
            Nodes that need to supress default confirmation dialog shown during delete action
            can do this if they return <code>Boolean.TRUE</code> from <code>Node.getValue(String)</code> 
            for attribute customDelete.
        </description>
        <issue number="56256"/>
    </change>
<change id="TreeView.dragActive">
        <api name="explorer"/>
        <summary>Fixed <code>TreeView.drag/dropActive</code> switcher</summary>
        <version major="4" minor="45"/>
        <date day="25" month="8" year="2004"/>
        <author login="jrechtacek"/>
        <compatibility modification="yes" semantic="compatible" binary="compatible" source="compatible" deprecation="no" addition="no" deletion="no"/>
        <description>
            The methods <code>TreeView.setDragSource(boolean)</code> and <code>TreeView.setDropTarget</code>
            can set drag/dropActive on/off. The drag source and drop target are enabled by default.
            Before the views were forced to be drag/drop active no matter what state was set.
        </description>
        <class package="org.openide.explorer.view" name="TreeView"/>
        <issue number="47672"/>
    </change>
<change>
        <api name="explorer"/>
        <summary>Added ExplorerUtils.getHelpCtx</summary>
        <version major="4" minor="40"/>
        <date day="14" month="6" year="2004"/>
        <author login="pnejedly"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            Add the utility method for computing the help id for a set
            of nodes with a fallback to provided default id.
        </description>
        <class package="org.openide.explorer" name="ExplorerUtils"/>
        <issue number="37543"/>
    </change>
<change>
     <api name="explorer"/>
     <summary>Deprecation of NodeRenderer.sharedInstance()</summary>
     <version major="4" minor="36"/>
     <date day="1" month="6" year="2004"/>
     <author login="tboudreau"/>
     <compatibility deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no" modification="no"/>
     <description>
     NodeRenderer.sharedInstance() is now deprecated.  Components which
     wish to render nodes should create their own private instance of
     NodeRenderer, to avoid one view's painting interfering with another's.
     </description>
     <class package="org.openide.explorer.view" name="NodeRenderer"/>
     <issue number="43148"/>
    </change>
<change id="delete-InplaceEditor.handleInitialInputEvent">
     <api name="explorer"/>
     <summary>Removal of org.openide.explorer.propertysheet.InplaceEditor.handleInitialInputEvent</summary>
     <version major="4" minor="17"/>
     <date day="9" month="12" year="2003"/>
     <author login="tboudreau"/>
     <compatibility deletion="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" modification="no"/>
     <description>
     This method was introduced post-3.5, and has proven unnecessary, as the
     event may effectively be dispatched to the component using dispatchEvent().
     It will instead be the responsibility of the component to determine if
     it has just been added to a container and should handle the event in some
     special way because of that.
     </description>
     <class package="org.openide.explorer.propertysheet" name="InplaceEditor"/>
     <issue number="37626"/>
    </change>
<change id="PropertyPanel-rewrite">
     <api name="explorer"/>
     <summary>Property panel rewrite, addition of set/getProperty methods and new constructors, deprecation of getPropertyEditor</summary>
     <version major="4" minor="17"/>
     <date day="9" month="12" year="2003"/>
     <author login="tboudreau"/>
     <compatibility deprecation="yes" addition="yes" modification="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no"/>
     <description>
     As part of the rewrite of the internals of PropertyPanel to use the new
     property sheet's infrastructure, users of PropertyPanel are encouraged
     to use Node.Property rather than PropertyModel objects to drive their
     PropertyPanel instances.  To that end, methods and constructors have been
     added in order to support using Node.Property objects. The method
     getPropertyEditor() has been deprecated, and the property change 
     PROP_PROPERTY_EDITOR will no longer be fired.  As documented, in the case
     of custom editors, its function has not changed, but for inline uses,
     there is no particular use for holding a reference to the property editor
     instance, so for inline uses it is no longer guaranteed to return the
     same property editor instance as previously - this is now the sole 
     responsibility of the Property object.  As this method was primarily used
     by the old property sheet, this is a low-impact change.
     </description>
     <class package="org.openide.explorer.propertysheet" name="PropertyPanel"/>
     <issue number="31896"/>
    </change>
<change id="ExplorerManager-action-factories">
     <api name="explorer"/>
     <summary>Copy, Cut, Paste and Delete Action Factory</summary>
     <version major="4" minor="14"/>
     <date day="21" month="11" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
     <description>
       As part of the work on separation of openide.jar into smaller parts 
       the existing <code>ExplorerActions</code> class and <code>ExplorerPanel</code>
       are being deprecated and replaced by new factory methods in 
       <code>ExplorerUtils</code> class. Use them to create actions 
       handling copy, cut, paste and delete on given ExplorerManager.
     </description>
     <class link="no" package="org.openide.explorer" name="ExplorerActions"/>
     <class link="no" package="org.openide.explorer" name="ExplorerPanel"/>
     <class package="org.openide.explorer" name="ExplorerUtils"/>
     <issue number="34758"/>
    </change>
<change id="boolean.editor.hints">
     <api name="explorer"/>
     <summary>
        Additional hints for boolean, Boolean properties
     </summary>
     <version major="4" minor="3"/>
     <date day="4" month="4" year="2003"/>
     <author login="tboudreau"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        Properties of type boolean or Boolean can now
        supply the following hint to the property editor:
        stringValues - a String[2] which will be used
        to replace the standard "true" or
        "false" displayed in the editor.
     </description>
     <issue number="32619"/>
    </change>
<change id="integer.editor.hints">
     <api name="explorer"/>
     <summary>
        Additional hints for int,Integer properties
     </summary>
     <version major="4" minor="3"/>
     <date day="4" month="4" year="2003"/>
     <author login="tboudreau"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        Properties representing instances of int or Integer can
        now supply the following hints to their property editors:
        stringKeys, intValues, codeValues.  The String[] keys will be
        displayed in a drop down in the propertysheet; the
        int[] values are used when a key of the corresponding
        index is selected;  the optional codeValues String[]
        can be used to supply custom text to getJavaInitializationString()
        for code generation.
        This replaces the functionality of the now deprecated
        ChoicePropertyEditor.
     </description>
     <issue number="20736"/>
     <issue number="5278"/>
     <issue number="31879"/>
    </change>
<change id="string.editor.hints">
     <api name="explorer"/>
     <summary>
        Additional hints for String properties
     </summary>
     <version major="4" minor="2"/>
     <date day="26" month="3" year="2003"/>
     <author login="tboudreau"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        Properties representing String instances can now supply
        the following additional hints: oneline, suppressCustomEditor
        and instructions.  These affect the behavior of the custom
        editor if invoked.  If these hints are not supplied, behavior
        will be the same as it always was.
     </description>
     <issue number="29294"/>
    </change>
<change>
     <api name="explorer"/>
     <summary>MenuView.MenuItem implements HelpCtx.Provider</summary>
     <version major="3" minor="38"/>
     <date day="13" month="2" year="2003"/>
     <author login="pnejedly"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        The HelpCtx of the underlying node is now exported through
        HelpCtx.Provider interface. For the API users, HelpCtx.findHelp
        keeps working the same way.
     </description>
     <class package="org.openide.explorer.view" name="MenuView"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>PropertyPanel.getState, PropertyEnv.add/removePropertyChanageListener</summary>
      <version major="2" minor="20"/>
      <date day="27" month="5" year="2002"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>Define interface that would allow to tell customizer that it should check
        user changed values and that it should commit values. PropertyPanel controls/obtains
        the value of the PropertyEnv.getState of the current property editor.
        Thus adding method PropertyPanel.getState () and firing property
        changes appropriatelly.
        Added public methods
        <code>PropertyPanel.getState()</code>,
        <code>PropertyEnv.addPropertyChangeListener(PropertyChangeListener)</code> and
        <code>PropertyEnv.removePropertyChangeListener(PropertyChangeListener)</code>.
        Added public static field
        <code>PropertyPanel.PROP_STATE</code>.
      </description>
      <class package="org.openide.explorer.propertysheet" name="PropertyPanel"/>
      <class package="org.openide.explorer.propertysheet" name="PropertyEnv"/>
      <issue number="23369"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Add set/getSelectionMode in TreeView</summary>
      <version major="2" minor="15"/>
      <date day="24" month="4" year="2002"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added public methods
        <code>TreeView.setSelectionMode(int)</code> and
        <code>TreeView.getSelectioMode()</code>.
      </description>
      <class package="org.openide.explorer.view" name="TreeView"/>
    </change>
<change>
        <api name="explorer"/>
        <summary>Add generic help support to property editors</summary>
        <version major="2" minor="7"/>
        <date day="6" month="3" year="2002"/>
        <author login="akemr"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description> New property PROPERTY_HELP_ID added to improve generic help 
        support to property editors.
        </description>
        <class package="org.openide.explorer.propertysheet" name="ExPropertyEditor"/>
        <issue number="19294"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Constructor DefaultPropertyModel (bean, propertyDescriptor) added</summary>
      <version major="2" minor="4"/>
      <date day="20" month="2" year="2002"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="no" deprecation="no" binary="compatible" source="compatible" semantic="compatible" deletion="no"/>
      <description>
        <p>
	       New constructor to make DefaultPropertyModel more easily usable with PropertyDescriptor created by hand 
      	       and not obtained from BeanInfo.        
        </p>
      </description>
      <class package="org.openide.explorer.propertysheet" name="DefaultPropertyModel"/>
      <issue number="20601"/>
  </change>
<change>
      <api name="explorer"/>
      <summary>The whole <code>org.openide.explorer.propertysheet.editors</code> package is deprecated</summary>
      <compatibility deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no" modification="no"/>
      <description>
        <p>
        The entire
        <code>org.openide.explorer.propertysheet.editors</code>
        package is generally deprecated
        and no longer included in Javadoc.
        </p>
        <p>
          As of 3.14, this package is again included in the Javadoc, though only
          only a few interfaces remain, and of these several are in fact
          deprecated, and the rest will probably be deprecated at some point.
        </p>
      </description>
      <package name="org.openide.explorer.propertysheet.editors"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>New property changesImmediate in <code>PropertyPanel</code>
</summary>
      <date day="22" month="8" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no">
        Added two public methods to class PropertyPanel: <code>public boolean
        isChangeImmediate();</code> and <code>public void
        setChangeImmediate(boolean b);</code>
      </compatibility>
      <description>
      The added property allows to control whether the changes fired from
property editor are immediately propagated to the value of the property
(more precisely to the property model).
      </description>
      <class package="org.openide.explorer.propertysheet" name="PropertyPanel"/>
    </change>
<change>
      <api name="explorer"/>
      <summary><code>PropertyEnv</code> can control validation state</summary>
      <date day="9" month="7" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        New constants and methods added to the class <code>PropertyEnv</code>:
<pre xml:space="preserve">public static final String PROP_STATE;
public static final Object STATE_VALID;
public static final Object STATE_NEEDS_VALIDATION;
public static final Object STATE_INVALID;
public void setState (Object state);
public Object getState ();
public void addVetoableChangeListener(VetoableChangeListener l);
public void removeVetoableChangeListener(VetoableChangeListener l);</pre>
        <br/>
        The added methods allow to modify the state of the "environment" from 
        a property editor. They also allow listening on such changes and
        veto the change if needed.
        The API documentation for the class <code>PropertyEnv</code> should
        provide information on what they do.
      </description>
      <class package="org.openide.explorer.propertysheet" name="PropertyEnv"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Moved validity check into <code>ExPropertyEditor</code>
</summary>
      <date day="30" month="10" year="2000"/>
      <compatibility addition="yes" deletion="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" modification="no">
        Deletion from newly added <code>PropertyEnv</code> only.
      </compatibility>
      <description>
        Minor change to the new class <code>PropertyEnv</code>: removed methods
        <code>set</code>/<code>isValid</code> from <code>PropertyEnv</code> and
        introduced new constant <code>PROP_VALUE_VALID</code> in the
        <code>ExPropertyEditor</code>.
      </description>
      <class package="org.openide.explorer.propertysheet" name="PropertyEnv"/>
      <class package="org.openide.explorer.propertysheet" name="ExPropertyEditor"/>
    </change>
<change>
      <api name="explorer"/>
      <summary><code>ExPropertyEditor</code> added and used</summary>
      <date day="25" month="10" year="2000"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        New interface <code>ExPropertyEditor</code> added to the package <code>org.openide.explorer.propertysheet</code>.
        It extends <code>PropertyEditor</code> allowing to pass information to the
        property editor by passing an instance of <code>PropertyEnv</code> class - this
        class was also added. To be able to pass the required information
        the <code>PropertyModel</code> interface was also extended to <code>ExPropertyModel</code>.
        <code>DefaultPropertyModel</code> was modified to implement the new interface
        <code>ExPropertyModel</code> (instead of <code>PropertyModel</code>).
      </description>
      <class package="org.openide.explorer.propertysheet" name="ExPropertyEditor"/>
      <class package="org.openide.explorer.propertysheet" name="DefaultPropertyModel"/>
      <class package="org.openide.explorer.propertysheet" name="PropertyEnv"/>
      <class package="org.openide.explorer.propertysheet" name="ExPropertyModel"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Property editor for <code>File</code> accepts hint <code>baseDir</code>
</summary>
      <date day="25" month="9" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        The property editor for <code>java.io.File</code> may now be given the
        property hint <code>baseDir</code> specifying a directory from which
        relative filenames edited by the editor may be resolved.
      </description>
    </change>
<change>
      <api name="explorer"/>
      <summary>Property editor for <code>DataObject</code> accepts hint <code>rootNode</code>
</summary>
      <version major="1" minor="41"/>
      <date day="19" month="10" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        The property editor for <code>org.openide.loaders.DataObject</code> may now be given the
        property hint <code>rootNode</code> specifying a root node of displyed nodes hierarchy.
        If omited filesystems repository root node is used instead.
      </description>
    </change>
<change id="PropertyDialogManager-removed">
      <api name="explorer"/>
      <summary><code>PropertyDialogManager</code> removed</summary>
      <date day="31" month="5" year="2000"/>
      <compatibility deletion="yes" source="incompatible" binary="compatible" semantic="compatible" deprecation="no" addition="no" modification="no">
        First broken, later restored binary compatibility in trunk and
        <code>boston</code>. Code referring to this class can generally be easily
        rewritten to simply embed the supplied component in a dialog and show that
        dialog.
      </compatibility>
      <description>
        Made inaccessible. No one should have been using this class outside its
        package to begin with, it was public by accident.
      </description>
      <class link="no" package="org.openide.explorer.propertysheet" name="PropertyDialogManager"/>
    </change>
<change id="SetDefaultValueAction-removed">
      <api name="explorer"/>
      <summary><code>SetDefaultValueAction</code> removed</summary>
      <date day="30" month="11" year="2000"/>
      <author login="jglick"/>
      <compatibility deletion="yes" source="incompatible" binary="compatible" semantic="compatible" deprecation="no" addition="no" modification="no"/>
      <description>
        Made inaccessible. No reason for it to have been public.
      </description>
      <class link="no" package="org.openide.explorer.propertysheet" name="SetDefaultValueAction"/>
    </change>
<change>
      <api name="explorer"/>
      <summary><code>BeanTreeView.selectionChanged</code> made protected, not public</summary>
      <date day="6" month="11" year="2000"/>
      <compatibility modification="yes" source="incompatible" binary="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        Method <code>selectionChanged</code> made protected, not public, to match
        the access mode of the method it was implementing in
        <code>TreeView</code>. Code calling it as public is erroneous.
      </description>
      <class package="org.openide.explorer.view" name="BeanTreeView"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Deserialization of explorer managers and panels may throw <code>SafeException</code>
</summary>
      <date day="9" month="3" year="2000"/>
      <author login="jglick"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        <code>readExternal</code> of <code>ExplorerPanel</code> or deserialization
        of <code>ExplorerManager</code> may throw <code>SafeException</code> to
        indicate a failure in the loading of the manager's handles, but the stream
        is OK.
      </description>
      <class link="no" package="org.openide.explorer" name="ExplorerPanel"/>
      <class package="org.openide.explorer" name="ExplorerManager"/>
    </change>
<change>
      <api name="explorer"/>
      <summary><code>MenuView.Acceptor</code> deprecated and not used</summary>
      <date day="5" month="9" year="2000"/>
      <compatibility deprecation="yes" binary="incompatible" source="incompatible" semantic="compatible" addition="no" deletion="no" modification="no">
        Subclasses accessing the <code>action</code> field will be broken.
      </compatibility>
      <description>
        Interface <code>MenuView.Acceptor</code> is now deprecated. It is
        recommended to use <code>nodes.NodeAcceptor</code> over
        <code>MenuView.Acceptor</code>, which will be probably removed entirely in
        future. The protected field <code>action</code> in both
        <code>MenuView.Menu</code> and <code>MenuView.MenuItem</code> has changed
        type to be <code>NodeAcceptor</code>.
      </description>
      <class package="org.openide.explorer.view" name="MenuView"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Set explored context while selecting nodes</summary>
      <date day="13" month="9" year="2000"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        New method <code>setExploredContext</code> added with a second parameter
        giving nodes which are to be selected.
      </description>
      <class package="org.openide.explorer" name="ExplorerManager"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Set explored context while selecting nodes (and throw an exception)</summary>
      <date day="20" month="2" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        New method <code>public final void setExploredContextAndSelection(Node
        value, Node[] selection) throws PropertyVetoException</code> added to the
        class <code>ExplorerManager</code>. It is replacement for the
        <code>setExploredContext</code> method which should throw the exception.
      </description>
      <class package="org.openide.explorer" name="ExplorerManager"/>
    </change>
<change>
      <api name="explorer"/>
      <summary>Table explorer views added</summary>
      <version major="1" minor="7"/>
      <date day="7" month="5" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        New explorer views permit viewing of a list of tree of nodes with
        properties displayed in tabular form.
      </description>
      <class package="org.openide.explorer.view" name="NodeTableModel"/>
      <class package="org.openide.explorer.view" name="TreeTableView"/>
      <class package="org.openide.explorer.view" name="ListTableView"/>
    </change>
</changes>
<htmlcontents>
<head>
<title>Change History for the Explorer API</title>
<link rel="stylesheet" href="prose.css" type="text/css"/>
</head>
<body>
<p class="overviewlink">
<a href="overview-summary.html">Overview</a>
</p>
<h1>Introduction</h1>
<h2>What do the Dates Mean?</h2>
<p>The supplied dates indicate when the API change was made, on the CVS
trunk. From this you can generally tell whether the change should be
present in a given build or not; for trunk builds, simply whether it
was made before or after the change; for builds on a stabilization
branch, whether the branch was made before or after the given date. In
some cases corresponding API changes have been made both in the trunk
and in an in-progress stabilization branch, if they were needed for a
bug fix; this ought to be marked in this list.</p>
<ul>
<li>The <code>release41</code> branch was made on Apr 03 '05 for use in the NetBeans 4.1 release.
Specification versions: 6.0 begins after this point.</li>
<li>The <code>release40</code> branch was made on Nov 01 '04 for use in the NetBeans 4.0 release.
Specification versions: 5.0 begins after this point.</li>
</ul>
<hr/>
<standard-changelists module-code-name="org.openide.explorer"/>
<hr/>
<p>@FOOTER@</p>
</body>
</htmlcontents>
</apichanges>
