/**************************************************************
 * 
 * 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_UnoControlFileControlModel_idl__ 
#define __com_sun_star_awt_UnoControlFileControlModel_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>UnoControlFileControl</type>.
 */
published service UnoControlFileControlModel
{ 
	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;
 
	//------------------------------------------------------------------------- 
	 
	/** determines whether a 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.

        @since OOo 1.1.2
	 */
	[optional, property] boolean ReadOnly; 
 
	//-------------------------------------------------------------------------

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

	/** specifies the text displayed in the control.
	 */
	[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;
    
    //-------------------------------------------------------------------------

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

        @since OOo 3.3
	 */
    [optional, property] com::sun::star::style::VerticalAlignment VerticalAlign;
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
