/**************************************************************
 * 
 * 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_text_TextPageStyle_idl__
#define __com_sun_star_text_TextPageStyle_idl__

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

#ifndef __com_sun_star_table_ShadowFormat_idl__
#include <com/sun/star/table/ShadowFormat.idl>
#endif
#ifndef __com_sun_star_table_BorderLine_idl__
#include <com/sun/star/table/BorderLine.idl>
#endif
#ifndef __com_sun_star_style_PageStyleLayout_idl__
#include <com/sun/star/style/PageStyleLayout.idl>
#endif
#ifndef __com_sun_star_style_GraphicLocation_idl__
#include <com/sun/star/style/GraphicLocation.idl>
#endif
#ifndef __com_sun_star_awt_Size_idl__
#include <com/sun/star/awt/Size.idl>
#endif
#ifndef __com_sun_star_text_XText_idl__
#include <com/sun/star/text/XText.idl>
#endif
#ifndef __com_sun_star_text_XTextColumns_idl__
#include <com/sun/star/text/XTextColumns.idl>
#endif
#ifndef __com_sun_star_container_XNameContainer_idl__
#include <com/sun/star/container/XNameContainer.idl>
#endif

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

module com {  module sun {  module star {  module text {

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

/** represents a page style for a text document.

	<p>This service extends the service
	<type scope="com::sun::star::style">PageStyle</type> with specific
	properties for text documents.</p>
 */
published service TextPageStyle
{
	//-------------------------------------------------------------------------

	/** determins whether the register mode is active on that page.
 	 */
	[property] boolean RegisterModeActive;

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

	/** contains the name of the paragraph style that is used as
		reference of the register mode.
 	 */
	[property] string RegisterParagraphStyle;

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

	/** contains the column settings of the page.
 	 */
	[property] com::sun::star::text::XTextColumns TextColumns;

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

	/** contains the interface to the text of the header.

		@see com::sun::star::text::Text
 	 */
	[property] com::sun::star::text::XText HeaderText;

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

	/** contains the interface to the text of the header of left pages.

		@see com::sun::star::text::Text
 	 */
	[property] com::sun::star::text::XText HeaderTextLeft;

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

	/** contains the interface to the text of the header of right pages.

		@see com::sun::star::text::Text
 	 */
	[property] com::sun::star::text::XText HeaderTextRight;

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

	/** contains the interface to the text of the footer.

		@see com::sun::star::text::Text
 	 */
	[property] com::sun::star::text::XText FooterText;

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

	/** contains the interface to the text of the footer of a left page.

		@see com::sun::star::text::Text
 	 */
	[property] com::sun::star::text::XText FooterTextLeft;

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

	/** contains the interface to the text of the footer of a right page.

		@see com::sun::star::text::Text
 	 */
	[property] com::sun::star::text::XText FooterTextRight;

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

	/** contains the maximum height of the footnote area (in 1/100 mm).

		<p>If set to zero, the height of the current page is used as limit.</p>
 	*/
	[property] long FootnoteHeight;

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

	/** contains the weight of the separator line between the text and
		the footnote area (in 1/100 mm).
 	 */
	[property] short FootnoteLineWeight;

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

	/** contains the color of the separator line between the text and
		the footnote area.
 	 */
	[property] com::sun::star::util::Color FootnoteLineColor;

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

	/** contains the relative width of the separator line between the
		text and the footnote area (in percent).
 	 */
	[property] byte FootnoteLineRelativeWidth;

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

	/** contains the adjustment of the separator line between the text
		and the footnote area.

		@see com::sun::star::text::HorizontalAdjust
 	 */
	[property] short FootnoteLineAdjust;

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

	/** contains the distance between the text and the separator line
		between the text and the footnote area (in 1/100 mm).
 	 */
	[property] long FootnoteLineTextDistance;

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

	/** contains the distance between the footnote area and the separator
		line between the text and the footnote area (in 1/100 mm).
 	*/
	[property] long FootnoteLineDistance;

};

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

}; }; }; };

#endif

