/**************************************************************
 * 
 * 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_table_TableBorder_idl__
#define __com_sun_star_table_TableBorder_idl__

#ifndef __com_sun_star_table_BorderLine_idl__
#include <com/sun/star/table/BorderLine.idl>
#endif

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

module com {  module sun {  module star {  module table {

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

/** contains the style settings of the border lines of all cells in a cell
	range.

	<p>In a queried structure, the flags in
	<member>TableBorder::Is...LineValid</member> indicate that not all
	lines of the boxes have the same values.</p>

	<p>In a structure which is used for setting, these flags determine
	if the corresponding line should be set or if the old value should
	be kept.</p>
 */
published struct TableBorder
{
	//-------------------------------------------------------------------------

	/** determines the line style at the top edge.
	 */
	com::sun::star::table::BorderLine TopLine;

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

	/** specifies whether the value of <member>TableBorder::TopLine</member>
		is used.
	 */
	boolean IsTopLineValid;

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

	/** determines the line style at the bottom edge.
	 */
	com::sun::star::table::BorderLine BottomLine;

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

	/** specifies whether the value of
		<member>TableBorder::BottomLine</member> is used.
	 */
	boolean IsBottomLineValid;

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

	/** determines the line style at the left edge.
	 */
	com::sun::star::table::BorderLine LeftLine;

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

	/** specifies whether the value of <member>TableBorder::LeftLine</member>
		is used.
	 */
	boolean IsLeftLineValid;

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

	/** determines the line style at the right edge.
	 */
	com::sun::star::table::BorderLine RightLine;

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

	/** specifies whether the value of <member>TableBorder::RightLine</member>
		is used.
	 */
	boolean IsRightLineValid;

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

	/** determines the line style of horizontal lines for the inner part
		of a cell range.
	 */
	com::sun::star::table::BorderLine HorizontalLine;

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

	/** specifies whether the value of
		<member>TableBorder::HorizontalLine</member> is used.
	 */
	boolean IsHorizontalLineValid;

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

	/** determines the line style of vertical lines for the inner part
		of a cell range.
	 */
	com::sun::star::table::BorderLine VerticalLine;

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

	/** specifies whether the value of
		<member>TableBorder::VerticalLine</member> is used.
	 */
	boolean IsVerticalLineValid;

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

	/** contains the distance between the lines and other contents.
	 */
	short Distance;

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

	/** specifies whether the value of <member>TableBorder::Distance</member>
		is used.
	 */
	boolean IsDistanceValid;

};

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

}; }; }; };

#endif

