/**************************************************************
 * 
 * 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_UnoControlDateFieldModel_idl__ 
#define __com_sun_star_awt_UnoControlDateFieldModel_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>UnoControlDateField</type>.
 */
published service UnoControlDateFieldModel
{ 
	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 date displayed in the control.

        <p>The date must be specified in the format YYYYMMDD.</p>
	 */
	[property] long Date;
    
	//------------------------------------------------------------------------- 
	 
	/** specifies the format of the displayed date.
				
		<pre>
		0:   system short
		1:   system short YY
		2:   system short YYYY
		3:   system long
		4:   short DDMMYY
		5:   short MMDDYY
		6:   short YYMMDD
		7:   short DDMMYYYY
		8:   short MMDDYYYY
		9:   short YYYYMMDD
		10:  short YYMMDD DIN5008
		11:  short YYYYMMDD DIN5008
		</pre>
	 */
	[property] short DateFormat;
    
	//------------------------------------------------------------------------- 
	 
	/** specifies the maximum date that can be entered.
	 */
	[property] long DateMax; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the minimum date that can be entered.
	 */
	[property] long DateMin; 
 
	//-------------------------------------------------------------------------
    
	/** specifies, if the date century is displayed.
	 */
	[property] boolean DateShowCentury; 
 
	//-------------------------------------------------------------------------
    
	/** specifies, if the control has a dropdown button.
	 */
	[property] boolean Dropdown; 
 
	//-------------------------------------------------------------------------
    
	/** 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 that the control has a spin button.
	 */
	[property] boolean Spin; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies that the date 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 displayed in the control.

        @since OOo 2.0    
     */
	[optional, property] string Text; 

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

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