/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/
#ifndef com_sun_star_chart2_XChartDocument_idl
#define com_sun_star_chart2_XChartDocument_idl

#include <com/sun/star/chart2/XDiagram.idl>
#include <com/sun/star/chart2/XChartTypeManager.idl>
#include <com/sun/star/chart2/data/XDataProvider.idl>
#include <com/sun/star/frame/XModel.idl>
#include <com/sun/star/beans/XPropertySet.idl>
#include <com/sun/star/lang/IllegalArgumentException.idl>
#include <com/sun/star/util/CloseVetoException.idl>

module com
{
module sun
{
module star
{
module chart2
{

interface XChartDocument : ::com::sun::star::frame::XModel
{
    /** @todo allow more than one diagram

        <p>Notes: this is preliminary, we need an API that supports
        more than one diagram. The method name getDiagram exists in
        the css.chart API, so there is would be no way to chose either
        this or the other method from Basic (it would chose one or the
        other by random).</p>
     */
    XDiagram getFirstDiagram();

    /** @todo allow more than one diagram

        <p>Notes: this is preliminary, we need an API that supports
        more than one diagram. The method name setDiagram exists in
        the css.chart API, so there is would be no way to chose either
        this or the other method from Basic (it would chose one or the
        other by random).</p>
     */
    void setFirstDiagram( [in] XDiagram xDiagram );

    /** creates an internal
        <type scope="com::sun::star::chart2">XDataProvider</type> that
        is handled by the chart document itself.

        <p>When the model is stored, the data provider will also be
        stored in a sub-storage.</p>

        @param bCloneExistingData
            if <TRUE/> and a data provider was previously attached,
            its referred data will be copied to the new internal data
            provider.  Note, that the range representation set before
            will usually change after cloning.</p>

        @throws com::sun::star::util:CloseVetoException
            If the new data provider could not be created due to a
            failed removal of the former data provider.
     */
    void createInternalDataProvider( [in] boolean bCloneExistingData )
        raises( com::sun::star::util::CloseVetoException );

    /** @return <TRUE/> if the data provider set at the chart document
        is an internal one.

        <p>This is the case directly after
        <member>createInternalDataProvider</member> has been called,
        but this is not necessary.  The chart can also create an
        internal data provider by other means, e.g. a call to
        <member scope="com::sun::star::frame">XModel::initNew</member>.
        </p>
     */
    boolean hasInternalDataProvider();

    /** Returns the currently set data provider.  This may be an
        internal one, if <member>createInternalDataProvider</member>
        has been called before, or an external one if
        <member>XDataReceiver::attachDataProvider</member> has been
        called.
     */
    data::XDataProvider getDataProvider();

    /** sets a new component that is able to create different chart
        type templates (components of type
        <type>ChartTypeTemplate</type>)
     */
    void setChartTypeManager( [in] XChartTypeManager xNewManager );

    /** retrieves the component that is able to create different chart
        type templates (components of type
        <type>ChartTypeTemplate</type>)
     */
    XChartTypeManager getChartTypeManager();

    /** Gives access to the page background appearance.

        @return
            the properties of the background area of the chart
            document.

        <p>The area's extent is equal to the document size.  If you
        want to access properties of the background area of a single
        diagram (the part where data points are actually plotted in),
        you have to get its wall.  You can get the wall by calling
        <member>XDiagram::getWall</member>.</p>
     */
    com::sun::star::beans::XPropertySet getPageBackground();
};

} ; // chart2
} ; // com
} ; // sun
} ; // star

#endif
