/**************************************************************
 * 
 * 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_AccessibleTableModelChange_idl__
#define __com_sun_star_accessibility_AccessibleTableModelChange_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

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

/** This structure lets an event give access to a change of a table model.

    <p>The data members of the <type>AccessibleTableModelChange</type> structure
    give access to the type and cell range of a change of a table model.  See
    <type>AccessibleTableModelChangeType</type> for details of the change
    type.  The range of the affected rows, columns, and/or cells can be
    obtained by accessing the other four data members.</p>

    @since OOo 1.1.2
*/
published struct AccessibleTableModelChange
{
    /** The type of the event as defined in
            <type>AccessibleTableModelChangeType</type>.

        <p>The model change either inserted or deleted one or more rows
        and/or columns or modified the content of a number of cells.  See
        <type>AccessibleTableModelChangeType</type> for details of the type
        of the model change.</p>
    */
    short Type;
    
    /** The lowest index of a row that has changed.

        <p>The first row that has been changed or that contains
        modified cells.</p>
    */
    long FirstRow;
    
    /** The highest index of a row that has changed.

        <p>The last row that has been changed or that contains modified
        cells.</p>
    */
    long LastRow;

    /** The lowest index of a column that has changed.

        <p>The first column that has been changed or contains modified
        cells.</p>
    */
    long FirstColumn;

    /** The highest index of a column that has changed.

        <p>The last column that  has been changed or contains modified
        cells.</p>
    */
    long LastColumn;
};
          
}; }; }; };

#endif
