/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */

#ifndef __com_sun_star_awt_grid_XMutableGridDataModel_idl__
#define __com_sun_star_awt_grid_XMutableGridDataModel_idl__

#include <com/sun/star/awt/grid/XGridDataModel.idl>
#include <com/sun/star/lang/IllegalArgumentException.idl>
#include <com/sun/star/lang/IndexOutOfBoundsException.idl>


module com { module sun { module star { module awt { module grid {


/** allows to modify the data represented by a XGridDataModel
 */
published interface XMutableGridDataModel : XGridDataModel
{
    /** appends a row to the model.

        @param Heading
            denotes the heading of the row.
        @param Data
            specifies the content of the row.
    */
    void addRow( [in] any Heading, [in] sequence< any > Data );

    /** appends multiple rows of data to the model.
        @param Headings
            denotes the headings of the to-be-added rows.
        @param Data
            specifies the data of the rows to be added.
        @throws ::com::sun::star::lang::IllegalArgumentException
            if <code>Titles</code> and <code>Data</code> are of different length.
    */
    void addRows( [in] sequence< any > Headings, [in] sequence< sequence< any > > Data )
        raises ( ::com::sun::star::lang::IllegalArgumentException );

    /** inserts a row into the set of data rows

        @param Index
            denotes the position at which the row is to be inserted
        @param Heading
            denotes the heading of the row.
        @param Data
            specifies the content of the row.
        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if <code>Index</code> is smaller than <code>0</code> or greater than the number of
            rows in the model.
    */
    void insertRow( [in] long Index, [in] any Heading, [in] sequence< any > Data )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );

    /** inserts multiple rows of data into the model.
        @param Index
            denotes the position at which the rows are to be inserted
        @param Headings
            denotes the headings of the to-be-added rows.
        @param Data
            specifies the data of the rows to be added.
        @throws ::com::sun::star::lang::IllegalArgumentException
            if <code>Titles</code> and <code>Data</code> are of different length.
        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if <code>Index</code> is smaller than <code>0</code> or greater than the number of
            rows in the model.
    */
    void insertRows( [in] long Index, [in] sequence< any > Headings, [in] sequence< sequence< any > > Data )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException
               , ::com::sun::star::lang::IllegalArgumentException );

    /** removes a row of data from the model

        @param RowIndex
            the index of the row that should be removed.
        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the given index is invalid
    */
    void removeRow( [in] long RowIndex )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );

    /** Removes all rows from the model.
    */
    void removeAllRows();

    /** updates the content of the given cell
        @param ColumnIndex
            the column index of the to-be-updated cell
        @param RowIndex
            the row index of the to-be-updated cell
        @param Value
            the new value of the cell.
        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the row or column index is invalid
    */
    void updateCellData( [in] long ColumnIndex, [in] long RowIndex, [in] any Value )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );

    /** updates the content of a given row.

        <p>The change in the data model will be notified to registered listeners via
        XGridDataListener::dataChanged(). The GridDataEvent::FirstColumn and
        GridDataEvent::LastColumn will denote the smallest respectively largest column
        index from ColumnIndexes.</p>

        @param ColumnIndexes
            contains the column indexes of the cells, which should be updated
        @param RowIndex
            contains the index of the row whose data is to be updated
        @param Values
            specifies the new values of the cells.
        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if one of the row indexes or the column index is invalid
        @throws ::com::sun::star::lang::IllegalArgumentException
            if the lengths of the <code>ColumnIndexes</code> and <code>Values</code> sequences are not equal.
    */
    void updateRowData( [in] sequence< long > ColumnIndexes, [in] long RowIndex, [in] sequence< any > Values )
            raises ( ::com::sun::star::lang::IndexOutOfBoundsException
                   , ::com::sun::star::lang::IllegalArgumentException);

    /** sets a new title for a given row.

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the given index does not denote a valid row.
    */
    void
        updateRowHeading( [in] long RowIndex, [in] any Heading )
            raises ( ::com::sun::star::lang::IndexOutOfBoundsException );

    /** updates the tooltip to be displayed for a given cell

        @see XGridDataModel::getCellToolTip
    */
    void updateCellToolTip( [in] long ColumnIndex, [in] long RowIndex, [in] any Value )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );

    /** updates the tooltip for all cells of a given row

        <p>Effectively this method is a shortcut for calling updateCellToolTip() multiple
        times in a row, for all cells of a given row.</p>

        @see XGridDataModel::getCellToolTip
        @see updateCellToolTip
    */
    void updateRowToolTip( [in] long RowIndex, [in] any Value )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );


    /** registers listener to be notified of data changes in the model
        @param Listener
            specifies the listener to register
    */
    void addGridDataListener( [in] XGridDataListener Listener );


    /** revokes a listener which was previously registered via addGridDataListener()
        @param Listener
            specifies the listener to revoke.
    */
    void removeGridDataListener( [in] XGridDataListener Listener );
};


}; }; }; }; };


#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
