/* -*- 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_XGridDataModel_idl__
#define __com_sun_star_awt_grid_XGridDataModel_idl__


#include <com/sun/star/lang/XComponent.idl>
#include <com/sun/star/util/XCloneable.idl>
#include <com/sun/star/awt/grid/XGridDataListener.idl>
#include <com/sun/star/lang/IndexOutOfBoundsException.idl>


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

/** An instance of this interface is used by the UnoControlGrid to
    retrieve the content data that is displayed in the actual control.

    If you do not need your own model implementation, you can also use the DefaultGridDataModel.

    @since OOo 3.3
*/
published interface XGridDataModel
{
    /** implements life time control for the component
    */
    interface ::com::sun::star::lang::XComponent;

    /** allows cloning the complete data model
    */
    interface ::com::sun::star::util::XCloneable;

    /** denotes the number of rows for which the model can provide data
    */
    [attribute, readonly] long RowCount;

    /** denotes the number of columns for which the model can provide data
    */
    [attribute, readonly] long ColumnCount;

    /** retrieves the data for a given cell

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the column or row index do not denote a valid cell position.
    */
    any getCellData( [in] long Column, [in] long RowIndex )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );

    /** retrieves the tool tip to be displayed when the mouse hovers over a given cell

        <p>At the moment, only string tool tips are supported.</p>

        <p>If `VOID` is returned here, the cell's content will be displayed as tip, but only if it does
        not fit into the cell.</p>

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the column or row index do not denote a valid cell position.
    */
    any getCellToolTip( [in] long Column, [in] long RowIndex )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );

    /** retrieves the heading of a given row

        <p>A grid control will usually paint a row's title in the header column of the respective row.</p>

        <p>At the moment, only strings are supported as row headings.</p>

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

    /** retrieves the data for a complete row

        <p>This method is provided for performance and convenience reasons, it delivers the same result
        as subsequent calls to getCellData() would.</p>

        @param RowIndex
            the index of the row whose data should is to be retrieved.
        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            of the given row index does not denote a valid row.
    */
    sequence< any >
        getRowData( [in] long RowIndex )
        raises ( ::com::sun::star::lang::IndexOutOfBoundsException );
};


}; }; }; };};

#endif

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