diff options
Diffstat (limited to 'inc/bf_sc/cellsuno.hxx')
-rw-r--r-- | inc/bf_sc/cellsuno.hxx | 1462 |
1 files changed, 1462 insertions, 0 deletions
diff --git a/inc/bf_sc/cellsuno.hxx b/inc/bf_sc/cellsuno.hxx new file mode 100644 index 000000000..5d561c66b --- /dev/null +++ b/inc/bf_sc/cellsuno.hxx @@ -0,0 +1,1462 @@ +/* -*- 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 SC_CELLSUNO_HXX +#define SC_CELLSUNO_HXX + +#include <bf_svtools/bf_solar.h> + + +#include "rangelst.hxx" // ScRangeList + +#include <bf_svtools/lstner.hxx> + +#include <bf_svtools/itemprop.hxx> + +#include <com/sun/star/table/XTableChartsSupplier.hpp> +#include <com/sun/star/chart/XChartDataArray.hpp> +#include <com/sun/star/text/XTextFieldsSupplier.hpp> +#include <com/sun/star/drawing/XDrawPageSupplier.hpp> +#include <com/sun/star/sheet/XFormulaQuery.hpp> +#include <com/sun/star/sheet/XCellRangeAddressable.hpp> +#include <com/sun/star/sheet/XSheetOperation.hpp> +#include <com/sun/star/sheet/XSheetCellRangeContainer.hpp> +#include <com/sun/star/sheet/XCellFormatRangesSupplier.hpp> +#include <com/sun/star/sheet/XUniqueCellFormatRangesSupplier.hpp> +#include <com/sun/star/sheet/XCellRangesQuery.hpp> +#include <com/sun/star/sheet/XSheetFilterableEx.hpp> +#include <com/sun/star/sheet/XSpreadsheet.hpp> +#include <com/sun/star/sheet/XSheetPageBreak.hpp> +#include <com/sun/star/sheet/XCellRangeMovement.hpp> +#include <com/sun/star/text/XText.hpp> +#include <com/sun/star/sheet/XPrintAreas.hpp> +#include <com/sun/star/sheet/XSheetLinkable.hpp> +#include <com/sun/star/sheet/XSubTotalCalculatable.hpp> +#include <com/sun/star/sheet/XArrayFormulaRange.hpp> +#include <com/sun/star/sheet/XCellRangeData.hpp> +#include <com/sun/star/sheet/XCellRangeFormula.hpp> +#include <com/sun/star/sheet/XCellSeries.hpp> +#include <com/sun/star/sheet/XMultipleOperation.hpp> +#include <com/sun/star/sheet/XCellAddressable.hpp> +#include <com/sun/star/util/XReplaceable.hpp> +#include <com/sun/star/util/XIndent.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/container/XNameContainer.hpp> +#include <com/sun/star/util/XMergeable.hpp> +#include <com/sun/star/table/XAutoFormattable.hpp> +#include <com/sun/star/util/XSortable.hpp> +#include <com/sun/star/util/XImportable.hpp> +#include <com/sun/star/table/XColumnRowRange.hpp> +#include <com/sun/star/table/TableBorder.hpp> +#include <com/sun/star/sheet/XDataPilotTablesSupplier.hpp> +#include <com/sun/star/sheet/XSheetAnnotationAnchor.hpp> +#include <com/sun/star/sheet/XScenariosSupplier.hpp> +#include <com/sun/star/sheet/XSheetAnnotationsSupplier.hpp> +#include <com/sun/star/sheet/XSheetAuditing.hpp> +#include <com/sun/star/sheet/XSheetOutline.hpp> +#include <com/sun/star/util/XProtectable.hpp> +#include <com/sun/star/sheet/XScenario.hpp> +#include <com/sun/star/beans/XPropertyState.hpp> +#include <com/sun/star/beans/XMultiPropertySet.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> +#include <com/sun/star/document/XActionLockable.hpp> + +#include <cppuhelper/implbase2.hxx> +#include <cppuhelper/implbase3.hxx> + +#include <tools/link.hxx> +#include <vector> +namespace binfilter { + +class ScDocShell; +class ScMarkData; +class SchMemChart; +class ScPrintRangeSaver; +class ScAttrRectIterator; +class ScCellRangeObj; +class SvxUnoText; +class ScLinkListener; +class ScPatternAttr; +class SvxBorderLine; +class SvxBoxItem; +class SvxBoxInfoItem; + + +typedef ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertyChangeListener >* XPropertyChangeListenerPtr; +SV_DECL_PTRARR_DEL( XPropertyChangeListenerArr_Impl, XPropertyChangeListenerPtr, 4, 4 ) + +class ScNamedEntry; +typedef ScNamedEntry* ScNamedEntryPtr; +SV_DECL_PTRARR_DEL( ScNamedEntryArr_Impl, ScNamedEntryPtr, 4, 4 ) + + +// ScCellRangesBase - Basisklasse fuer ScCellRangesObj (mit Index-Access) +// und ScCellRangeObj (ohne Index-Access) + +// XServiceInfo ist in den Ableitungen implementiert + +class ScHelperFunctions +{ +public: + static const SvxBorderLine* GetBorderLine( SvxBorderLine& rLine, const ::com::sun::star::table::BorderLine& rStruct ); + static void FillBoxItems( SvxBoxItem& rOuter, SvxBoxInfoItem& rInner, const ::com::sun::star::table::TableBorder& rBorder ); + static void FillBorderLine( ::com::sun::star::table::BorderLine& rStruct, const SvxBorderLine* pLine ); + static void FillTableBorder( ::com::sun::star::table::TableBorder& rBorder, + const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner ); + static void ApplyBorder( ScDocShell* pDocShell, const ScRangeList& rRanges, + const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner ); +}; + +class ScCellRangesBase : public ::com::sun::star::beans::XPropertySet, + public ::com::sun::star::beans::XMultiPropertySet, + public ::com::sun::star::beans::XPropertyState, + public ::com::sun::star::sheet::XSheetOperation, + public ::com::sun::star::chart::XChartDataArray, + public ::com::sun::star::util::XIndent, + public ::com::sun::star::sheet::XCellRangesQuery, + public ::com::sun::star::sheet::XFormulaQuery, + public ::com::sun::star::util::XReplaceable, + public ::com::sun::star::lang::XServiceInfo, + public ::com::sun::star::lang::XUnoTunnel, + public ::com::sun::star::lang::XTypeProvider, + public cppu::OWeakObject, + public SfxListener +{ + friend class ScTabViewObj; // fuer select() + friend class ScTableSheetObj; // fuer createCursorByRange() + +private: + SfxItemPropertySet aPropSet; + ScDocShell* pDocShell; + ScLinkListener* pValueListener; + ScPatternAttr* pCurrentFlat; + ScPatternAttr* pCurrentDeep; + SfxItemSet* pCurrentDataSet; + ScMarkData* pMarkData; + ScRangeList aRanges; + BOOL bChartColAsHdr; + BOOL bChartRowAsHdr; + BOOL bCursorOnly; + BOOL bValueChangePosted; + XPropertyChangeListenerArr_Impl aValueListeners; + + DECL_LINK( ValueListenerHdl, SfxHint* ); + DECL_LINK( ValueChanged, ::com::sun::star::beans::PropertyChangeEvent* ); + +private: + void PaintRanges_Impl( USHORT nPart ); + ScRangeListRef GetLimitedChartRanges_Impl( long nDataColumns, long nDataRows ) const; + void ForceChartListener_Impl(); + SchMemChart* CreateMemChart_Impl() const; + + const ScPatternAttr* GetCurrentAttrsFlat(); + const ScPatternAttr* GetCurrentAttrsDeep(); + SfxItemSet* GetCurrentDataSet(); + const ScMarkData* GetMarkData(); + void ForgetCurrentAttrs(); + + ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges> + QueryDifferences_Impl(const ::com::sun::star::table::CellAddress& aCompare, + BOOL bColumnDiff); + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> + Find_Impl(const ::com::sun::star::uno::Reference< + ::com::sun::star::util::XSearchDescriptor>& xDesc, + const ScAddress* pLastPos); + +protected: + // GetItemPropertyMap for derived classes must contain all entries, including base class + virtual const SfxItemPropertyMap* GetItemPropertyMap(); + virtual ::com::sun::star::beans::PropertyState GetOnePropertyState( + USHORT nItemWhich, const SfxItemPropertyMap* pMap ); + virtual void GetOnePropertyValue( const SfxItemPropertyMap* pMap, + ::com::sun::star::uno::Any& ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SetOnePropertyValue( const SfxItemPropertyMap* pMap, + const ::com::sun::star::uno::Any& aValue ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + +public: + ScCellRangesBase(ScDocShell* pDocSh, const ScRange& rR); + ScCellRangesBase(ScDocShell* pDocSh, const ScRangeList& rR); + virtual ~ScCellRangesBase(); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + const ::com::sun::star::uno::Type & rType ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + virtual void RefChanged(); + + // aus Ableitungen, aber auch per getImplementation + ScDocShell* GetDocShell() const { return pDocShell; } + ScDocument* GetDocument() const; + const ScRangeList& GetRangeList() const { return aRanges; } + void AddRange(const ScRange& rRange, const sal_Bool bMergeRanges); + + // per Service erzeugtes Objekt zum Leben erwecken: + void InitInsertRange(ScDocShell* pDocSh, const ScRange& rR); + + void SetNewRange(const ScRange& rNew); // fuer Cursor + void SetNewRanges(const ScRangeList& rNew); + + BOOL IsCursorOnly() const { return bCursorOnly; } + + // XSheetOperation + virtual double SAL_CALL computeFunction( ::com::sun::star::sheet::GeneralFunction nFunction ) + throw(::com::sun::star::uno::Exception, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL clearContents( sal_Int32 nContentFlags ) + throw(::com::sun::star::uno::RuntimeException); + + // XPropertySet + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo() + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, + const ::com::sun::star::uno::Any& aValue ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::beans::PropertyVetoException, + ::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( + const ::rtl::OUString& PropertyName ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertyChangeListener >& xListener ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertyChangeListener >& aListener ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XVetoableChangeListener >& aListener ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XVetoableChangeListener >& aListener ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XMultiPropertySet + virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, + const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ) + throw (::com::sun::star::beans::PropertyVetoException, + ::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL + getPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ) + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) + throw (::com::sun::star::uno::RuntimeException); + + // XPropertyState + virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( + const ::rtl::OUString& PropertyName ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL + getPropertyStates( const ::com::sun::star::uno::Sequence< + ::rtl::OUString >& aPropertyName ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPropertyToDefault( const ::rtl::OUString& PropertyName ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault( + const ::rtl::OUString& aPropertyName ) + throw(::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XIndent + virtual void SAL_CALL decrementIndent() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL incrementIndent() throw(::com::sun::star::uno::RuntimeException); + + // XChartData + virtual void SAL_CALL addChartDataChangeEventListener( + const ::com::sun::star::uno::Reference< + ::com::sun::star::chart::XChartDataChangeEventListener >& aListener ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeChartDataChangeEventListener( const ::com::sun::star::uno::Reference< + ::com::sun::star::chart::XChartDataChangeEventListener >& aListener ) + throw(::com::sun::star::uno::RuntimeException); + virtual double SAL_CALL getNotANumber() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL isNotANumber( double nNumber ) + throw(::com::sun::star::uno::RuntimeException); + + // XChartDataArray + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< double > > SAL_CALL + getData() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setData( const ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Sequence< double > >& aData ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getRowDescriptions() + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setRowDescriptions( const ::com::sun::star::uno::Sequence< + ::rtl::OUString >& aRowDescriptions ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getColumnDescriptions() + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setColumnDescriptions( const ::com::sun::star::uno::Sequence< + ::rtl::OUString >& aColumnDescriptions ) + throw(::com::sun::star::uno::RuntimeException); + + // XCellRangesQuery + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryVisibleCells() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryEmptyCells() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryContentCells( sal_Int16 nContentFlags ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryFormulaCells( sal_Int32 nResultFlags ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryColumnDifferences( + const ::com::sun::star::table::CellAddress& aCompare ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryRowDifferences( + const ::com::sun::star::table::CellAddress& aCompare ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryIntersection( + const ::com::sun::star::table::CellRangeAddress& aRange ) + throw(::com::sun::star::uno::RuntimeException); + + // XFormulaQuery + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryDependents( sal_Bool bRecursive ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL + queryPrecedents( sal_Bool bRecursive ) + throw(::com::sun::star::uno::RuntimeException); + + // XSearchable + virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XSearchDescriptor > SAL_CALL + createSearchDescriptor() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL + findAll( const ::com::sun::star::uno::Reference< + ::com::sun::star::util::XSearchDescriptor >& xDesc ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL + findFirst( const ::com::sun::star::uno::Reference< + ::com::sun::star::util::XSearchDescriptor >& xDesc ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL + findNext( const ::com::sun::star::uno::Reference< + ::com::sun::star::uno::XInterface >& xStartAt, + const ::com::sun::star::uno::Reference< + ::com::sun::star::util::XSearchDescriptor >& xDesc ) + throw(::com::sun::star::uno::RuntimeException); + + // XReplaceable + virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XReplaceDescriptor > SAL_CALL + createReplaceDescriptor() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL replaceAll( const ::com::sun::star::uno::Reference< + ::com::sun::star::util::XSearchDescriptor >& xDesc ) + throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); + + // XUnoTunnel + virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< + sal_Int8 >& aIdentifier ) + throw(::com::sun::star::uno::RuntimeException); + + static const ::com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId(); + static ScCellRangesBase* getImplementation( const ::com::sun::star::uno::Reference< + ::com::sun::star::uno::XInterface> xObj ); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw(::com::sun::star::uno::RuntimeException); +}; + + +class ScCellRangesObj : public ScCellRangesBase, + public ::com::sun::star::sheet::XSheetCellRangeContainer, + public ::com::sun::star::container::XNameContainer, + public ::com::sun::star::container::XEnumerationAccess +{ +private: + ScNamedEntryArr_Impl aNamedEntries; + + ScCellRangeObj* GetObjectByIndex_Impl(USHORT nIndex) const; + +public: + ScCellRangesObj(ScDocShell* pDocSh, const ScRangeList& rR); + virtual ~ScCellRangesObj(); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + const ::com::sun::star::uno::Type & rType ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + virtual void RefChanged(); + + // XSheetCellRanges + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess > SAL_CALL + getCells() throw(::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getRangeAddressesAsString() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::table::CellRangeAddress > SAL_CALL + getRangeAddresses() throw(::com::sun::star::uno::RuntimeException); + + // XSheetCellRangeContainer + virtual void SAL_CALL addRangeAddress( const ::com::sun::star::table::CellRangeAddress& rRange, + sal_Bool bMergeRanges ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeRangeAddress( const ::com::sun::star::table::CellRangeAddress& rRange ) + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addRangeAddresses( const ::com::sun::star::uno::Sequence< + ::com::sun::star::table::CellRangeAddress >& rRanges, + sal_Bool bMergeRanges ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeRangeAddresses( const ::com::sun::star::uno::Sequence< + ::com::sun::star::table::CellRangeAddress >& rRanges ) + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::uno::RuntimeException); + + // XNameContainer + virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, + const ::com::sun::star::uno::Any& aElement ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::container::ElementExistException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeByName( const ::rtl::OUString& Name ) + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XNameReplace + virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, + const ::com::sun::star::uno::Any& aElement ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::container::NoSuchElementException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XNameAccess + virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) + throw(::com::sun::star::uno::RuntimeException); + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XEnumerationAccess + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL + createEnumeration() throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw(::com::sun::star::uno::RuntimeException); +}; + + +class ScCellRangeObj : public ScCellRangesBase, + public ::com::sun::star::sheet::XCellRangeAddressable, + public ::com::sun::star::sheet::XSheetCellRange, + public ::com::sun::star::sheet::XArrayFormulaRange, + public ::com::sun::star::sheet::XCellRangeData, + public ::com::sun::star::sheet::XCellRangeFormula, + public ::com::sun::star::sheet::XMultipleOperation, + public ::com::sun::star::util::XMergeable, + public ::com::sun::star::sheet::XCellSeries, + public ::com::sun::star::table::XAutoFormattable, + public ::com::sun::star::util::XSortable, + public ::com::sun::star::sheet::XSheetFilterableEx, + public ::com::sun::star::sheet::XSubTotalCalculatable, + public ::com::sun::star::util::XImportable, + public ::com::sun::star::sheet::XCellFormatRangesSupplier, + public ::com::sun::star::sheet::XUniqueCellFormatRangesSupplier, + public ::com::sun::star::table::XColumnRowRange +{ +private: + SfxItemPropertySet aRangePropSet; + ScRange aRange; + +protected: + const ScRange& GetRange() const { return aRange; } + virtual const SfxItemPropertyMap* GetItemPropertyMap(); + virtual void GetOnePropertyValue( const SfxItemPropertyMap* pMap, + ::com::sun::star::uno::Any& ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SetOnePropertyValue( const SfxItemPropertyMap* pMap, + const ::com::sun::star::uno::Any& aValue ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + + ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > + GetCellByPosition_Impl( sal_Int32 nColumn, sal_Int32 nRow ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + + +public: + ScCellRangeObj(ScDocShell* pDocSh, const ScRange& rR); + virtual ~ScCellRangeObj(); + + // uses ObjectShell from document, if set (returns NULL otherwise) + static ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange> + CreateRangeFromDoc( ScDocument* pDoc, const ScRange& rR ); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + const ::com::sun::star::uno::Type & rType ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + virtual void RefChanged(); + + // XCellRange ist Basisklasse von XSheetCellRange und XSheetOperation +// operator XCellRangeRef() const { return (XSheetCellRange*)this; } + + // XCellRangeAddressable + virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getRangeAddress() + throw(::com::sun::star::uno::RuntimeException); + + // XSheetCellRange + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet > SAL_CALL + getSpreadsheet() throw(::com::sun::star::uno::RuntimeException); + + // XArrayFormulaRange + virtual ::rtl::OUString SAL_CALL getArrayFormula() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setArrayFormula( const ::rtl::OUString& aFormula ) + throw(::com::sun::star::uno::RuntimeException); + + // XCellRangeData + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Any > > SAL_CALL getDataArray() + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setDataArray( const ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Any > >& aArray ) + throw(::com::sun::star::uno::RuntimeException); + + // XCellRangeFormula + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< + ::rtl::OUString > > SAL_CALL getFormulaArray() + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setFormulaArray( const ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Sequence< ::rtl::OUString > >& aArray ) + throw (::com::sun::star::uno::RuntimeException); + + // XMultipleOperation + virtual void SAL_CALL setTableOperation( + const ::com::sun::star::table::CellRangeAddress& aFormulaRange, + ::com::sun::star::sheet::TableOperationMode nMode, + const ::com::sun::star::table::CellAddress& aColumnCell, + const ::com::sun::star::table::CellAddress& aRowCell ) + throw(::com::sun::star::uno::RuntimeException); + + // XMergeable + virtual void SAL_CALL merge( sal_Bool bMerge ) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL getIsMerged() throw(::com::sun::star::uno::RuntimeException); + + // XCellSeries + virtual void SAL_CALL fillSeries( ::com::sun::star::sheet::FillDirection nFillDirection, + ::com::sun::star::sheet::FillMode nFillMode, + ::com::sun::star::sheet::FillDateMode nFillDateMode, + double fStep, double fEndValue ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL fillAuto( ::com::sun::star::sheet::FillDirection nFillDirection, + sal_Int32 nSourceCount ) + throw(::com::sun::star::uno::RuntimeException); + + // XAutoFormattable + virtual void SAL_CALL autoFormat( const ::rtl::OUString& aName ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + + // XSortable + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL + createSortDescriptor() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL sort( const ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue >& xDescriptor ) + throw(::com::sun::star::uno::RuntimeException); + + // XSheetFilterableEx + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetFilterDescriptor > SAL_CALL + createFilterDescriptorByObject( const ::com::sun::star::uno::Reference< + ::com::sun::star::sheet::XSheetFilterable >& xObject ) + throw(::com::sun::star::uno::RuntimeException); + + // XSheetFilterable + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetFilterDescriptor > SAL_CALL + createFilterDescriptor( sal_Bool bEmpty ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL filter( const ::com::sun::star::uno::Reference< + ::com::sun::star::sheet::XSheetFilterDescriptor >& xDescriptor ) + throw(::com::sun::star::uno::RuntimeException); + + // XSubTotalCalculatable + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSubTotalDescriptor > SAL_CALL + createSubTotalDescriptor( sal_Bool bEmpty ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL applySubTotals( const ::com::sun::star::uno::Reference< + ::com::sun::star::sheet::XSubTotalDescriptor >& xDescriptor, + sal_Bool bReplace ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeSubTotals() throw(::com::sun::star::uno::RuntimeException); + + // XImportable + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL + createImportDescriptor( sal_Bool bEmpty ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL doImport( const ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw(::com::sun::star::uno::RuntimeException); + + // XCellFormatRangesSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL + getCellFormatRanges() throw(::com::sun::star::uno::RuntimeException); + + // XUniqueCellFormatRangesSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL + getUniqueCellFormatRanges() throw(::com::sun::star::uno::RuntimeException); + + // XColumnRowRange + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableColumns > SAL_CALL + getColumns() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableRows > SAL_CALL + getRows() throw(::com::sun::star::uno::RuntimeException); + + // XCellRange + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > SAL_CALL + getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL + getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, + sal_Int32 nRight, sal_Int32 nBottom ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL + getCellRangeByName( const ::rtl::OUString& aRange ) + throw(::com::sun::star::uno::RuntimeException); + + // XPropertySet ueberladen wegen Range-Properties + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo() + throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw(::com::sun::star::uno::RuntimeException); +}; + + +//! really derive cell from range? + +class ScCellObj : public ScCellRangeObj, + public ::com::sun::star::text::XText, + public ::com::sun::star::container::XEnumerationAccess, + public ::com::sun::star::table::XCell, + public ::com::sun::star::sheet::XCellAddressable, + public ::com::sun::star::sheet::XSheetAnnotationAnchor, + public ::com::sun::star::text::XTextFieldsSupplier, + public ::com::sun::star::document::XActionLockable +{ +private: + SvxUnoText* pUnoText; + SfxItemPropertySet aCellPropSet; + ScAddress aCellPos; + sal_Int16 nActionLockCount; + +private: + String GetInputString_Impl(BOOL bEnglish) const; + String GetOutputString_Impl() const; + void SetString_Impl(const String& rString, BOOL bInterpret, BOOL bEnglish); + double GetValue_Impl() const; + void SetValue_Impl(double fValue); + ::com::sun::star::table::CellContentType GetResultType_Impl(); + +protected: + virtual const SfxItemPropertyMap* GetItemPropertyMap(); + virtual void GetOnePropertyValue( const SfxItemPropertyMap* pMap, + ::com::sun::star::uno::Any& ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SetOnePropertyValue( const SfxItemPropertyMap* pMap, + const ::com::sun::star::uno::Any& aValue ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + +public: + static const SfxItemPropertyMap* GetEditPropertyMap(); + + ScCellObj(ScDocShell* pDocSh, const ScAddress& rP); + virtual ~ScCellObj(); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + const ::com::sun::star::uno::Type & rType ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + virtual void RefChanged(); + + SvxUnoText& GetUnoText(); + + // XML import needs to set results at formula cells, + // not meant for any other purpose. + void SetFormulaResultString( const ::rtl::OUString& rResult ); + void SetFormulaResultDouble( double fResult ); + const ScAddress& GetPosition() const { return aCellPos; } + + // XText + virtual void SAL_CALL insertTextContent( const ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange >& xRange, + const ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextContent >& xContent, + sal_Bool bAbsorb ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeTextContent( const ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextContent >& xContent ) + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::uno::RuntimeException); + + // XSimpleText + virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextCursor > SAL_CALL + createTextCursor() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextCursor > SAL_CALL + createTextCursorByRange( const ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange >& aTextPosition ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL insertString( const ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange >& xRange, + const ::rtl::OUString& aString, sal_Bool bAbsorb ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL insertControlCharacter( const ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange >& xRange, + sal_Int16 nControlCharacter, sal_Bool bAbsorb ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + + // XTextRange + virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > SAL_CALL + getText() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL + getStart() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL + getEnd() throw(::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getString() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setString( const ::rtl::OUString& aString ) + throw(::com::sun::star::uno::RuntimeException); + + // XEnumerationAccess + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL + createEnumeration() throw(::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XCell + virtual ::rtl::OUString SAL_CALL getFormula() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setFormula( const ::rtl::OUString& aFormula ) + throw(::com::sun::star::uno::RuntimeException); + virtual double SAL_CALL getValue() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( double nValue ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::table::CellContentType SAL_CALL getType() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getError() throw(::com::sun::star::uno::RuntimeException); + + // XCellAddressable + virtual ::com::sun::star::table::CellAddress SAL_CALL getCellAddress() + throw(::com::sun::star::uno::RuntimeException); + + // XSheetAnnotationAnchor + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetAnnotation > SAL_CALL + getAnnotation() throw(::com::sun::star::uno::RuntimeException); + + // XTextFieldsSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess > SAL_CALL + getTextFields() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL + getTextFieldMasters() throw(::com::sun::star::uno::RuntimeException); + + // XPropertySet ueberladen wegen Zell-Properties + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo() + throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw(::com::sun::star::uno::RuntimeException); + + // XActionLockable + virtual sal_Bool SAL_CALL isActionLocked() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addActionLock() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeActionLock() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setActionLocks( sal_Int16 nLock ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Int16 SAL_CALL resetActionLocks() throw(::com::sun::star::uno::RuntimeException); + +}; + + +class ScTableSheetObj : public ScCellRangeObj, + public ::com::sun::star::sheet::XSpreadsheet, + public ::com::sun::star::container::XNamed, + public ::com::sun::star::sheet::XSheetPageBreak, + public ::com::sun::star::sheet::XCellRangeMovement, + public ::com::sun::star::table::XTableChartsSupplier, + public ::com::sun::star::sheet::XDataPilotTablesSupplier, + public ::com::sun::star::sheet::XScenariosSupplier, + public ::com::sun::star::sheet::XSheetAnnotationsSupplier, + public ::com::sun::star::drawing::XDrawPageSupplier, + public ::com::sun::star::sheet::XPrintAreas, + public ::com::sun::star::sheet::XSheetLinkable, + public ::com::sun::star::sheet::XSheetAuditing, + public ::com::sun::star::sheet::XSheetOutline, + public ::com::sun::star::util::XProtectable, + public ::com::sun::star::sheet::XScenario +{ + friend class ScTableSheetsObj; // fuer insertByName() + +private: + SfxItemPropertySet aSheetPropSet; + + USHORT GetTab_Impl() const; + void PrintAreaUndo_Impl( ScPrintRangeSaver* pOldRanges ); + +protected: + virtual const SfxItemPropertyMap* GetItemPropertyMap(); + virtual void GetOnePropertyValue( const SfxItemPropertyMap* pMap, + ::com::sun::star::uno::Any& ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SetOnePropertyValue( const SfxItemPropertyMap* pMap, + const ::com::sun::star::uno::Any& aValue ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + +public: + ScTableSheetObj(ScDocShell* pDocSh, USHORT nTab); + virtual ~ScTableSheetObj(); + + void InitInsertSheet(ScDocShell* pDocSh, USHORT nTab); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + const ::com::sun::star::uno::Type & rType ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XSpreadsheet + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellCursor > + SAL_CALL createCursor() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellCursor > SAL_CALL + createCursorByRange( const ::com::sun::star::uno::Reference< + ::com::sun::star::sheet::XSheetCellRange >& aRange ) + throw(::com::sun::star::uno::RuntimeException); + + // XSheetCellRange + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet > SAL_CALL + getSpreadsheet() throw(::com::sun::star::uno::RuntimeException); + + // XCellRange + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > SAL_CALL + getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL + getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, + sal_Int32 nRight, sal_Int32 nBottom ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL + getCellRangeByName( const ::rtl::OUString& aRange ) + throw(::com::sun::star::uno::RuntimeException); + + // XNamed + virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setName( const ::rtl::OUString& aName ) + throw(::com::sun::star::uno::RuntimeException); + + // XSheetPageBreak + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::TablePageBreakData > SAL_CALL + getColumnPageBreaks() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::TablePageBreakData > SAL_CALL + getRowPageBreaks() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeAllManualPageBreaks() throw(::com::sun::star::uno::RuntimeException); + + // XCellRangeMovement + virtual void SAL_CALL insertCells( const ::com::sun::star::table::CellRangeAddress& aRange, + ::com::sun::star::sheet::CellInsertMode nMode ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeRange( const ::com::sun::star::table::CellRangeAddress& aRange, + ::com::sun::star::sheet::CellDeleteMode nMode ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL moveRange( const ::com::sun::star::table::CellAddress& aDestination, + const ::com::sun::star::table::CellRangeAddress& aSource ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL copyRange( const ::com::sun::star::table::CellAddress& aDestination, + const ::com::sun::star::table::CellRangeAddress& aSource ) + throw(::com::sun::star::uno::RuntimeException); + + // XTableChartsSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableCharts > SAL_CALL + getCharts() throw(::com::sun::star::uno::RuntimeException); + + // XDataPilotTablesSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotTables > SAL_CALL + getDataPilotTables() throw(::com::sun::star::uno::RuntimeException); + + // XScenariosSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XScenarios > SAL_CALL + getScenarios() throw(::com::sun::star::uno::RuntimeException); + + // XSheetAnnotationsSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetAnnotations > SAL_CALL + getAnnotations() throw(::com::sun::star::uno::RuntimeException); + + // XDrawPageSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > SAL_CALL + getDrawPage() throw(::com::sun::star::uno::RuntimeException); + + // XPrintAreas + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::table::CellRangeAddress > SAL_CALL + getPrintAreas() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPrintAreas( const ::com::sun::star::uno::Sequence< + ::com::sun::star::table::CellRangeAddress >& aPrintAreas ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL getPrintTitleColumns() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPrintTitleColumns( sal_Bool bPrintTitleColumns ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getTitleColumns() + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setTitleColumns( + const ::com::sun::star::table::CellRangeAddress& aTitleColumns ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL getPrintTitleRows() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPrintTitleRows( sal_Bool bPrintTitleRows ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getTitleRows() + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setTitleRows( + const ::com::sun::star::table::CellRangeAddress& aTitleRows ) + throw(::com::sun::star::uno::RuntimeException); + + // XSheetLinkable + virtual ::com::sun::star::sheet::SheetLinkMode SAL_CALL getLinkMode() + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setLinkMode( ::com::sun::star::sheet::SheetLinkMode nLinkMode ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getLinkUrl() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setLinkUrl( const ::rtl::OUString& aLinkUrl ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getLinkSheetName() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setLinkSheetName( const ::rtl::OUString& aLinkSheetName ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL link( const ::rtl::OUString& aUrl, + const ::rtl::OUString& aSheetName, + const ::rtl::OUString& aFilterName, + const ::rtl::OUString& aFilterOptions, + ::com::sun::star::sheet::SheetLinkMode nMode ) + throw(::com::sun::star::uno::RuntimeException); + + // XSheetAuditing + virtual sal_Bool SAL_CALL hideDependents( const ::com::sun::star::table::CellAddress& aPosition ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hidePrecedents( const ::com::sun::star::table::CellAddress& aPosition ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL showDependents( const ::com::sun::star::table::CellAddress& aPosition ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL showPrecedents( const ::com::sun::star::table::CellAddress& aPosition ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL showErrors( const ::com::sun::star::table::CellAddress& aPosition ) + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL showInvalid() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL clearArrows() throw(::com::sun::star::uno::RuntimeException); + + // XSheetOutline + virtual void SAL_CALL group( const ::com::sun::star::table::CellRangeAddress& aRange, + ::com::sun::star::table::TableOrientation nOrientation ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL ungroup( const ::com::sun::star::table::CellRangeAddress& aRange, + ::com::sun::star::table::TableOrientation nOrientation ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL autoOutline( const ::com::sun::star::table::CellRangeAddress& aRange ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL clearOutline() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL hideDetail( const ::com::sun::star::table::CellRangeAddress& aRange ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL showDetail( const ::com::sun::star::table::CellRangeAddress& aRange ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL showLevel( sal_Int16 nLevel, + ::com::sun::star::table::TableOrientation nOrientation ) + throw(::com::sun::star::uno::RuntimeException); + + // XProtectable + virtual void SAL_CALL protect( const ::rtl::OUString& aPassword ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL unprotect( const ::rtl::OUString& aPassword ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL isProtected() throw(::com::sun::star::uno::RuntimeException); + + // XScenario + virtual sal_Bool SAL_CALL getIsScenario() throw(::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getScenarioComment() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setScenarioComment( const ::rtl::OUString& aScenarioComment ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addRanges( const ::com::sun::star::uno::Sequence< + ::com::sun::star::table::CellRangeAddress >& aRanges ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL apply() throw(::com::sun::star::uno::RuntimeException); + + // XPropertySet ueberladen wegen Sheet-Properties + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo() + throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); + + // XUnoTunnel + virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< + sal_Int8 >& aIdentifier ) + throw(::com::sun::star::uno::RuntimeException); + + static const ::com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId(); + static ScTableSheetObj* getImplementation( const ::com::sun::star::uno::Reference< + ::com::sun::star::uno::XInterface> xObj ); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw(::com::sun::star::uno::RuntimeException); +}; + + +class ScTableColumnObj : public ScCellRangeObj, + public ::com::sun::star::container::XNamed +{ +private: + SfxItemPropertySet aColPropSet; + +protected: + virtual const SfxItemPropertyMap* GetItemPropertyMap(); + virtual void GetOnePropertyValue( const SfxItemPropertyMap* pMap, + ::com::sun::star::uno::Any& ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SetOnePropertyValue( const SfxItemPropertyMap* pMap, + const ::com::sun::star::uno::Any& aValue ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + +public: + ScTableColumnObj(ScDocShell* pDocSh, USHORT nCol, USHORT nTab); + virtual ~ScTableColumnObj(); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + const ::com::sun::star::uno::Type & rType ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XNamed + virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setName( const ::rtl::OUString& aName ) + throw(::com::sun::star::uno::RuntimeException); + + // XPropertySet ueberladen wegen Spalten-Properties + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo() + throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw(::com::sun::star::uno::RuntimeException); +}; + + +class ScTableRowObj : public ScCellRangeObj +{ +private: + SfxItemPropertySet aRowPropSet; + +protected: + virtual const SfxItemPropertyMap* GetItemPropertyMap(); + virtual void GetOnePropertyValue( const SfxItemPropertyMap* pMap, + ::com::sun::star::uno::Any& ) + throw(::com::sun::star::uno::RuntimeException); + virtual void SetOnePropertyValue( const SfxItemPropertyMap* pMap, + const ::com::sun::star::uno::Any& aValue ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + +public: + ScTableRowObj(ScDocShell* pDocSh, USHORT nRow, USHORT nTab); + virtual ~ScTableRowObj(); + + // XPropertySet ueberladen wegen Zeilen-Properties + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo() + throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); +}; + + +class ScCellsObj : public cppu::WeakImplHelper2< + ::com::sun::star::container::XEnumerationAccess, + ::com::sun::star::lang::XServiceInfo >, + public SfxListener +{ +private: + ScDocShell* pDocShell; + ScRangeList aRanges; + +public: + ScCellsObj(ScDocShell* pDocSh, const ScRangeList& rR); + virtual ~ScCellsObj(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + // XEnumerationAccess + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL + createEnumeration() throw(::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); +}; + + +class ScCellsEnumeration : public cppu::WeakImplHelper2< + ::com::sun::star::container::XEnumeration, + ::com::sun::star::lang::XServiceInfo >, + public SfxListener +{ +private: + ScDocShell* pDocShell; + ScRangeList aRanges; + ScAddress aPos; + ScMarkData* pMark; + BOOL bAtEnd; + +private: + void Advance_Impl(); + void CheckPos_Impl(); + +public: + ScCellsEnumeration(ScDocShell* pDocSh, const ScRangeList& rR); + virtual ~ScCellsEnumeration(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + // XEnumeration + virtual sal_Bool SAL_CALL hasMoreElements() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL nextElement() + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); +}; + +class ScCellFormatsObj : public cppu::WeakImplHelper3< + ::com::sun::star::container::XIndexAccess, + ::com::sun::star::container::XEnumerationAccess, + ::com::sun::star::lang::XServiceInfo >, + public SfxListener +{ +private: + ScDocShell* pDocShell; + ScRange aTotalRange; + +private: + ScCellRangeObj* GetObjectByIndex_Impl(long nIndex) const; + +public: + ScCellFormatsObj(ScDocShell* pDocSh, const ScRange& rR); + virtual ~ScCellFormatsObj(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XEnumerationAccess + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL + createEnumeration() throw(::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); +}; + + +class ScCellFormatsEnumeration : public cppu::WeakImplHelper2< + ::com::sun::star::container::XEnumeration, + ::com::sun::star::lang::XServiceInfo >, + public SfxListener +{ +private: + ScDocShell* pDocShell; + USHORT nTab; + ScAttrRectIterator* pIter; + ScRange aNext; + BOOL bAtEnd; + BOOL bDirty; + +private: + void Advance_Impl(); + ScCellRangeObj* NextObject_Impl(); + +public: + ScCellFormatsEnumeration(ScDocShell* pDocSh, const ScRange& rR); + virtual ~ScCellFormatsEnumeration(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + // XEnumeration + virtual sal_Bool SAL_CALL hasMoreElements() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL nextElement() + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); +}; + +typedef ::std::vector< ScRangeList > ScMyRangeLists; + +class ScUniqueCellFormatsObj : public cppu::WeakImplHelper3< + ::com::sun::star::container::XIndexAccess, + ::com::sun::star::container::XEnumerationAccess, + ::com::sun::star::lang::XServiceInfo >, + public SfxListener +{ +private: + ScDocShell* pDocShell; + ScRange aTotalRange; + ScMyRangeLists aRangeLists; + +private: + void GetObjects_Impl(); + +public: + ScUniqueCellFormatsObj(ScDocShell* pDocSh, const ScRange& rR); + virtual ~ScUniqueCellFormatsObj(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XEnumerationAccess + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL + createEnumeration() throw(::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); +}; + +class ScUniqueCellFormatsEnumeration : public cppu::WeakImplHelper2< + ::com::sun::star::container::XEnumeration, + ::com::sun::star::lang::XServiceInfo >, + public SfxListener +{ +private: + ScMyRangeLists aRangeLists; + ScDocShell* pDocShell; + sal_Int32 nCurrentPosition; + +public: + ScUniqueCellFormatsEnumeration(ScDocShell* pDocShell, const ScMyRangeLists& rRangeLists); + virtual ~ScUniqueCellFormatsEnumeration(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + // XEnumeration + virtual sal_Bool SAL_CALL hasMoreElements() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL nextElement() + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() + throw(::com::sun::star::uno::RuntimeException); +}; + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |