/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */
#ifndef __com_sun_star_document_OfficeDocument_idl__
#define __com_sun_star_document_OfficeDocument_idl__

#include <com/sun/star/frame/XModel.idl>
#include <com/sun/star/util/XModifiable.idl>
#include <com/sun/star/frame/XStorable.idl>
#include <com/sun/star/view/XPrintable.idl>
#include <com/sun/star/view/XPrintJobBroadcaster.idl>
#include <com/sun/star/document/XEventBroadcaster.idl>
#include <com/sun/star/document/XEventsSupplier.idl>
#include <com/sun/star/document/XViewDataSupplier.idl>
#include <com/sun/star/document/XDocumentEventBroadcaster.idl>
#include <com/sun/star/document/XEmbeddedScripts.idl>
#include <com/sun/star/document/XDocumentPropertiesSupplier.idl>
#include <com/sun/star/document/XUndoManagerSupplier.idl>


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

/** abstract service which specifies a storable and printable document

    <p>
    All major document-like components should support this service
    instead of simple components which supports a com::sun::star::frame::Controller
    or pure com::sun::star::awt::XWindow only.
    </p>

    @see com::sun::star::frame::Controller
 */
published service OfficeDocument
{
    /** represents a component which is created from an URL and arguments

        <p>
        It is a representation of a resource in the sense that it was
        created/loaded from the resource. The arguments are passed to the loader
        to modify its behavior.
        </p>
     */
    interface com::sun::star::frame::XModel;

    /** a storable document should provide information about his modify state

        <p>
        With this interface it's possible too, to reset the modify state.
        That can be necessary to prevent code against problem during closing
        of the document without saving any changes.
        </p>
     */
    interface com::sun::star::util::XModifiable;

    /** offers a simple way to store a component to an URL

        <p>
        This interface supports functionality
        <ul>
            <li>to make a copy of current component by saving it to another location</li>
            <li>to commit made changes</li>
            <li>to convert it by saving it by using suitable filter name.</li>
        </ul>
        </p>
     */
    interface com::sun::star::frame::XStorable;

    /** offers a way to print a component

        <p>
        It's possible to specify which printer should be used and of course
        print the document on it.
        </p>
     */
    interface com::sun::star::view::XPrintable;

    /** is an old and deprecated version of the XDocumentEventBroadcaster interface
        @deprecated
     */
    [optional] interface XEventBroadcaster;

    /** makes it possible to register listeners which are called whenever
        a document event occurs
     */
    [optional] interface XDocumentEventBroadcaster;

    /** access to bound event handlers
     */
    [optional] interface XEventsSupplier;

    /** access to some properties describing all open views to a document
     */
    [optional] interface XViewDataSupplier;

    /** allows for getting information about a print job

        @since OOo 1.1.2
     */
    [optional] interface com::sun::star::view::XPrintJobBroadcaster;

    /** is supported when the document can contain scripts and dialogs

        @since OOo 2.4
    */
    [optional] interface XEmbeddedScripts;

    /** access to the DocumentProperties.

        @since OOo 3.0
     */
    [optional] interface XDocumentPropertiesSupplier;

    /** provides access to the document's undo manager.
    */
    [optional] interface XUndoManagerSupplier;

    /** controls the focus behavior of the form controls in the document

        <p>
        If this flag is set to `TRUE`, any view belonging to the document
        should focus the first control in the document. With this, you may
        control if your document works primarily as a form document.
        </p>
    */
    [property, optional] boolean AutomaticControlFocus;

    /** controls the initial (on-load) behavior of the form controls in the document

        <p>If set to `TRUE`, upon loading the document, the form controls will be in design mode.<br/>
        If set to `FALSE`, they will be alive, i.e. operational.<br/>
        With this, you may control if your document works primarily as a form document.
        </p>
    */
    [property, optional] boolean ApplyFormDesignMode;

    /** contains a unique id for the document

        <p>Once calculated, the id must not change until the document has been
        closed. Upon closing it will not be made persistent. Thus, the document
        may get a different id every time it gets loaded.</p>
    */
    [property, optional, readonly] string RuntimeUID;

    /** Grab bag of document properties, used as a string-any map for
        interim interop purposes.

        @since LibreOffice 4.2

        <p>This property is intentionally not handled by the ODF
        filter. Any member that should be handled there should be
        first moved out from this grab bag to a separate property.</p>
    */
    [optional, property] sequence<com::sun::star::beans::PropertyValue> InteropGrabBag;
};


}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
