/**************************************************************
 * 
 * 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_DocumentInfo_idl__
#define __com_sun_star_document_DocumentInfo_idl__

#ifndef __com_sun_star_document_XDocumentInfo_idl__
#include <com/sun/star/document/XDocumentInfo.idl>
#endif

#ifndef __com_sun_star_lang_XComponent_idl__
#include <com/sun/star/lang/XComponent.idl>
#endif

#ifndef __com_sun_star_beans_XPropertySet_idl__
#include <com/sun/star/beans/XPropertySet.idl>
#endif

#ifndef __com_sun_star_beans_XFastPropertySet_idl__
#include <com/sun/star/beans/XFastPropertySet.idl>
#endif

#ifndef __com_sun_star_beans_XPropertyContainer_idl__
#include <com/sun/star/beans/XPropertyContainer.idl>
#endif

#ifndef __com_sun_star_beans_NamedValue_idl__
#include <com/sun/star/beans/NamedValue.idl>
#endif
#ifndef __com_sun_star_util_DateTime_idl__
#include <com/sun/star/util/DateTime.idl>
#endif

#ifndef __com_sun_star_lang_Locale_idl__
#include <com/sun/star/lang/Locale.idl>
#endif

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

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

//=============================================================================
/** this service provides document-specific information like the
    author, creation date and user fields

    <p>
    Contrary to the service <type>StandaloneDocumentInfo</type> the document - which
    contains such informations - must be loaded completly. As a result of that this
    DocumengInfo service is available on an open document via the interface
    <type>XDocumentInfoSupplier</type> only.
    </p>

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

    @see StandaloneDocumentInfo
    @see XDocumentInfoSupplier
 */
published service DocumentInfo
{
    //-------------------------------------------------------------------------
    /** provides access to the user fields for the information regarding the
        document

        <p>
        These fields are additional to normal properties.
        (see below)
        </p>
     */
    interface XDocumentInfo;

    //-------------------------------------------------------------------------
    /** necessary to support normal properties
     */
	interface com::sun::star::beans::XPropertySet;

    //-------------------------------------------------------------------------
    /** supports faster access on well known properties by using index
     */
	interface com::sun::star::beans::XFastPropertySet;

    //-------------------------------------------------------------------------
    /** provides access to the user fields, which (instead to the user fields set
        by the interface XDocumentInfo) will be typesafe.

        <p>
        These fields are additional to normal properties (see below) and
        additional to the user fields set by the interface XDocumentInfo (see before).
        </p>
     */
	[optional] interface com::sun::star::beans::XPropertyContainer;

	//-------------------------------------------------------------------------
    /** contains the initial author of the document
	 */
	[property] string Author;

    //-------------------------------------------------------------------------
    /** @deprecated
     */
	[property] boolean AutoloadEnabled;

	//-------------------------------------------------------------------------
	/** contains the number of seconds after which a specified
		URL is to be loaded after the document is loaded into a desktop
        frame
	 */
	[property] long AutoloadSecs;

	//-------------------------------------------------------------------------
	/** contains the URL to load automatically after a
        specified time after the document is loaded into a desktop frame
	 */
	[property] string AutoloadURL;

	//-------------------------------------------------------------------------
	/** contains the date and time of the first time the
        document was stored
	 */
	[property] com::sun::star::util::DateTime CreationDate;

	//-------------------------------------------------------------------------
	/** contains the name of the default frame into which
        links should be loaded if no target is specified

        <p>
        This applies to the autoload feature too, but to others as well.
        </p>
	 */
	[property] string DefaultTarget;

	//-------------------------------------------------------------------------
    /** contains a multi-line comment of the document

        <p>
        Line delimiters can be UNIX, Macintosh or DOS style.
        </p>
	 */
	[property] string Description;

	//-------------------------------------------------------------------------
    /** contains some statistics about the document

        <p>
        The exact name and type of the values depends on the document type
        </p>
	 */
    [property] sequence< com::sun::star::beans::NamedValue > DocumentStatistic;

	//-------------------------------------------------------------------------
    /** describes how often the document was edited and saved
	 */
    [property] short EditingCycles;

	//-------------------------------------------------------------------------
    /** contains the net time of editing the document (in seconds)
	 */
    [property] long EditingDuration;

    //-------------------------------------------------------------------------
    /** identifies application was used to create or last modify the document
	 */
    [property] string Generator;

	//-------------------------------------------------------------------------
	/** contains a comma separated list of keywords for
        the document
	 */
	[property] string Keywords;

	//-------------------------------------------------------------------------
    /** contains the MIME-type of the document's resource

        <p>
        The MIME-type is neither stored in the document information nor in
		the document; it is sent within a protocol header or is
        detected, thus it cannot be changed.
        </p>
	 */
	[readonly, property] string MIMEType;

    //-------------------------------------------------------------------------
    /** default language of the document
	 */
    [property] com::sun::star::lang::Locale Language;

	//-------------------------------------------------------------------------
	/** contains the name of the editor who was the last
        person to store this document
	 */
	[property] string ModifiedBy;

    //-------------------------------------------------------------------------
	/** contains the date and time of the last time the
        document was stored
	 */
	[property] com::sun::star::util::DateTime ModifyDate;

    //-------------------------------------------------------------------------
	/** contains the date and time of when the document was
        last printed
	 */
	[property] com::sun::star::util::DateTime PrintDate;

	//-------------------------------------------------------------------------
	/** contains the name of the editor who was the last
        person to print the document
	 */
	[property] string PrintedBy;

    //-------------------------------------------------------------------------
    /** subject of document
	 */
    [property] string Subject;

	//-------------------------------------------------------------------------
    /** contains logical name of the template from
        which the document was created

        <p>
        The value is an empty string if the document was not created
        from a template or if it was detached from the template.
        </p>
	 */
	[property] string Template;

	//-------------------------------------------------------------------------
    /** contains the file path name of the template from
        which the document was created
	 */
    [property] string TemplateFileName;

	//-------------------------------------------------------------------------
	/** contains the date and time of when the document
        was created or updated from the template
	 */
	[property] com::sun::star::util::DateTime TemplateDate;

    //-------------------------------------------------------------------------
    /** contains the title of the document
	 */
	[property] string Title;

};

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

}; }; }; };

#endif
