/************************************************************************* * * 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef SC_DAPIUNO_HXX #define SC_DAPIUNO_HXX #include "global.hxx" #include "dpobject.hxx" #include "rangeutl.hxx" // ScArea #include "cellsuno.hxx" // for XModifyListenerArr_Impl #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace com { namespace sun { namespace star { namespace sheet { struct DataPilotFieldFilter; struct DataPilotTablePositionData; }}}} class ScDocShell; class ScDPSaveDimension; class ScDPSaveGroupDimension; class ScDPSaveNumGroupDimension; struct ScDPNumGroupInfo; class ScDataPilotTableObj; class ScDataPilotFieldObj; class ScDataPilotItemObj; class ScDataPilotConversion { public: static com::sun::star::sheet::GeneralFunction FirstFunc( sal_uInt16 nBits ); static sal_uInt16 FunctionBit( com::sun::star::sheet::GeneralFunction eFunc ); static void FillGroupInfo( ::com::sun::star::sheet::DataPilotFieldGroupInfo& rInfo, const ScDPNumGroupInfo& rGroupInfo ); }; // ============================================================================ /** DataPilotTables collection per sheet. */ class ScDataPilotTablesObj : public cppu::WeakImplHelper4< com::sun::star::sheet::XDataPilotTables, com::sun::star::container::XEnumerationAccess, com::sun::star::container::XIndexAccess, com::sun::star::lang::XServiceInfo>, public SfxListener { private: ScDocShell* pDocShell; SCTAB nTab; ScDataPilotTableObj* GetObjectByIndex_Impl( sal_Int32 nIndex ); ScDataPilotTableObj* GetObjectByName_Impl(const ::rtl::OUString& aName); public: ScDataPilotTablesObj(ScDocShell* pDocSh, SCTAB nT); virtual ~ScDataPilotTablesObj(); virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); // XDataPilotTables virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotDescriptor > SAL_CALL createDataPilotDescriptor() throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL insertNewByName( const ::rtl::OUString& aName, const ::com::sun::star::table::CellAddress& aOutputAddress, const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotDescriptor >& xDescriptor ) throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeByName( const ::rtl::OUString& aName ) throw(::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); // 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); }; // ============================================================================ // ScDataPilotDescriptorBase is never instantiated directly class ScDataPilotDescriptorBase : public com::sun::star::sheet::XDataPilotDescriptor, public com::sun::star::beans::XPropertySet, public com::sun::star::sheet::XDataPilotDataLayoutFieldSupplier, public com::sun::star::lang::XServiceInfo, public com::sun::star::lang::XUnoTunnel, public com::sun::star::lang::XTypeProvider, public cppu::OWeakObject, public SfxListener { private: SfxItemPropertySet maPropSet; ScDocShell* pDocShell; public: ScDataPilotDescriptorBase(ScDocShell* pDocSh); virtual ~ScDataPilotDescriptorBase(); 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 ); ScDocShell* GetDocShell() const { return pDocShell; } // in den Ableitungen: virtual ScDPObject* GetDPObject() const = 0; virtual void SetDPObject(ScDPObject* pDPObj) = 0; // XDataPilotDescriptor // getName, setName, getTag, setTag in derived classes virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getSourceRange() throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setSourceRange( const ::com::sun::star::table::CellRangeAddress& aSourceRange ) throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetFilterDescriptor > SAL_CALL getFilterDescriptor() throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL getDataPilotFields() throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL getColumnFields() throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL getRowFields() throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL getPageFields() throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL getDataFields() throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL getHiddenFields() 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); // XDataPilotDataLayoutFieldSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotField > SAL_CALL getDataLayoutField() 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& getUnoTunnelId(); static ScDataPilotDescriptorBase* getImplementation( const com::sun::star::uno::Reference< com::sun::star::sheet::XDataPilotDescriptor> xObj ); // XTypeProvider (overloaded in ScDataPilotTableObj) 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); // XServiceInfo is in derived classes }; // ============================================================================ class ScDataPilotDescriptor : public ScDataPilotDescriptorBase { private: ScDPObject* mpDPObject; public: ScDataPilotDescriptor(ScDocShell* pDocSh); virtual ~ScDataPilotDescriptor(); virtual ScDPObject* GetDPObject() const; virtual void SetDPObject(ScDPObject* pDPObj); // rest of XDataPilotDescriptor (incl. 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); virtual ::rtl::OUString SAL_CALL getTag() throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setTag( const ::rtl::OUString& aTag ) 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 ScDataPilotTableObj : public ScDataPilotDescriptorBase, public com::sun::star::sheet::XDataPilotTable2, public com::sun::star::util::XModifyBroadcaster { private: SCTAB nTab; String aName; XModifyListenerArr_Impl aModifyListeners; void Refreshed_Impl(); public: ScDataPilotTableObj(ScDocShell* pDocSh, SCTAB nT, const String& rN); virtual ~ScDataPilotTableObj(); 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 ScDPObject* GetDPObject() const; virtual void SetDPObject(ScDPObject* pDPObj); // rest of XDataPilotDescriptor (incl. 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); virtual ::rtl::OUString SAL_CALL getTag() throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setTag( const ::rtl::OUString& aTag ) throw(::com::sun::star::uno::RuntimeException); // XDataPilotTable virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getOutputRange() throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL refresh() throw(::com::sun::star::uno::RuntimeException); // XDataPilotTable2 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > > SAL_CALL getDrillDownData(const ::com::sun::star::table::CellAddress& aAddr) throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::sheet::DataPilotTablePositionData SAL_CALL getPositionData(const ::com::sun::star::table::CellAddress& aAddr) throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL insertDrillDownSheet(const ::com::sun::star::table::CellAddress& aAddr) throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getOutputRangeByType( sal_Int32 nType ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); // XModifyBroadcaster virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); // XTypeProvider (overloaded) 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); // 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); }; // ============================================================================ struct ScFieldIdentifier { ::rtl::OUString maFieldName; /// Source field name. sal_Int32 mnFieldIdx; /// Field index (if several fields with same name exist). bool mbDataLayout; /// True = data layout field collecting all data fields as items. inline explicit ScFieldIdentifier() : mnFieldIdx( 0 ), mbDataLayout( false ) {} inline explicit ScFieldIdentifier( const ::rtl::OUString& rFieldName, sal_Int32 nFieldIdx, bool bDataLayout ) : maFieldName( rFieldName ), mnFieldIdx( nFieldIdx ), mbDataLayout( bDataLayout ) {} }; // ============================================================================ /** Base class of all implementation objects based on a DataPilot descriptor or DataPilot table object. Wraps acquiring and releasing the parent. */ class ScDataPilotChildObjBase { protected: explicit ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent ); explicit ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId ); virtual ~ScDataPilotChildObjBase(); /** Returns the wrapped DataPilot object (calls GetDPObject() at parent). */ ScDPObject* GetDPObject() const; /** Sets the passed DataPilot object (calls SetDPObject() at parent). */ void SetDPObject( ScDPObject* pDPObject ); /** Returns the DataPilot dimension object related to the field described by maFieldId. */ ScDPSaveDimension* GetDPDimension( ScDPObject** ppDPObject = 0 ) const; /** Returns the number of members for the field described by maFieldId. */ sal_Int32 GetMemberCount() const; /** Returns the collection of members for the field described by maFieldId. */ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > GetMembers() const; protected: ScDataPilotDescriptorBase& mrParent; ScFieldIdentifier maFieldId; private: ScDataPilotChildObjBase& operator=( const ScDataPilotChildObjBase& ); }; // ============================================================================ typedef ::cppu::WeakImplHelper4 < ::com::sun::star::container::XEnumerationAccess, ::com::sun::star::container::XIndexAccess, ::com::sun::star::container::XNameAccess, ::com::sun::star::lang::XServiceInfo > ScDataPilotFieldsObjImpl; /** Collection of all DataPilot fields, or of all fields from a specific dimension. */ class ScDataPilotFieldsObj : public ScDataPilotChildObjBase, public ScDataPilotFieldsObjImpl { public: explicit ScDataPilotFieldsObj( ScDataPilotDescriptorBase& rParent ); explicit ScDataPilotFieldsObj( ScDataPilotDescriptorBase& rParent, ::com::sun::star::sheet::DataPilotFieldOrientation eOrient ); virtual ~ScDataPilotFieldsObj(); // 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); // 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); private: ScDataPilotFieldObj* GetObjectByIndex_Impl( sal_Int32 nIndex ) const; ScDataPilotFieldObj* GetObjectByName_Impl( const ::rtl::OUString& rName ) const; private: ::com::sun::star::uno::Any maOrient; /// Field orientation, no value = all fields. }; // ============================================================================ typedef ::cppu::WeakImplHelper5 < ::com::sun::star::container::XNamed, ::com::sun::star::beans::XPropertySet, ::com::sun::star::sheet::XDataPilotField, ::com::sun::star::sheet::XDataPilotFieldGrouping, ::com::sun::star::lang::XServiceInfo > ScDataPilotFieldObjImpl; /** Implementation of a single DataPilot field. */ class ScDataPilotFieldObj : public ScDataPilotChildObjBase, public ScDataPilotFieldObjImpl { public: ScDataPilotFieldObj( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rIdent ); ScDataPilotFieldObj( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rIdent, const ::com::sun::star::uno::Any& rOrient ); virtual ~ScDataPilotFieldObj(); // 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 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); // XDatePilotField virtual com::sun::star::uno::Reference SAL_CALL getItems() throw (::com::sun::star::uno::RuntimeException); // nur noch aus Property-Funktionen gerufen: com::sun::star::sheet::DataPilotFieldOrientation getOrientation(void) const; void setOrientation(com::sun::star::sheet::DataPilotFieldOrientation Orientation); com::sun::star::sheet::GeneralFunction getFunction(void) const; void setFunction(com::sun::star::sheet::GeneralFunction Function); com::sun::star::uno::Sequence< com::sun::star::sheet::GeneralFunction > getSubtotals() const; void setSubtotals(const com::sun::star::uno::Sequence< com::sun::star::sheet::GeneralFunction >& rFunctions); rtl::OUString getCurrentPage() const; void setCurrentPage(const rtl::OUString& sPage); sal_Bool getUseCurrentPage() const; void setUseCurrentPage(sal_Bool bUse); const com::sun::star::sheet::DataPilotFieldAutoShowInfo* getAutoShowInfo(); void setAutoShowInfo(const com::sun::star::sheet::DataPilotFieldAutoShowInfo* pInfo); const com::sun::star::sheet::DataPilotFieldLayoutInfo* getLayoutInfo(); void setLayoutInfo(const com::sun::star::sheet::DataPilotFieldLayoutInfo* pInfo); const com::sun::star::sheet::DataPilotFieldReference* getReference(); void setReference(const com::sun::star::sheet::DataPilotFieldReference* pInfo); const com::sun::star::sheet::DataPilotFieldSortInfo* getSortInfo(); void setSortInfo(const com::sun::star::sheet::DataPilotFieldSortInfo* pInfo); sal_Bool getShowEmpty() const; void setShowEmpty(sal_Bool bShow); sal_Bool hasGroupInfo(); com::sun::star::sheet::DataPilotFieldGroupInfo getGroupInfo(); void setGroupInfo(const com::sun::star::sheet::DataPilotFieldGroupInfo* pInfo); // XDataPilotFieldGrouping sal_Bool HasString(const com::sun::star::uno::Sequence< ::rtl::OUString >& aItems, const ::rtl::OUString& aString); virtual com::sun::star::uno::Reference < com::sun::star::sheet::XDataPilotField > SAL_CALL createNameGroup(const com::sun::star::uno::Sequence< ::rtl::OUString >& aItems) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException); virtual com::sun::star::uno::Reference < com::sun::star::sheet::XDataPilotField > SAL_CALL createDateGroup(const com::sun::star::sheet::DataPilotFieldGroupInfo& rInfo) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException); // 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); private: ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > mxItems; SfxItemPropertySet maPropSet; ::com::sun::star::uno::Any maOrient; }; // ============================================================================ typedef ::std::vector< ::rtl::OUString > ScFieldGroupMembers; struct ScFieldGroup { ::rtl::OUString maName; ScFieldGroupMembers maMembers; }; typedef ::std::vector< ScFieldGroup > ScFieldGroups; // ============================================================================ typedef ::cppu::WeakImplHelper4 < ::com::sun::star::container::XNameContainer, ::com::sun::star::container::XEnumerationAccess, ::com::sun::star::container::XIndexAccess, ::com::sun::star::lang::XServiceInfo > ScDataPilotFieldGroupsObjImpl; /** Implementation of all grouped items in a DataPilot field. This is a stand-alone object without any connection to the base DataPilot field. Grouping info has to be written back with the GroupInfo property of the DataPilot field after modifying this object. */ class ScDataPilotFieldGroupsObj : public ScDataPilotFieldGroupsObjImpl { public: explicit ScDataPilotFieldGroupsObj( const ScFieldGroups& rGroups ); virtual ~ScDataPilotFieldGroupsObj(); // 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); // 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); // 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); // 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); // implementation ScFieldGroup& getFieldGroup( const ::rtl::OUString& rName ) throw(::com::sun::star::uno::RuntimeException); void renameFieldGroup( const ::rtl::OUString& rOldName, const ::rtl::OUString& rNewName ) throw(::com::sun::star::uno::RuntimeException); private: ScFieldGroups::iterator implFindByName( const ::rtl::OUString& rName ); private: ScFieldGroups maGroups; }; // ============================================================================ typedef ::cppu::WeakImplHelper5 < ::com::sun::star::container::XNameContainer, ::com::sun::star::container::XEnumerationAccess, ::com::sun::star::container::XIndexAccess, ::com::sun::star::container::XNamed, ::com::sun::star::lang::XServiceInfo > ScDataPilotFieldGroupObjImpl; class ScDataPilotFieldGroupObj : public ScDataPilotFieldGroupObjImpl { public: explicit ScDataPilotFieldGroupObj( ScDataPilotFieldGroupsObj& rParent, const ::rtl::OUString& rGroupName ); virtual ~ScDataPilotFieldGroupObj(); // 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); // 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); // 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); // 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); // 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); // 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); private: ScDataPilotFieldGroupsObj& mrParent; ::rtl::OUString maGroupName; }; // ============================================================================ typedef ::cppu::WeakImplHelper2 < ::com::sun::star::container::XNamed, ::com::sun::star::lang::XServiceInfo > ScDataPilotFieldGroupItemObjImpl; class ScDataPilotFieldGroupItemObj : public ScDataPilotFieldGroupItemObjImpl { public: explicit ScDataPilotFieldGroupItemObj( ScDataPilotFieldGroupObj& rParent, const ::rtl::OUString& rName ); virtual ~ScDataPilotFieldGroupItemObj(); // 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); // 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); private: ScDataPilotFieldGroupObj& mrParent; ::rtl::OUString maName; }; // ============================================================================ typedef ::cppu::WeakImplHelper4 < ::com::sun::star::container::XEnumerationAccess, ::com::sun::star::container::XIndexAccess, ::com::sun::star::container::XNameAccess, ::com::sun::star::lang::XServiceInfo > ScDataPilotItemsObjImpl; class ScDataPilotItemsObj : public ScDataPilotChildObjBase, public ScDataPilotItemsObjImpl { public: explicit ScDataPilotItemsObj( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId ); virtual ~ScDataPilotItemsObj(); // 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); // 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); private: ScDataPilotItemObj* GetObjectByIndex_Impl( sal_Int32 nIndex ) const; }; // ============================================================================ typedef ::cppu::WeakImplHelper3 < ::com::sun::star::container::XNamed, ::com::sun::star::beans::XPropertySet, ::com::sun::star::lang::XServiceInfo > ScDataPilotItemObjImpl; class ScDataPilotItemObj : public ScDataPilotChildObjBase, public ScDataPilotItemObjImpl { public: explicit ScDataPilotItemObj( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId, sal_Int32 nIndex ); virtual ~ScDataPilotItemObj(); // 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 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); // 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); private: SfxItemPropertySet maPropSet; sal_Int32 mnIndex; }; // ============================================================================ #endif