/**************************************************************
 * 
 * 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_style_BreakType_idl__ 
#define __com_sun_star_style_BreakType_idl__ 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module style {  
 
//============================================================================= 
 
// DocMerge from xml: enum com::sun::star::style::BreakType
/** These enumeration values are used to specify if and how a page or
	column break is applied.
 */
published enum BreakType
{ 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: value com::sun::star::style::BreakType::NONE
	/** No column or page break is applied.
	 */
	NONE, 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: value com::sun::star::style::BreakType::COLUMN_BEFORE
	/** A column break is applied before the object to which it belongs.
		
		
		
		<p>This implies that the object to which it belongs is the
		first in its column.</p>
	 */
	COLUMN_BEFORE, 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: value com::sun::star::style::BreakType::COLUMN_AFTER
	/** A column break is applied after the object to which it belongs.
		
		
		
		<p>This implies that the object to which it belongs is the last
		in its column.</p>
	 */
	COLUMN_AFTER, 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: value com::sun::star::style::BreakType::COLUMN_BOTH
	/** A column break is applied before and after the object to which
		it belongs.
		
		
		
		<p>This implies that this object is the only one in its column.</p>
	 */
	COLUMN_BOTH, 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: value com::sun::star::style::BreakType::PAGE_BEFORE
	/** A page break is applied before the object to which it belongs.
		
		
		
		<p>This implies that the object to which it belongs is the
		first on its page.  	</p>
	 */
	PAGE_BEFORE, 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: value com::sun::star::style::BreakType::PAGE_AFTER
	/** A page break is applied after the object to which it belongs.
		
		
		
		<p>This implies that the object to which it belongs is the last
		on its page.</p>
	 */
	PAGE_AFTER, 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: value com::sun::star::style::BreakType::PAGE_BOTH
	/** A page break is applied before and after the object to which
		it belongs.
		
		
		
		<p>This implies that this object is the only one on its page.</p>
	 */
	PAGE_BOTH 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 
