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

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

    <!-- First, a list of API names you may use: -->
<apidefs>
   <apidef name="io">I/O APIs</apidef>
   <!-- etc. -->
</apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->

<changes>
    <change id="enhancedFoldHandleApi">
      <api name="io"/>
      <summary>Created new user-friendly methods for working with FoldHandle instances.</summary>
      <version major="1" minor="42"/>
      <date day="17" month="7" year="2013"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              Added methods that provide better info about state of fold
              handles, and methods that handle unexpected situations silently
              instead of throwing exceptions.
          </p>
      </description>
      <class package="org.openide.windows" name="FoldHandle"/>
      <issue number="232316" />
    </change>
    <change id="coloredLoggingText">
      <api name="io"/>
      <summary>Added LOG_SUCCESS, LOG_FAILURE, LOG_WARNING and LOG_DEBUG into IOColors.OutputType to be able to specify a color of logging messages.</summary>
      <version major="1" minor="40"/>
      <date day="25" month="4" year="2013"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              Added enum elements <code>LOG_SUCCESS, LOG_FAILURE, LOG_WARNING
              and LOG_DEBUG</code> into <code>IOColors.OutputType</code>
              that can be passed to get/setColor methods to have access
              to color of standard logging messages.
          </p>
      </description>
      <class package="org.openide.windows" name="IOColors"/>
      <issue number="225439" />
    </change>
    <change id="coloredInput">
      <api name="io"/>
      <summary>Added IOColors.OutputType.INPUT to be able to specify a color of input text.</summary>
      <version major="1" minor="39"/>
      <date day="18" month="4" year="2013"/>
      <author login="mentlicher"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              Added enum element <code>IOColors.OutputType.INPUT</code>
              that can be passed to get/setColor methods to set a color of the
              input text.
          </p>
      </description>
      <class package="org.openide.windows" name="IOColors"/>
      <issue number="228480" />
    </change>
    <change id="Folding">
      <api name="io"/>
      <summary>Adding API to have support for folding of lines</summary>
      <version major="1" minor="38"/>
      <date day="5" month="4" year="2013"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>Adding class IOFolding for checking that folding is supported and
              for creating folds in output window, and class FoldHandle for
              finishing the folds and creation of nested folds.</p>
          <p> See
              <code>
                  <a href="@TOP@/org/openide/windows/IOFolding.html">
                      IOFolding</a>,
                  <a href="@TOP@/org/openide/windows/FoldHandle.html">
                      FoldHandle</a>.
              </code>
          </p>
      </description>
      <class package="org.openide.windows" name="IOFolding"/>
      <class package="org.openide.windows" name="FoldHandle"/>
      <issue number="228022" />
    </change>
    <change id="getIO-4-params">
      <api name="io"/>
      <summary>Added IOProvider.getIO variant that takes all 4 possible parameters.</summary>
      <version major="1" minor="33"/>
      <date day="22" month="6" year="2012"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              Added method <code>IOProvider.getIO</code> that takes all
              4 supported parameters and that complements other
              <code>getIO</code> methods. See
              <code><a href="@TOP@/org/openide/windows/IOProvider.html">
              IOProvider</a></code>
          </p>
          <p>
              The original mapping from IO name to IO object has been replaced
              with mapping from pair [IO container, IO name] to IO object.
              This mapping is used for reusing of IO objects.
          </p>
      </description>
      <class package="org.openide.windows" name="IOProvider"/>
      <issue number="182538" />
    </change>
    <change id="Fine-grain-select">
      <api name="io"/>
      <summary>Added API for fine grain control over IO select operation</summary>
      <version major="1" minor="23"/>
      <date day="1" month="5" year="2010"/>
      <author login="ivan"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
        <p>Added class for fine control over select:
        <code>
            <a href="@TOP@/org/openide/windows/IOSelect.html">IOSelect</a>
        </code>
        </p>
      </description>
      <class package="org.openide.windows" name="IOSelect"/>
      <!-- apireview
      <issue number="168894" />
      -->
      <issue number="185209" />
    </change>

    <change id="Incompatible-IOContainer-select">
      <api name="io"/>
      <summary>Incompatible change to semantics of IOContainer.select()</summary>
      <version major="1" minor="23"/>
      <date day="1" month="5" year="2010"/>
      <author login="ivan"/>
      <compatibility addition="no" binary="compatible" semantic="incompatible" />
      <description>
	  <p>
	      After fixing bug#185209
	      <code>
	      <a href="@TOP@/org/openide/windows/IOContainer.html#select-javax.swing.JComponent-">IOContainer.select()</a>
	      </code>
	      no longer performs these operations for us so implementations of IOProvider
	      have to do them:
	      <code>
	      <a href="@TOP@/org/openide/windows/IOContainer.html#open--">IOContainer.open()</a>
	      </code>
	      ,
	      <code>
	      <a href="@TOP@/org/openide/windows/IOContainer.html#requestVisible--">IOContainer.requestVisible()</a>
	      </code>
	      .
	  </p>
	  <p>
	      Existing implementation of
	      <a href="@TOP@/org/openide/windows/InputOutput.html#select--">InputOutput.select()</a>
	      has been adjusted and is still compatible.
	  </p>
      </description>
      <class package="org.openide.windows" name="IOContainer"/>
      <issue number="185209" />
    </change>

    <change id="Color-printing">
      <api name="io"/>
      <summary>Adding API to have better control of text color and hyperlinks</summary>
      <version major="1" minor="18"/>
      <date day="24" month="7" year="2009"/>
      <author login="t_h"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
        <p>Adding class for color printing.
        <code>
            <a href="@TOP@/org/openide/windows/IOColorPrint.html">IOColorPrint</a>,
        </code>
        </p>
      </description>
      <class package="org.openide.windows" name="IOColorPrint"/>
      <issue number="168898" />
    </change>

    <change id="Color-control-prg-scrolling">
      <api name="io"/>
      <summary>Adding API to control output color and programmatical scrolling</summary>
      <version major="1" minor="16"/>
      <date day="6" month="3" year="2009"/>
      <author login="t_h"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
        <p>Adding "feature class" to control output color and programmatical scrolling.
        <code>
            <a href="@TOP@/org/openide/windows/IOColorLines.html">IOColorLines</a>,
            <a href="@TOP@/org/openide/windows/IOColors.html">IOColors</a>,
            <a href="@TOP@/org/openide/windows/IOPosition.html">IOPosition</a>,
        </code>
        </p>
      </description>
      <class package="org.openide.windows" name="IOPosition"/>
      <class package="org.openide.windows" name="IOColors"/>
      <class package="org.openide.windows" name="IOColorLines"/>
      <issue number="157911" />
    </change>

    <change id="IO-enhancements">
      <api name="io"/>
      <summary> Multiple IOProvider support, possibility to specify "parent container"
      for IO tab</summary>
      <version major="1" minor="15"/>
      <date day="5" month="2" year="2009"/>
      <author login="t_h"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
        <p>Added static <a href="@TOP@/org/openide/windows/IOProvider.html#get-java.lang.String-">
        <code>IOProvider.get(String name)</code></a> to get specific implementation of IOProvider. Added
        <a href="@TOP@/org/openide/windows/IOProvider.html#getName--"><code>IOProvider.getName()</code></a>
        which should be overriden by subclasses to provide its name (ID).
        </p>
        <p><a href="@TOP@/org/openide/windows/IOContainer.html"><code>IOContainer</code></a>
        was introduced as an accessor to "parent container" for IO components (tab).
        <a href="@TOP@/org/openide/windows/IOProvider.html#getIO-java.lang.String-javax.swing.Action:A-org.openide.windows.IOContainer-">
        <code>IOProvider.getIO(String name, Action[] additionalActions, IOContainer ioContainer)</code></a>
        can be used to specify alternative container.
        </p>
        <p>
        First "feature class" <a href="@TOP@/org/openide/windows/IOTab.html">IOTab</a>
        added to provide API for getting/setting icon/tooltip for IO tab.
        </p>
      </description>
      <class package="org.openide.windows" name="IOProvider"/>
      <class package="org.openide.windows" name="IOContainer"/>
      <issue number="157911" />
    </change>

    <change id="automatic-request-of-io-impl">
      <api name="io"/>
      <summary> No need to require IOProvider token anymore</summary>
      <version major="1" minor="11"/>
      <date day="19" month="7" year="2006"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
        <p>If your module depends on <code>org.openide.io > 1.11</code> or higher
        there is no need to specify that it also requires an implementation of
        the API by use of <code>OpenIDE-Module-Requires: org.openide.windows.IOProvider</code>,
        this token will be requested automatically by the <code>org.openide.io</code>
        module itself.
        </p>
      </description>
      <class package="org.openide.windows" name="IOProvider"/>
      <issue number="34699" />
    </change>

    <change id="allow-to-add-actions-to-toolbar">
      <api name="io"/>
      <summary> Added API to add actions to output's toolbar</summary>
      <version major="1" minor="6"/>
      <date day="12" month="1" year="2005"/>
      <author login="mkleint"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
        <p>Added an additional method <code>InputOutput getIO(String name, Action[] additionalActions)</code>
         that accepts additional array of javax.swing.Action instances. It allows to define domain-specific additional actions
         that can be performed on the content of the output.</p>
         <p>The method
should be ideally abstract but because it's uncertain how many
implementations of IOProvider are there, the method is non-abstract and in it's
default impl, delegates to the <code>InputOutput getIO(String name, boolean newIO)</code> method.
Implementors of the class are encourages to implement the new method.
        </p>
      </description>
      <class package="org.openide.windows" name="IOProvider"/>
      <issue number="43332" />
    </change>

    <change id="mark-output-listeners-as-important">
      <api name="io"/>
      <summary> Added API to mark OutputListeners a important</summary>
      <version major="1" minor="5"/>
      <date day="11" month="11" year="2004"/>
      <author login="mkleint"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
        <p>Added an additional method <code>OutputWriter.println(String, OutputListener, boolean)</code>
         that accepts additional boolean parameter (is Important or not). It allows the API users to mark the
         line and it's listener as important. Such a line can be marked in different color, the output can stop there to draw user's attention etc. </p>
         <p>The method
should be ideally abstract but because it's uncertain how many
implementations are there, the method is non-abstract and in it's
default impl, delegates to the <code>OutputWriter.println(String, OutputListener)</code> method,
ignoring the boolean parameter. Implementors of the class are
encourages to implement the new method.
        </p>
      </description>
      <class package="org.openide.windows" name="OutputWriter"/>
      <issue number="48339" />
    </change>

</changes>

    <!-- Now the surrounding HTML text and document structure: -->

    <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <==============

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE openide/io/api/doc/changes/changes.xml

-->
    <head>
      <title>Change History for the Input/Output 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>

<p>This document lists changes made to the <a href="@org-openide-io@/index.html">I/O API</a>.</p>

<!-- The actual lists of changes, as summaries and details: -->
      <hr/>
      <standard-changelists module-code-name="org.openide.io"/>

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

    </body>
  </htmlcontents>

</apichanges>
