/**************************************************************
 * 
 * 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_UnoControlFixedHyperlinkModel_idl__
#define __com_sun_star_awt_UnoControlFixedHyperlinkModel_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_style_VerticalAlignment_idl__
#include <com/sun/star/style/VerticalAlignment.idl>
#endif

#ifndef __com_sun_star_util_Color_idl__
#include <com/sun/star/util/Color.idl>
#endif


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

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

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

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

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

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

		<pre>
		0: left
		1: center
		2: right
		</pre>
	 */
	[property] short Align;

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

	/** 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 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 the label of the control.
	 */
	[property] string Label;

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

	/** specifies that the text may be displayed on more than one line.
	 */
	[property] boolean MultiLine;

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

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

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

	/** 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 URL.
         */
        [property] string URL;

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

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

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

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

}; }; }; };

#endif

