/**************************************************************
 * 
 * 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_document_StandaloneDocumentInfo_idl__
#define __com_sun_star_document_StandaloneDocumentInfo_idl__

#ifndef __com_sun_star_document_DocumentInfo_idl__
#include <com/sun/star/document/DocumentInfo.idl>
#endif

#ifndef __com_sun_star_document_XStandaloneDocumentInfo_idl__
#include <com/sun/star/document/XStandaloneDocumentInfo.idl>
#endif

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

  module com {   module sun {   module star {   module document {

//=============================================================================
/** extends the service <type>DocumentInfo</type> to have access on such
    document properties without loading the whole document

    <p>
    First action on this service must be to specify which document should be handled.
    Otherwise all supported properties of <type>DocumentInfo</type> will be set to
    void values. Loading of a document doesn't mean - loading all. It means reading
    of special part only, which includes searched information. Same procedure for saving
    of may changed values back to the document.
    </p>

    @deprecated     Use <type>DocumentProperties</type> instead.

    @see DocumentInfo
 */
published service StandaloneDocumentInfo
{
    //-------------------------------------------------------------------------
    /** use it to specify ressource or target of document info data

        <p>
        Must be the first action on this service. Otherwise all properties will be void.
        </p>
     */
    interface XStandaloneDocumentInfo;

    //-------------------------------------------------------------------------
    /** access to document info data
     */
    service DocumentInfo;
};

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

}; }; }; };

#endif
