/**************************************************************
 * 
 * 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_UnoControlCurrencyFieldModel_idl__ 
#define __com_sun_star_awt_UnoControlCurrencyFieldModel_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>UnoControlCurrencyField</type>.
 */
published service UnoControlCurrencyFieldModel
{ 
	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 currency symbol.
	 */
	[property] string CurrencySymbol; 
 
	//------------------------------------------------------------------------- 
	 
	/** 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 whether the currency symbol is to be prepended.
     */

    [property] boolean PrependCurrencySymbol;

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