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


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


/** The XGridColumn 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 #Flexibility 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 #Resizeable 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 column header row if UnoControlGridModel::ShowColumnHeader() 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 #Index attribute, will be used.</p>
    */
    [attribute] long DataColumnIndex;

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


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


}; }; }; }; };

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