/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/
#ifndef __com_sun_star_awt_grid_XGridColumn_idl__
#define __com_sun_star_awt_grid_XGridColumn_idl__

#include <com/sun/star/lang/XComponent.idl>
#include <com/sun/star/style/HorizontalAlignment.idl>
#include <com/sun/star/lang/IllegalArgumentException.idl>
#include <com/sun/star/awt/grid/XGridColumnListener.idl>
#include <com/sun/star/util/XCloneable.idl>

//=============================================================================

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

//=============================================================================

/** The <type>XGridColumn</types> defines the properties and behavior of a column in a grid control
    @since OOo 3.3
 */
published interface XGridColumn
{
    /** implements life time control for the component
    */
    interface ::com::sun::star::lang::XComponent;

    /** allows cloning the complete grid column
    */
    interface ::com::sun::star::util::XCloneable;

    /** specifies an identifier of the column

        <p>This identifier will not be evaluated by the grid control, or its model. It is merely for clients
        to identify particular columns.</p>
    */
    [attribute] any Identifier;

    /** specifies the current width of the column.
    */
    [attribute] long ColumnWidth;

    /** specifies the minimal width the column can have.
    */
    [attribute] long MinWidth;

    /** specifies the maximal width the column can have.
    */
    [attribute] long MaxWidth;

    /** controls whether or not the column's width is fixed or not.

        <p>If this is <TRUE/>, the user can interactively change the column's width. Also, the column is subject to
        auto-resizing, if its <member>Flexibility</member> attribute is greater <code>0</code>.</p>
    */
    [attribute] boolean Resizeable;

    /** specifies the flexibility of the column when it is automatically resized due to the grid control as a whole
        being resized.

        <p>Specify <code>0</code> here if you do not want the column to be resized automatically.</p>

        <p>If a column has a flexibility greater than 0, it is set in relationship to the flexibility of all
        other such columns, and the respective widths of the columns are changed in the same relationship.</p>

        <p>Note that a column's flexibility is ignored if its <member>Resizeable</member> attribute is
        <FALSE/>.</p>

        <p>A column's flexibility cannot be negative, attempts to set a negative value will raise an exception.</p>
    */
    [attribute] long Flexibility
    {
        set raises ( ::com::sun::star::lang::IllegalArgumentException );
    };

    /** Specifies the horizontal alignment of the content in the control.
     */
    [attribute] ::com::sun::star::style::HorizontalAlignment HorizontalAlign;

    /** A title is displayed in the colum header row if <method>UnoControlGridModel::ShowRowHeader</method> is set to <true/>**/
    [attribute] string Title;

    /** is the help text associated with the column.

        <p>A grid control will usually display a column's help text as tooltip.</p>
    */
    [attribute] string HelpText;

    /** denotes the index of the column within the grid column model it belongs to

        <p>If the column is not yet part of a column model, <code>Index</code> is -1.</p>
    */
    [attribute, readonly] long Index;

    /** denotes the index of the data column which should be used to fetch this grid column's data

        <p>A grid control has a column model and a data model, both containing a possibly different number of columns.
        The <code>DataColumnIndex</code> attribute defines the index of the column within the data model, which should
        be used to retrieve actual data.</p>

        <p>Using this, you can do runtime changes to the column model, i.e. insertion and removal of columns, without
        necessarily needing to adjust the data model, too.</p>

        <p>If <code>DataColumnIndex</code> is negative, the it will be ignored, then the column's index within its
        column model, as determined by the <member>Index</member> attribute, will be used.</p>
    */
    [attribute] long DataColumnIndex;

    /** Adds a listener for the <type>GridColumnEvent</type> posted after the grid changes.
        @param Listener
            the listener to add.
    */
    void addGridColumnListener( [in] XGridColumnListener  listener);

    //-------------------------------------------------------------------------

    /** Removes a listener previously added with <method>addColumnListener()</method>.
        @param Listener
            the listener to remove.
    */
    void removeGridColumnListener( [in] XGridColumnListener listener);
};

//=============================================================================

}; }; }; }; };

#endif