/**************************************************************
 * 
 * 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 OOo 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 OOo 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 OOo 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 OOo 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 OOo 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 OOo 3.3
	 */
    [optional, property] com::sun::star::style::VerticalAlignment VerticalAlign;
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
