/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


#ifndef __com_sun_star_accessibility_AccessibleEventId_idl__
#define __com_sun_star_accessibility_AccessibleEventId_idl__

module com { module sun { module star { module accessibility {

/** These constants identify the type of <type>AccessibleEventObject</type>
    objects.

    <p>The <member>AccessibleEventObject::OldValue</member> and
    <member>AccessibleEventObject::NewValue</member> fields contain, where
    applicable and not otherwise stated, the old and new value of the
    property in question.</p>

    @see AccessibleEventObject
    @see XAccessibleEventListener

    @since OOo 1.1.2
*/
published constants AccessibleEventId
{
    /** Use this event type to indicate a change of the name string
        of an accessible object.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        name before and after the change.
    */
    const short NAME_CHANGED = 1;

    /** Use this event type to indicate a change of the description string
        of an accessible object.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        description before and after the change.
    */
    const short DESCRIPTION_CHANGED = 2;

    /** The change of the number or attributes of actions of an accessible
        object is signaled by events of this type.
        <p>The <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new number of actions.
    */
    const short ACTION_CHANGED = 3;

    /** State changes are signaled with this event type.  Use one event for
        every state that is set or reset.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new value respectively.  To set a state put the state id
        into the <member>AccessibleEventObject::NewValue</member> field and
        leave <member>AccessibleEventObject::OldValue</member> empty.  To
        reset a state put the state id into the
        <member>AccessibleEventObject::OldValue</member> field and leave
        <member>AccessibleEventObject::NewValue</member> empty.
    */
    const short STATE_CHANGED = 4;

    /** Constant used to determine when the active descendant of a component
        has changed.  The active descendant is used in objects with
        transient children.  The <member>AccessibleEventObject::NewValue</member>
        contains the now active object.  The
        <member>AccessibleEventObject::OldValue</member> contains the
        previously active child.  Empty references indicate that no child
        has been respectively is currently active.
    */
    const short ACTIVE_DESCENDANT_CHANGED = 5;

    /** This event indicates a change of the bounding rectangle of an
        accessible object with respect only to its size or relative
        position.  If the absolute position changes but not the relative
        position then its is not necessary to send an event.

        <p>Use this event rather than the
        <const>VISIBLE_DATA_EVENT</const> when really only the
        (relative) bounding box of an accessible object has changed.  It is
        much more specific than the later one and reduces the number of
        calls an AT-Tool has to make to retrieve all affected data.</p>

        <p>The <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> remain empty.  Use
        a call to the <member>XAccessibleComponent::getBounds()</member>
        method to determine the new bounding box.</p>
    */
    const short BOUNDRECT_CHANGED = 6;

    /** A child event indicates the addition of a new or the removal of an
        existing child.  The contents of the
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields determines
        which of both has taken place.

        <p>If a new child has been added then
        the <member>AccessibleEventObject::NewValue</member> contains a
        reference to this new object and
        <member>AccessibleEventObject::OldValue</member> remains empty.</p>

        <p>If a child has been removed then the
        <member>AccessibleEventObject::OldValue</member> contains a
        reference to this object and
        <member>AccessibleEventObject::NewValue</member> remains empty.</p>

        <p>If a child has been added and a another one has been removed
        don't set both fields at the same.  Send separate events
        instead.</p>

        <p>Note that a child event is sent after a child has been added or
        removed.  Especially in the case of a removal this means that the
        removed object does not have a parent anymore.</p>
    */
    const short CHILD = 7;

    /** Use this event to tell the listeners to re-retrieve the whole set of
        children.  This should be used by a parent object which exchanges all
        or most of its children.  It is a short form of first sending one
        <const>CHILD</const> event for every old child indicating that
        this child is about to be removed and then sending one
        <const>CHILD</const> for every new child indicating that this
        child has been added to the list of children.

        <p>When this API is used by Java or Gnome AT-Tools then a bridge can
        generate the events described above automatically.</p>
    */
    const short INVALIDATE_ALL_CHILDREN = 8;

    /** Events of this type indicate changes of the selection. The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields remain empty.
    */
    const short SELECTION_CHANGED = 9;

    /** A visibile data event indicates the change of the visual appearance
        of an accessible object.  This includes for example most of the
        attributes available over the <type>XAccessibleComponent</type> and
        <type>XAccessibleExtendedComponent</type> interfaces.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields are left empty.
    */
    const short VISIBLE_DATA_CHANGED = 10;

    /** This constant indicates changes of the value of an
        <type>XAccessibleValue</type> interface.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> field contain the
        old and new value as a number.  Its exact type is implementation
        dependant but has to be the same as is returned by the
        <member>XAccessibleValue::getCurrentValue</member> function.
    */

    const short VALUE_CHANGED = 11;

    /** Identifies the change of a relation set: The content flow has
        changed.

        <p>Not used: The <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain
        refrences to the old and new predecessor.  Note that both references
        my be <NULL/> to indicate that a flow to the sending object has not
        existed or does not exist anymore.</p>
    */
    const short CONTENT_FLOWS_FROM_RELATION_CHANGED = 12;

    /** Identifies the change of a relation set: The content flow has
        changed.

        <p>Not used: The <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain
        refrences to the old and new successor.  Note that both references
        my be <NULL/> to indicate that a flow from the sending object has not
        existed or does not exist anymore.</p>
    */
    const short CONTENT_FLOWS_TO_RELATION_CHANGED = 13;

    /** Identifies the change of a relation set: The target object that is
        doing the controlling has changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new controlling objects.
    */
    const short CONTROLLED_BY_RELATION_CHANGED = 14;

    /** Identifies the change of a relation set: The controller for the
        target object has changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new number of controlled objects.
    */
    const short CONTROLLER_FOR_RELATION_CHANGED = 15;

    /** Identifies the change of a relation set: The target group for a
        label has changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new number labeled objects.
    */
    const short LABEL_FOR_RELATION_CHANGED = 16;

    /** Identifies the change of a relation set: The objects that are doing
        the labeling have changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new accessible label.
    */
    const short LABELED_BY_RELATION_CHANGED = 17;

    /** Identifies the change of a relation set: The group membership has
        changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new number of members.
    */
    const short MEMBER_OF_RELATION_CHANGED = 18;

    /** Identifies the change of a relation set: The sub-window-of relation
        has changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new accessible parent window objects.
    */
    const short SUB_WINDOW_OF_RELATION_CHANGED = 19;

    /** Events of this type are sent when the caret has moved to a new
        position.  The old and new position can be found in the
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields.
    */
    const short CARET_CHANGED = 20;

    /** Events of this type signal changes of the selection.  The old or new
        selection is <em>not</em> available through the event object.  You
        have to query the <type>XAccessibleText</type> interface of the
        event source for this information.  The type of content of  the
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields is not
        specified at the moment.  This may change in the future.
    */
    const short TEXT_SELECTION_CHANGED = 21;

    /** Use this id to indicate general text changes, i.e. changes to text
        that is exposed through the <type>XAccessibleText</type> and
        <type>XAccessibleEditableText</type> interfaces.

        <p>The affected text ranges are represented by <type
        scope="com::sun::star::accessibility">TextSegment</type> structures.<p>

        <p>The content of the <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> expresses the type
        of text change: <ul> <li>Insertion: the
        <member>AccessibleEventObject::NewValue</member> field specifies the
        inserted text after the insertion, the
        <member>AccessibleEventObject::OldValue</member> field remains
        empty.</li> <li>Deletion: the
        <member>AccessibleEventObject::OldValue</member> field specifies the
        deleted text before the deletion, the
        <member>AccessibleEventObject::NewValue</member> field remains
        empty.</li> <li>Update/Replace/Modification: the
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields specify the
        modified text before respectively after the modification.</li>
        <li>Unknown: when the type of text change or the place where it took
        place can not be determined by the event broadcaster then both
        fields remain empty.  In this case the whole text may have changed
        and the listener should refetch the text completely.</li> </ol>

        <p>When broadcasting an event allways prefer the first three cases
        to the last one.  Use it only as a last resort.</p>

        <p> Text ranges should be as small as possible but, of course,
        include all the text that is involved in a modification.  That means
        that when two or more discontiguous text ranges are inserted,
        deleted, or otherwise modified the two fields of the event have to
        cover all the effected text ranges as well as the text in
        between.</p>
    */
    const short TEXT_CHANGED = 22;


    /** This entry is reserved for future extension.  Don't use it right now.
    */
    const short TEXT_ATTRIBUTE_CHANGED = 23;

    /** Constant used to indicate that a hypertext element has received
        focus. The <member>AccessibleEventObject::OldValue</member> field
        contains the start index of previously focused element.  The
        <member>AccessibleEventObject::NewValue</member> field holds the
        start index in the document of the current element that has focus. A
        value of -1 indicates that an element does not or did not have
        focus.
    */
    const short HYPERTEXT_CHANGED = 24;
    /** Constant used to indicate that the table caption has changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new accessible objects representing the table caption.
    */
    const short TABLE_CAPTION_CHANGED = 25;

    /** Constant used to indicate that the column description has changed.
        The <member>AccessibleEventObject::NewValue</member> field contains
        the column index. The
        <member>AccessibleEventObject::OldValue</member> is left empty.
    */
    const short TABLE_COLUMN_DESCRIPTION_CHANGED = 26;

    /** Constant used to indicate that the column header has changed.  The
        <member>AccessibleEventObject::OldValue</member> is empty, the
        <member>AccessibleEventObject::NewValue</member> field contains an
        <type>AccessibleTableModelChange</type> representing the header
        change.
    */
    const short TABLE_COLUMN_HEADER_CHANGED = 27;

    /** Constant used to indicate that the table data has changed.  The
        <member>AccessibleEventObject::OldValue</member> is empty, the
        <member>AccessibleEventObject::NewValue</member> field contains an
        <type>AccessibleTableModelChange</type> representing the data
        change.
    */
    const short TABLE_MODEL_CHANGED = 28;

    /** Constant used to indicate that the row description has changed.  The
        <member>AccessibleEventObject::NewValue</member> field contains the
        row index. The <member>AccessibleEventObject::OldValue</member> is
        left empty.
    */
    const short TABLE_ROW_DESCRIPTION_CHANGED = 29;

    /** Constant used to indicate that the row header has changed.  The
        <member>AccessibleEventObject::OldValue</member> is empty, the
        <member>AccessibleEventObject::NewValue</member> field contains an
        <type>AccessibleTableModelChange</type> representing the header
        change.
    */
    const short TABLE_ROW_HEADER_CHANGED = 30;

    /** Constant used to indicate that the table summary has changed.  The
        <member>AccessibleEventObject::OldValue</member> and
        <member>AccessibleEventObject::NewValue</member> fields contain the
        old and new accessible objects representing the table summary.
    */
    const short TABLE_SUMMARY_CHANGED = 31;

    /** Constant used to indicate that a list box entry has been expanded.
        <member>AccessibleEventObject::OldValue</member> is empty.
        <member>AccessibleEventObject::NewValue</member> contains the expanded list box entry.

        @since OOo 3.2
    */
    const short LISTBOX_ENTRY_EXPANDED = 32;

    /** Constant used to indicate that a list box entry has been collapsed.
        <member>AccessibleEventObject::OldValue</member> is empty.
        <member>AccessibleEventObject::NewValue</member> contains the collapsed list box entry.

        @since OOo 3.2
    */
    const short LISTBOX_ENTRY_COLLAPSED = 33;
};

}; }; }; };

#endif
