/**************************************************************
 * 
 * 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_sheet_SpreadsheetDocument_idl__
#define __com_sun_star_sheet_SpreadsheetDocument_idl__

#ifndef __com_sun_star_document_OfficeDocument_idl__
#include <com/sun/star/document/OfficeDocument.idl>
#endif

#ifndef __com_sun_star_sheet_SpreadsheetDocumentSettings_idl__
#include <com/sun/star/sheet/SpreadsheetDocumentSettings.idl>
#endif


#ifndef __com_sun_star_lang_XMultiServiceFactory_idl__
#include <com/sun/star/lang/XMultiServiceFactory.idl>
#endif

#ifndef __com_sun_star_frame_XModel_idl__
#include <com/sun/star/frame/XModel.idl>
#endif

#ifndef __com_sun_star_document_XActionLockable_idl__
#include <com/sun/star/document/XActionLockable.idl>
#endif

#ifndef __com_sun_star_document_XLinkTargetSupplier_idl__
#include <com/sun/star/document/XLinkTargetSupplier.idl>
#endif

#ifndef __com_sun_star_util_XProtectable_idl__
#include <com/sun/star/util/XProtectable.idl>
#endif

#ifndef __com_sun_star_sheet_XSpreadsheetDocument_idl__
#include <com/sun/star/sheet/XSpreadsheetDocument.idl>
#endif

#ifndef __com_sun_star_sheet_XCalculatable_idl__
#include <com/sun/star/sheet/XCalculatable.idl>
#endif

#ifndef __com_sun_star_sheet_XDocumentAuditing_idl__
#include <com/sun/star/sheet/XDocumentAuditing.idl>
#endif

#ifndef __com_sun_star_sheet_XConsolidatable_idl__
#include <com/sun/star/sheet/XConsolidatable.idl>
#endif

#ifndef __com_sun_star_sheet_XGoalSeek_idl__
#include <com/sun/star/sheet/XGoalSeek.idl>
#endif

#ifndef __com_sun_star_drawing_XDrawPagesSupplier_idl__
#include <com/sun/star/drawing/XDrawPagesSupplier.idl>
#endif

#ifndef __com_sun_star_style_XStyleFamiliesSupplier_idl__
#include <com/sun/star/style/XStyleFamiliesSupplier.idl>
#endif

#ifndef __com_sun_star_util_XNumberFormatsSupplier_idl__
#include <com/sun/star/util/XNumberFormatsSupplier.idl>
#endif


#ifndef __com_sun_star_sheet_XNamedRanges_idl__
#include <com/sun/star/sheet/XNamedRanges.idl>
#endif

#ifndef __com_sun_star_sheet_XDatabaseRanges_idl__
#include <com/sun/star/sheet/XDatabaseRanges.idl>
#endif

#ifndef __com_sun_star_sheet_XLabelRanges_idl__
#include <com/sun/star/sheet/XLabelRanges.idl>
#endif

#ifndef __com_sun_star_container_XNameAccess_idl__
#include <com/sun/star/container/XNameAccess.idl>
#endif

#ifndef __com_sun_star_sheet_XAreaLinks_idl__
#include <com/sun/star/sheet/XAreaLinks.idl>
#endif

#ifndef __com_sun_star_sheet_XExternalDocLinks_idl__
#include <com/sun/star/sheet/XExternalDocLinks.idl>
#endif

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

module com {  module sun {  module star {  module sheet {

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

/** represents a model component which consists of some settings and
	one or more spreadsheets.
 */
published service SpreadsheetDocument
{
	//-------------------------------------------------------------------------

	/** common service for all types of documents.
	 */
	service com::sun::star::document::OfficeDocument;

	//-------------------------------------------------------------------------

	/** contributes spreadsheet document specific properties.

	@deprecated
	 */
	[optional] service com::sun::star::sheet::SpreadsheetDocumentSettings;

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

	/** provides methods to create instances of several spreadsheet
		services.
	 */
	interface com::sun::star::lang::XMultiServiceFactory;

	//-------------------------------------------------------------------------

	/** provides common methods for a document model.

		<p>This interface is derived from
		<type scope="com::sun::star::lang">XComponent</type>.</p>
	 */
	interface com::sun::star::frame::XModel;

	//-------------------------------------------------------------------------

	/** provides methods to control the automatic update of cell contents.
	 */
	interface com::sun::star::document::XActionLockable;

	//-------------------------------------------------------------------------

	/** provides access to the collection of link targets available in
		the document.
	 */
	interface com::sun::star::document::XLinkTargetSupplier;

	//-------------------------------------------------------------------------

	/** provides methods to protect and unprotect the document.
	 */
	interface com::sun::star::util::XProtectable;

	//-------------------------------------------------------------------------

	/** provides access to the collection of spreadsheets.
	 */
	interface com::sun::star::sheet::XSpreadsheetDocument;

	//-------------------------------------------------------------------------

	/** controls the recalculation settings of the document.
	 */
	interface com::sun::star::sheet::XCalculatable;

	//-------------------------------------------------------------------------

	/** provides a method to refresh all auditing arrows.
	 */
	interface com::sun::star::sheet::XDocumentAuditing;

	//-------------------------------------------------------------------------

	/** provides methods to perform a data consolidation.
	 */
	interface com::sun::star::sheet::XConsolidatable;

	//-------------------------------------------------------------------------

	/** provides a method to perform a goal seek.
	 */
	interface com::sun::star::sheet::XGoalSeek;

	//-------------------------------------------------------------------------

	/** provides access to the collection of draw pages of this document.
	 */
	interface com::sun::star::drawing::XDrawPagesSupplier;

	//-------------------------------------------------------------------------

	/** provides access to the collection of style families.

		<p>A spreadsheet document contains 2 families of styles:
		"PageStyles" and "CellStyles".</p>
	 */
	interface com::sun::star::style::XStyleFamiliesSupplier;

	//-------------------------------------------------------------------------

	/** provides access to the collection of number formats contained in
		the document.
	 */
	interface com::sun::star::util::XNumberFormatsSupplier;

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

	/** contains the collection of named ranges in the document.
	 */
	[readonly, property] com::sun::star::sheet::XNamedRanges NamedRanges;

	//-------------------------------------------------------------------------

	/** contains the collection of database ranges in the document.
	 */
	[readonly, property] com::sun::star::sheet::XDatabaseRanges DatabaseRanges;

	//-------------------------------------------------------------------------

	/** contains the collection of column label ranges in the document.
	 */
	[readonly, property] com::sun::star::sheet::XLabelRanges ColumnLabelRanges;

	//-------------------------------------------------------------------------

	/** contains the collection of row label ranges in the document.
	 */
	[readonly, property] com::sun::star::sheet::XLabelRanges RowLabelRanges;

	//-------------------------------------------------------------------------

	/** contains the collection of sheet links in the document.
	 */
	[readonly, property] com::sun::star::container::XNameAccess SheetLinks;

	//-------------------------------------------------------------------------

	/** contains the collection of area links in the document.
	 */
	[readonly, property] com::sun::star::sheet::XAreaLinks AreaLinks;

	//-------------------------------------------------------------------------

	/** contains the collection of DDE links in the document.
	 */
	[readonly, property] com::sun::star::container::XNameAccess DDELinks;

    //-------------------------------------------------------------------------

#if 0
    /** contains the collection of external document links in the document.

        @since OOo 3.1
     */
    [optional, readonly, property] com::sun::star::sheet::XExternalDocLinks ExternalDocLinks;
#endif

};

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

}; }; }; };

#endif

