/**************************************************************
 * 
 * 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
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_awt_UnoControlCheckBoxModel_idl__
#define __com_sun_star_awt_UnoControlCheckBoxModel_idl__

#ifndef __com_sun_star_awt_FontDescriptor_idl__
#include <com/sun/star/awt/FontDescriptor.idl>
#endif
#ifndef __com_sun_star_awt_UnoControlModel_idl__
#include <com/sun/star/awt/UnoControlModel.idl>
#endif
#ifndef __com_sun_star_style_VerticalAlignment_idl__
#include <com/sun/star/style/VerticalAlignment.idl>
#endif
#ifndef __com_sun_star_util_Color_idl__
#include <com/sun/star/util/Color.idl>
#endif
#ifndef com_sun_star_graphic_XGraphic_idl
#include <com/sun/star/graphic/XGraphic.idl>
#endif

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

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

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

/** specifies the standard model of an <type>UnoControlCheckBox</type>.
 */
published service UnoControlCheckBoxModel
{
	service com::sun::star::awt::UnoControlModel;

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

	/** specifies the horizontal alignment of the text in the control.

		<pre>
		0: left
		1: center
		2: right
		</pre>

        @since OOo 2.0
	 */
	[optional, property] short Align;

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

	/** specifies the background color (RGB) of the control.
	 */
	[optional, property] long BackgroundColor;

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

	/** determines whether the control is enabled or disabled.
	 */
	[property] boolean Enabled;

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

	/** specifies the font attributes of the text in the control.
	 */
	[property] com::sun::star::awt::FontDescriptor FontDescriptor;

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

	/** specifies the <type scope="com::sun::star::text">FontEmphasis</type>
        value of the text in the control.
	 */
	[property] short FontEmphasisMark;

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

	/** specifies the <type scope="com::sun::star::text">FontRelief</type>
        value of the text in the control.
	 */
	[property] short FontRelief;

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

	/** specifies the help text of the control.
	 */
	[property] string HelpText;

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

	/** specifies the help URL of the control.
	 */
	[property] string HelpURL;

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

    /** specifies the position of the image, if any, relative to the text, if any

        <p>Valid values of this property are specified with <type>ImagePosition</type>.</p>
     */
    [optional, property] short ImagePosition;

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

	/** specifies an URL to an image to display besides the label of the control
        @see Graphic
	 */
	[optional, property] string ImageURL;

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

	/** specifies a graphic to be displayed besides the label of the control

        <p>If this property is present, it interacts with the <member>ImageURL</member>in the
        following way:
        <ul><li>If <member>ImageURL</member> is set, <member>Graphic</member> will be reset
            to an object as loaded from the given image URL, or <NULL/> if <member>ImageURL</member>
            does not point to a valid image file.</li>
            <li>If <member>Graphic</member> is set, <member>ImageURL</member> will be reset
            to an empty string.</li>
        </ul></p>

        @since OOo 2.1
	 */
    [optional, property, transient] com::sun::star::graphic::XGraphic Graphic;

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

	/** specifies the label of the control.
	 */
	[property] string Label;

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

	/** specifies that the text may be displayed on more than one line.

        @since OOo 2.0
	 */
	[optional, property] boolean MultiLine;

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

	/** specifies that the control will be printed with the document.
	 */
	[property] boolean Printable;

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

	/** specifies the state of the control.

		<pre>
		0: not checked
		1: checked
		2: don't know
		</pre>
	 */
	[property] short State;

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

	/** specifies that the control can be reached with the TAB key.
	 */
	[property] boolean Tabstop;

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

	/** specifies the text color (RGB) of the control.
	 */
	[property] com::sun::star::util::Color TextColor;

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

	/** specifies the text line color (RGB) of the control.
	 */
	[property] com::sun::star::util::Color TextLineColor;

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

	/** specifies that the control may have the state "don't know".
	 */
	[property] boolean TriState;

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

    /** specifies the vertical alignment of the text in the control.

        @since OOo 2.0
	 */
    [optional, property] com::sun::star::style::VerticalAlignment VerticalAlign;

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

    /** specifies a visual effect to apply to the check box control

        <p>Possible values for this property are <type>VisualEffect</type>::FLAT and
        <type>VisualEffect</type>::LOOK3D.</p>

        @see com::sun::star::awt::VisualEffect

        @since OOo 2.0
     */
    [optional, property] short VisualEffect;

    /** denotes the writing mode used in the control, as specified in the
        <type scope="com::sun::star::text">WritingMode2</type> constants group.

        <p>Only <member scope="com::sun::star::text">WritingMode2::LR_TB</member> and
        <member scope="com::sun::star::text">WritingMode2::RL_TB</member> are supported at the moment.</p>

        @since OOo 3.1
    */
    [optional, property] short WritingMode;
};

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

}; }; }; };

#endif
