/**************************************************************
 * 
 * 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_TextColumns_idl__
#define __com_sun_star_text_TextColumns_idl__

#ifndef __com_sun_star_text_XTextColumns_idl__
#include <com/sun/star/text/XTextColumns.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 text {

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

// DocMerge from xml: service com::sun::star::text::TextColumns
/** provides access to columns in text (e.g., in TextFrames ).
 */
published service TextColumns
{
	// DocMerge: empty anyway
	interface com::sun::star::text::XTextColumns;

    //------------------------------------------------------------------------
    /** determines whether the columns all have equal width. This flag is set if XTextColumns::setColumnCount() is called
     and it is reset if XTextColumns::setColumns() is called.
	 */
    [readonly, property]  boolean IsAutomatic;
    //------------------------------------------------------------------------
    /** contains the distance between the columns. It is valid if the property IsAutomatic is set.
 <!-- The h -->Half of this distance is set to the left and right margins of all columns, 
	except for the left margin of the first column, and the right margin of the last column.*/
    [property]  long AutomaticDistance;
    //------------------------------------------------------------------------
    /** determines the width of the separator lines between the columns.
	 */
    [property]  long SeparatorLineWidth;
    //------------------------------------------------------------------------
    /** determines the color of the separator lines between the columns.
	 */
    [property]  com::sun::star::util::Color SeparatorLineColor;
    //------------------------------------------------------------------------
    /** determines the relative height of the separator lines between the columns.
	 */
    [property]  long SeparatorLineRelativeHeight;
    //------------------------------------------------------------------------
    /** determines the vertical alignment of the separator lines between the columns.
	 */
    [property]  com::sun::star::style::VerticalAlignment SeparatorLineVerticalAlignment;
    //------------------------------------------------------------------------
    /** determines whether separator lines are on.
	 */
    [property]  boolean SeparatorLineIsOn;
    //------------------------------------------------------------------------
};

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

}; }; }; };

#endif
