<?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="options">Options API</apidef>
</apidefs>
<changes>
    <change>
      <api name="options"/>
      <summary>
<code>ContextSystemOption.beanContext</code> changed type</summary>
      <date day="25" month="2" year="2000"/>
      <compatibility modification="yes" binary="incompatible" source="compatible" deprecation="yes" semantic="compatible" addition="no" deletion="no">
        Should be source-compatible. Binary-incompatible for subclasses of
        <code>ContextSystemOption</code> directly accessing this field; but use
        of this field is probably unnecessary as <code>addOption</code> and
        <code>removeOption</code> are the normal public methods to manipulate
        the children. As of <date day="22" month="5" year="2001"/> the field is
        deprecated.
      </compatibility>
      <description>
        Protected field <code>beanContext</code> has changed type. The previous
        type was an inaccessible class, which was an API bug; it is now the
        public superclass.
      </description>
      <class package="org.openide.options" name="ContextSystemOption"/>
    </change>
    <change id='directly-adding-options' >
      <api name="options"/>
      <summary>Directly adding or removing options is deprecated</summary>
      <date day="25" month="4" year="2001"/>
      <compatibility deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no" modification="no">
        Their functionality can be obtained by using a declaration in a manifest
        file.
      </compatibility>
      <description>
        Methods <code>ControlPanel.add(SystemOption)</code> and
        <code>ControlPanel.remove(SystemOption)</code> are deprecated now.
      </description>
      <class package="org.openide.options" name="ControlPanel" link="no"/>
    </change>
</changes>
<htmlcontents>
<head>
<title>Change History for the Options 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>
<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.options"/>
<hr/>
<p>@FOOTER@</p>
</body>
</htmlcontents>
</apichanges>
