<?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="settings">Editor Settings API</apidef>
        <!-- etc. -->
    </apidefs>

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

    <changes>
        
        <change id="added.SimpleValueNames.ON_SAVE_REFORMAT">
            <summary>Adding ON_SAVE_REFORMAT</summary>
            <version major="1" minor="44"/>
            <date day="28" month="8" year="2012"/>
            <author login="mmetelka"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constants <code>SimpleValueNames.ON_SAVE_REFORMAT</code>
                and <code>SimpleValueNames.ON_SAVE_USE_GLOBAL_SETTINGS</code>.
            </p>
            </description>
            <issue number="140719"/>
        </change>
        <change id="added.SimpleValueNames.EDITOR_BRACES">
            <summary>Adding BRACE_SHOW_OUTLINE and BRACE_FIRST_TOOLTIP</summary>
            <version major="1" minor="43"/>
            <date day="5" month="7" year="2012"/>
            <author login="sdedic"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constants 
                <code>SimpleValueNames.BRACE_SHOW_OUTLINE</code> and 
                <code>SimpleValueNames.BRACE_FIRST_TOOLTIP</code> which control brace outline
                behaviour
            </p>
            </description>
            <issue number="214755"/>
        </change>
        <change id="added.SimpleValueNames.EDITOR_SEARCH_TYPE">
            <summary>Adding SimpleValueNames.EDITOR_SEARCH_TYPE</summary>
            <version major="1" minor="40"/>
            <date day="12" month="4" year="2012"/>
            <author login="mkristofic"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constant <code>SimpleValueNames.EDITOR_SEARCH_TYPE</code>.
            </p>
            </description>
            <issue number="210700"/>
        </change>

        <change id="added.SimpleValueNames.ON_SAVE_REMOVE_TRAILING_WHITESPACE">
            <summary>Adding SimpleValueNames.ON_SAVE_REMOVE_TRAILING_WHITESPACE</summary>
            <version major="1" minor="33"/>
            <date day="9" month="6" year="2010"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constant <code>SimpleValueNames.ON_SAVE_REMOVE_TRAILING_WHITESPACE</code>.
            </p>
            </description>
            <issue number="157561"/>
        </change>

        <change id="added.SimpleValueNames.NON_PRINTABLE_CHARACTERS_VISIBLE">
            <summary>Adding SimpleValueNames.NON_PRINTABLE_CHARACTERS_VISIBLE</summary>
            <version major="1" minor="30"/>
            <date day="4" month="3" year="2010"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constant <code>SimpleValueNames.NON_PRINTABLE_CHARACTERS_VISIBLE</code>.
            </p>
            </description>
            <issue number="4619"/>
        </change>

        <change id="added.SimpleValueNames.TEXT_LINE_WRAP">
            <summary>Adding SimpleValueNames.TEXT_LINE_WRAP</summary>
            <version major="1" minor="29"/>
            <date day="4" month="3" year="2010"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constant <code>SimpleValueNames.TEXT_LINE_WRAP</code>.
            </p>
            </description>
            <issue number="89894"/>
        </change>

        <change id="added.SimpleValueNames.ALT_HYPERLINK_ACTIVATION_MODIFIERS">
            <summary>Adding SimpleValueNames.ALT_HYPERLINK_ACTIVATION_MODIFIERS</summary>
            <version major="1" minor="24"/>
            <date day="16" month="2" year="2009"/>
            <author login="vv159170"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding a new constant <code>SimpleValueNames.ALT_HYPERLINK_ACTIVATION_MODIFIERS</code> as the name
                of an editor setting that determins shortcut for activating alternative (other than go to declaration)
                hyperlink action.
            </p>
            </description>
            <issue number="157705"/>
        </change>

        <change id="Adding.javadoc.popup.next.to.cc">
            <summary>Adding SimpleValueNames.JAVADOC_POPUP_NEXT_TO_CC</summary>
            <version major="1" minor="22"/>
            <date day="28" month="8" year="2008"/>
            <author login="msauer"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no"/>
            <description>
            <p>
                Adding new constant <code>SimpleValueNames.JAVADOC_POPUP_NEXT_TO_CC</code>.
            </p>
            </description>
        </change>

        <change id="Adding.thick.line.caret">
            <summary>Adding SimpleValueNames.THICK_CARET_WIDTH</summary>
            <version major="1" minor="21"/>
            <date day="3" month="6" year="2008"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no"/>
            <description>
            <p>
                Adding new constant <code>SimpleValueNames.THICK_CARET_WIDTH</code>.
            </p>
            </description>
        </change>
        
        <change id="added.EditorStyleConstants.RenderingHints">
            <summary>Added EditorStyleConstants.RenderingHints constant</summary>
            <version major="1" minor="20"/>
            <date day="27" month="5" year="2008"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constant <code>EditorStyleConstants.RenderingHints</code>.
            </p>
            </description>
        </change>

        <change id="added.SimpleValueNames.CODE_FOLDING.constants">
            <summary>Added code folding related constants to SimpleValueNames</summary>
            <version major="1" minor="19"/>
            <date day="26" month="5" year="2008"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constant to <code>SimpleValueNames</code> for code folding
                related settings.
            </p>
            </description>
        </change>

        <change id="added.SimpleValueNames.COMPLETION_PAIR_CHARACTRES">
            <summary>Added switch for auto completing pair characters</summary>
            <version major="1" minor="18"/>
            <date day="13" month="5" year="2008"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Adding new constant to <code>SimpleValueNames</code> as the name
                of an editor setting that determins if pair characters should be
                autocompleted or not.
            </p>
            </description>
            <issue number="108161"/>
        </change>

        <change id="added.EditorStyleConstants.xxxBorderLineColor">
            <summary>Added border related constants to EditorStyleConstants</summary>
            <version major="1" minor="16"/>
            <date day="28" month="2" year="2008"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                Several new constants were added to <code>EditorStyleConstants</code> to
                support drawing rectangular boxes around text in the editor.
            </p>
            </description>
            <issue number="108161"/>
        </change>

        <change id="added.CodeTemplateDescription.getMimePath">
            <summary>Added CodeTemplateDescription.getMimePath</summary>
            <version major="1" minor="15"/>
            <date day="14" month="2" year="2008"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                The <code>CodeTemplateDescription.getMimePath</code> and a new
                constructor were added to accomodate a mime path where a code
                template was registered.
            </p>
            </description>
            <issue number="121663"/>
        </change>

        <change id="added.EditorStyleConstants.Tooltip">
            <summary>Added EditorStyleConstants.Tooltip</summary>
            <version major="1" minor="12"/>
            <date day="13" month="9" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                The <code>EditorStyleConstants.Tooltip</code> constant was added
                allowing to specify tooltips in highlighting layers.
            </p>
            </description>
            <issue number="107107"/>
        </change>

        <change id="added.CodeTemplateDescription.getUniqueId">
            <summary>Added CodeTemplateDescription.getUniqueId</summary>
            <version major="1" minor="11"/>
            <date day="15" month="6" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                The <code>CodeTemplateDescription.getUniqueId</code> method was added
                and the constructor was extended to accept <code>uniqueId</code>
                parameter.
            </p>
            </description>
        </change>

        <change id="CodeTemplateSettings.getCodeTemplates">
            <summary>CodeTemplateSettings.getCodeTemplates siganture changed</summary>
            <version major="1" minor="10"/>
            <date day="10" month="6" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="incompatible" source="incompatible" semantic="compatible" addition="no" deprecation="no" deletion="no" modification="yes" />
            <description>
            <p>
                The <code>CodeTemplateSettings.getCodeTemplates</code> signature was changed
                to return <code>Collection&lt;CodeTemplateDescription&gt;</code> instead
                of <code>List</code>. Although an incompatible change this class
                had never been functional and should not have been used by anybody.
            </p>
            </description>
        </change>

        <change id="AttributesUtilities">
            <summary>AttributesUtilities added</summary>
            <version major="1" minor="9"/>
            <date day="26" month="1" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                The <code>AttributesUtilities</code> class has been added.
            </p>
            </description>
        </change>

        <change id="FontColorSettings.PROP_FONT_COLORS">
            <summary>Deprecating FontColorSettings.PROP_FONT_COLORS</summary>
            <version major="1" minor="8"/>
            <date day="4" month="1" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="no" deprecation="yes" deletion="no" modification="no" />
            <description>
            <p>
                Deprecating <code>FontColorSettings.PROP_FONT_COLORS</code>. It
                should have never been made public in the first place. Nobody can
                listen on this property anyway and the general contract is that
                settings instances in MimeLookup are immutable and if anything
                changes the whole instance (e.g. <code>FontColorSettings</code>) is replaced.
            </p>
            </description>
        </change>

        <change id="org.netbeans.api.editor.settings.implementation">
            <summary>OpenIDE-Module-Needs: org.netbeans.api.editor.settings.implementation</summary>
            <version major="1" minor="7"/>
            <date day="13" month="11" year="2006"/>
            <author login="vstejskal"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no" />
            <description>
            <p>
                The module is now autoload and it needs the <code>org.netbeans.api.editor.settings.implementation</code>
                token. This token is provided by the <code>editor/settings/storage</code> module
                by default.
            </p>
            </description>
        </change>

        <change id="FontColorNames-SimpleValueNames-constructors">
            <summary>Private constructors in FontColorNames and SimpleValueNames</summary>
            <version major="1" minor="6"/>
            <date day="8" month="11" year="2006"/>
            <author login="vstejskal"/>
            <compatibility addition="no" binary="incompatible" source="incompatible" semantic="compatible" deprecation="no" deletion="yes" modification="no" />
            <description>
            <p>
                The FontColorNames and SimpleValueNames classes used to
                have a default construtor, even though it had never made
                sense to create instances of them. The default constructors
                have been removed and a privat noargs constructor has been added
                to both of them preventing an accidental instantiation.
            </p>
            </description>
        </change>

        <change id="editor-settings">
            <summary>Editor Settings API created</summary>
            <version major="1" minor="2"/>
            <date day="26" month="8" year="2005"/>
            <author login="mroskanin"/>
            <compatibility addition="yes" binary="compatible" semantic="compatible" />
            <description>
            <p>
                Editor Settings API was created. 
                It defines settings classes, which can be looked up via mimelookup.
            </p>
            </description>
            <issue number="59784"/>
        </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 CHANGEME/apichanges.xml

-->
    <head>
      <title>Change History for the Editor Settings 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="@TOP@">Editor Settings
API</a>.</p>

<!-- The actual lists of changes, as summaries and details: -->
      <hr/>
      <standard-changelists module-code-name="org.netbeans.modules.editor.settings/1"/>

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

    </body>
  </htmlcontents>

</apichanges>
