/*************************************************************************
 *
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile: LineDescriptor.idl,v $
 *
 *  $Revision: 1.3 $
 *
 *  last change: $Author: vg $ $Date: 2006-03-31 12:02:17 $
 *
 *  The Contents of this file are made available subject to
 *  the terms of GNU Lesser General Public License Version 2.1.
 *
 *
 *    GNU Lesser General Public License Version 2.1
 *    =============================================
 *    Copyright 2005 by Sun Microsystems, Inc.
 *    901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License version 2.1, as published by the Free Software Foundation.
 *
 *    This library 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 for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *
 ************************************************************************/

#ifndef __com_sun_star_inspection_LineDescriptor_idl__
#define __com_sun_star_inspection_LineDescriptor_idl__

#ifndef com_sun_star_graphic_XGraphic_idl
#include <com/sun/star/graphic/XGraphic.idl>
#endif

//=============================================================================
module com {  module sun {  module star {  module inspection {

interface XPropertyControl;

//-----------------------------------------------------------------------------
/** describes the appearance of a line representing a single property in an <type>ObjectInspector</type>.

    Such a line consists of
    <ul><li>a label with a human-readable name for the property</li>
        <li>a control which is used for user interaction - i.e. it displays the current property
            value, and allows the user entering a new one.</li>
        <li>(optional) one or two buttons which, when clicked, can start a more complex, interactive
            property value input. For instance, if you have a property whose value is a path in the
            file system, such a button could be used to let the user browse for a path with a
            usual file picker.</li>
    </ul>

    @see XPropertyHandler::describePropertyLine
    @see PropertyLineElement

    @since OOo 2.0.3
*/
struct LineDescriptor
{
    /** denotes the human-readable display name used to present a property to the user
    */
    string  DisplayName;

    /** denotes the control which should be used to represent the property at the UI.

        @see XPropertyControlFactory
    */
    XPropertyControl Control;

    /** specifies the URL to the help topic to be associated with the property
    */
    string HelpURL;

    /** detetrmines whether a button exists which can be used for a more complex, interactive
        property value input.

        @see XPropertyHandler::onInteractivePropertySelection
        @see HasSecondaryButton
    */
    boolean HasPrimaryButton;

    /** detetrmines whether a secondary button exists which can be used for a more complex, interactive
        property value input.

        <p>A secondary button subordinated to the primary button. If no primary button exists
        (<member>HasPrimaryButton</member>), this member is ignored.</p>

        @see XPropertyHandler::onInteractivePropertySelection
        @see HasSecondaryButton
    */
    boolean HasSecondaryButton;

    /** describes a unique id to associate with the primary button

        <p>In OpenOffice.org, UI elements sometimes require a so-called UniqueID, which can be
        used to uniquely (within the whole application) identify this UI element. For instance,
        automating the OpenOffice.org UI via a dedicated separate application ("TestTool") requires
        such IDs.</p>

        <p>If a primary button exists for a property's UI representation (<member>HasPrimaryButton</member>),
        it gets the ID specified herein.</p>
    */
    long PrimaryButtonId;

    /** describes a unique id to associate with the primary button

        <p>If a secondary button exists for a property's UI representation (<member>HasSecondaryButton</member>),
        it gets the ID specified herein.</p>

        @see PrimaryButtonId
    */
    long SecondaryButtonId;

    /** describes a graphics to display at the primary button, if any.

        <p>If no image for the primary button is specified, but a primary button is present,
        the three dots will be displayed on the button.</p>

        @see HasPrimaryButton
    */
    com::sun::star::graphic::XGraphic PrimaryButtonImage;

    /** describes a graphics to display at the primary button, if any.

        <p>If no image for the secondary button is specified, but a secondary button is present,
        the three dots will be displayed on the button.</p>

        @see HasSecondaryButton
    */
    com::sun::star::graphic::XGraphic SecondaryButtonImage;

    /** describes the indent level for the property

        <p>If a given property semantically depends on another one, the indent level
        can be used to visually represent this fact. For this, the dependent property's
        indent level would be one larger than the indent level of the other property.</p>

        <p>Normally, <type>XPropertyHandler</type>s will set this to <code>0</code> when describing
        the UI for a normal property.
    */
    short IndentLevel;

    /** describes the category into which the property should be sorted by the <type>ObjectInspector</type>.

        <p>An <type>ObjectInspector</type> can visually group properties which semantically belong
        together (for instance using tab pages). The decision which properties actually belong together
        is made using this <member>Category</member> attribute.</p>

        <p>For your implementation of <type>XPropertyHandler</type>, it's recommended that you document the programmatic
        names used for property categories. This way, your handler might be re-used in
        different contexts, where only the <type>XObjectInspectorModel</type> needs to provide consistent
        UI names for the categories.</p>

        @see XObjectInspectorModel::describeCategories
    */
    string Category;
};

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

}; }; }; };

#endif

