/**************************************************************
 *
 * 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_AutoTextGroup_idl__
#define __com_sun_star_text_AutoTextGroup_idl__

#include <com/sun/star/text/XAutoTextGroup.idl>
#include <com/sun/star/container/XIndexAccess.idl>
#include <com/sun/star/container/XNamed.idl>

module com {  module sun {  module star {  module text {

/** provides access to text blocks in a group.
    @see com::sun::star::text::AutoTextContainer
 */
published service AutoTextGroup
{
    interface com::sun::star::text::XAutoTextGroup;

    interface com::sun::star::container::XIndexAccess;

    /** provides access to the name of the group.
    */
    interface com::sun::star::container::XNamed;

    /** The path to the file containing the <type>AutoTextEntry</type>&apos;s in this group
     */
    [property, readonly] string FilePath;

    /** The title of this <type>AutoTextGroup</type>
     */
    [property] string Title;

};

}; }; }; };

#endif
