/**************************************************************
 *
 * 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_UnoControlNumericFieldModel_idl__
#define __com_sun_star_awt_UnoControlNumericFieldModel_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_util_Color_idl__
#include <com/sun/star/util/Color.idl>
#endif

#ifndef __com_sun_star_style_VerticalAlignment_idl__
#include <com/sun/star/style/VerticalAlignment.idl>
#endif

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

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

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

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

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

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

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

	/** specifies the border style of the control.

		<pre>
		0: No border
		1: 3D border
		2: simple border
		</pre>
	 */
	[property] short Border;

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

	/** specifies the color of the border, if present

        <p>Not every border style (see <member>Border</member>) may support coloring.
        For instance, usually a border with 3D effect will ignore the BorderColor setting.</p>

        @since OpenOffice 2.0
	 */
	[optional, property] long BorderColor;

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

	/** specifies the decimal accuracy.
	 */
	[property] short DecimalAccuracy;

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

	/** 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 whether the selection in the control should be hidden when
        the control is not active (focused).

        @since OpenOffice 2.0
     */
    [optional, property] boolean HideInactiveSelection;

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

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

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

	/** specifies that the content of the control cannot be modified by the
        user.
	 */
	[property] boolean ReadOnly;

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

	/** specifies whether the mouse should show repeating behaviour, i.e.
        repeatedly trigger an action when keeping pressed.

        @since OpenOffice 2.0
     */
    [optional, property] boolean Repeat;

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

	/** specifies the mouse repeat delay, in milliseconds.

        <p>When the user presses a mouse in a control area where this triggers
        an action (such as spinning the value), then usual control implementations
        allow to repeatedly trigger this action, without the need to release the
        mouse button and to press it again. The delay between two such triggers
        is specified with this property.</p>

        @since OpenOffice 2.0
     */
	[optional, property] long RepeatDelay;

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

	/** specifies whether the thousands separator is to be displayed.
	 */
	[property] boolean ShowThousandsSeparator;

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

	/** specifies that the control has a spin button.
	 */
	[property] boolean Spin;

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

	/** specifies that the value is checked during the user input.
	 */
	[property] boolean StrictFormat;

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

	/** 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 the value displayed in the control.
	 */
	[property] double Value;

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

	/** specifies the maximum value that can be entered.
	 */
	[property] double ValueMax;

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

	/** specifies the minimum value that can be entered.
	 */
	[property] double ValueMin;

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

	/** specifies the value step when using the spin button.
	 */
	[property] double ValueStep;

    /** 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 OpenOffice 3.1
    */
    [optional, property] short WritingMode;

    /** defines how the mouse wheel can be used to scroll through the control's content.

        <p>Usually, the mouse wheel spins the numeric value displayed in the control. Using this property,
        and one of the <type>MouseWheelBehavior</type> constants, you can control under which circumstances
        this is possible.</p>
    */
    [optional, property] short MouseWheelBehavior;

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

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

        @since OpenOffice 3.3
	 */
    [optional, property] com::sun::star::style::VerticalAlignment VerticalAlign;
};

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

}; }; }; };

#endif
