/**************************************************************
 * 
 * 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_sheet_TablePageStyle_idl__
#define __com_sun_star_sheet_TablePageStyle_idl__

#ifndef __com_sun_star_style_PageStyle_idl__
#include <com/sun/star/style/PageStyle.idl>
#endif

#ifndef __com_sun_star_sheet_XHeaderFooterContent_idl__
#include <com/sun/star/sheet/XHeaderFooterContent.idl>
#endif

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

 module com {  module sun {  module star {  module sheet {

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

/** represents a page style for a spreadsheet.

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

	/** contains all common page style properties.
	 */
	service com::sun::star::style::PageStyle;

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

	/** determines whether the table is centered horizontally on the page.
	 */
	[property] boolean CenterHorizontally;

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

	/** determines whether the table is centered vertically on the page.
	 */
	[property] boolean CenterVertically;

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

	/** enables printing of cell annotations.
	 */
	[property] boolean PrintAnnotations;

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

	/** enables printing of the cell grid.
	 */
	[property] boolean PrintGrid;

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

	/** enables printing of column and row headers.
	 */
	[property] boolean PrintHeaders;

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

	/** enables printing of charts.
	 */
	[property] boolean PrintCharts;

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

	/** enables printing of embedded objects.
	 */
	[property] boolean PrintObjects;

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

	/** enables printing of drawing objects.
	 */
	[property] boolean PrintDrawing;

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

	/** enables printing of formulas instead of their results.
	 */
	[property] boolean PrintFormulas;

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

	/** enables printing of zero-values.
	 */
	[property] boolean PrintZeroValues;

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

	/** specifies the print order for the pages within each sheet.

		<p>If <TRUE/>, the order for printing pages begins with
		top-to-bottom, then continues with the next set of cell columns
		to the right. If <FALSE/>, the order for printing pages begins
		with left-to-right, then continues with the next set of cell
		rows to the bottom.</p>
	 */
	[property] boolean PrintDownFirst;

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

	/** contains the content of the header for left pages.

		<p>After changing the header text contents, this property has to be
		reinserted into the property set.</p>

		@see com::sun::star::sheet::HeaderFooterContent
	 */
	[property] com::sun::star::sheet::XHeaderFooterContent LeftPageHeaderContent;

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

	/** contains the content of the footer for left pages.

		<p>After changing the footer text contents, this property has to be
		reinserted into the property set.</p>

		@see com::sun::star::sheet::HeaderFooterContent
	 */
	[property] com::sun::star::sheet::XHeaderFooterContent LeftPageFooterContent;

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

	/** contains the content of the header for right pages.

		<p>After changing the header text contents, this property has to be
		reinserted into the property set.</p>

		@see com::sun::star::sheet::HeaderFooterContent
	 */
	[property] com::sun::star::sheet::XHeaderFooterContent RightPageHeaderContent;

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

	/** contains the content of the footer for right pages.

		<p>After changing the footer text contents, this property has to be
		reinserted into the property set.</p>

		@see com::sun::star::sheet::HeaderFooterContent
	 */
	[property] com::sun::star::sheet::XHeaderFooterContent RightPageFooterContent;

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

	/** contains the page number applied to the first page for this sheet.

		<p>The value 0 indicates that the page numbers are continued from
		the previous sheet.</p>
	 */
	[property] short FirstPageNumber;

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

	/** contains the scaling factor (in percent) for printing the sheet.
	 */
	[property] short PageScale;

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

	/** contains the number of pages the sheet will printed.
	 */
	[property] short ScaleToPages;

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

	/** contains the number of horizontal pages the sheet will printed on.

	@since OOo 2.0

	 */
	[property, optional] short ScaleToPagesX;

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

	/** contains the number of vertical pages the sheet will printed on.

	@since OOo 2.0

	 */
	[property, optional] short ScaleToPagesY;

};

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

}; }; }; };

#endif

