/**************************************************************
 * 
 * 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_ContentIndex_idl__ 
#define __com_sun_star_text_ContentIndex_idl__ 
 
#include <com/sun/star/text/BaseIndex.idl> 
 
//============================================================================= 
 
module com {  module sun {  module star {  module text { 
 
//============================================================================= 
 
/** specifies service of content indexes within a document.@see com::sun::star::text::BaseIndex
 */
published service ContentIndex
{ 
	// DocMerge: empty anyway
	service  com::sun::star::text::BaseIndex; 
 
	/** determins the depth of outline levels that are included into the content index.*/ 
	
	/// @missing
	[optional, property] short Level; 

	/** determins if the document index is created from outlines. 
	*/ 
	[optional, property] boolean CreateFromOutline; 
 
	/** contains the interface to access the paragraph style names that are included 
	 in this index. 
	 @see DocumentIndexParagraphStyles 
	 */ 
	[optional, property] com::sun::star::container::XIndexReplace LevelParagraphStyles; 

	/** contains <TRUE/> if the document index marks are included in this index. 
	*/ 
	[optional, property] boolean CreateFromMarks; 
 
 
}; 
 
//============================================================================= 
 
}; }; }; }; 
 
#endif 
 
