/************************************************************************* * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: dptabsrc.hxx,v $ * * $Revision: 1.8 $ * * last change: $Author: obo $ $Date: 2007-01-25 11:03:43 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. * * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2005 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * ************************************************************************/ #ifndef SC_DPTABSRC_HXX #define SC_DPTABSRC_HXX #include #include #ifndef _STRING_HXX //autogen #include #endif #ifndef _LIST_HXX //autogen wg. List #include #endif #ifndef SC_SCGLOB_HXX #include "global.hxx" // enum ScSubTotalFunc #endif #ifndef _COM_SUN_STAR_SHEET_XDIMENSIONSSUPPLIER_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_XHIERARCHIESSUPPLIER_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_XLEVELSSUPPLIER_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_XMEMBERSSUPPLIER_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_XDATAPILOTRESULTS_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_XDATAPILOTMEMBERRESULTS_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_MEMBERRESULT_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_GENERALFUNCTION_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_DATAPILOTFIELDAUTOSHOWINFO_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_DATAPILOTFIELDLAYOUTINFO_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_DATAPILOTFIELDLAYOUTMODE_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_DATAPILOTFIELDREFERENCE_HPP_ #include #endif #ifndef _COM_SUN_STAR_SHEET_DATAPILOTFIELDSORTINFO_HPP_ #include #endif #ifndef _COM_SUN_STAR_UTIL_XREFRESHABLE_HPP_ #include #endif #ifndef _COM_SUN_STAR_UTIL_XCLONEABLE_HPP_ #include #endif #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ #include #endif #ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ #include #endif #ifndef _COM_SUN_STAR_CONTAINER_XNAMED_HPP_ #include #endif #ifndef _CPPUHELPER_IMPLBASE2_HXX_ #include #endif #ifndef _CPPUHELPER_IMPLBASE3_HXX_ #include #endif #ifndef _CPPUHELPER_IMPLBASE5_HXX_ #include #endif #ifndef SC_DPTABDAT_HXX #include "dptabdat.hxx" #endif class ScDPResultMember; class ScDPResultData; struct ScDPItemData; class ScDPTableData; // ------------------------------------------------------------------------ // should be dynamic! #define SC_DAPI_MAXFIELDS 256 // -------------------------------------------------------------------- // // implementation of DataPilotSource using ScDPTableData // class ScDPDimensions; class ScDPDimension; class ScDPHierarchies; class ScDPHierarchy; class ScDPLevels; class ScDPLevel; class ScDPMembers; class ScDPMember; class ScDPSource : public cppu::WeakImplHelper5< com::sun::star::sheet::XDimensionsSupplier, com::sun::star::sheet::XDataPilotResults, com::sun::star::util::XRefreshable, com::sun::star::beans::XPropertySet, com::sun::star::lang::XServiceInfo > { private: ScDPTableData* pData; // data source ScDPDimensions* pDimensions; // api objects // settings: long nColDims[SC_DAPI_MAXFIELDS]; long nRowDims[SC_DAPI_MAXFIELDS]; long nDataDims[SC_DAPI_MAXFIELDS]; long nPageDims[SC_DAPI_MAXFIELDS]; long nColDimCount; long nRowDimCount; long nDataDimCount; long nPageDimCount; BOOL bColumnGrand; BOOL bRowGrand; BOOL bIgnoreEmptyRows; BOOL bRepeatIfEmpty; long nDupCount; // results: ScDPResultData* pResData; // keep the rest in this! ScDPResultMember* pColResRoot; ScDPResultMember* pRowResRoot; com::sun::star::uno::Sequence* pColResults; com::sun::star::uno::Sequence* pRowResults; List aColLevelList; List aRowLevelList; ScSubTotalFunc eDataFunctions[SC_DAPI_MAXFIELDS]; BOOL bResultOverflow; void CreateRes_Impl(); void FillMemberResults(); void FillLevelList( USHORT nOrientation, List& rList ); void SetDupCount( long nNew ); public: ScDPSource( ScDPTableData* pD ); // TableData is deleted by Source virtual ~ScDPSource(); ScDPTableData* GetData() { return pData; } const ScDPTableData* GetData() const { return pData; } USHORT GetOrientation(long nColumn); void SetOrientation(long nColumn, USHORT nNew); long GetPosition(long nColumn); long GetDataDimensionCount(); String GetDataDimName(long nIndex); BOOL IsDataLayoutDimension(long nDim); USHORT GetDataLayoutOrientation(); BOOL IsDateDimension(long nDim); BOOL SubTotalAllowed(long nColumn); //! move to ScDPResultData ScDPDimension* AddDuplicated(long nSource, const String& rNewName); long GetDupCount() const { return nDupCount; } long GetSourceDim(long nDim); const com::sun::star::uno::Sequence* GetMemberResults( ScDPLevel* pLevel ); ScDPDimensions* GetDimensionsObject(); void DumpState( ScDocument* pDoc, const ScAddress& rPos ); // XDimensionsSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getDimensions( ) throw(::com::sun::star::uno::RuntimeException); // XDataPilotResults virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::DataResult > > SAL_CALL getResults( ) throw(::com::sun::star::uno::RuntimeException); // XRefreshable virtual void SAL_CALL refresh() throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL addRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) 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); virtual String getDataDescription(); //! ??? virtual BOOL getColumnGrand() const; virtual void setColumnGrand(BOOL bSet); virtual BOOL getRowGrand() const; virtual void setRowGrand(BOOL bSet); virtual BOOL getIgnoreEmptyRows() const; virtual void setIgnoreEmptyRows(BOOL bSet); virtual BOOL getRepeatIfEmpty() const; virtual void setRepeatIfEmpty(BOOL bSet); virtual void validate(); //! ??? virtual void disposeData(); }; class ScDPDimensions : public cppu::WeakImplHelper2< com::sun::star::container::XNameAccess, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDimCount; ScDPDimension** ppDims; public: ScDPDimensions( ScDPSource* pSrc ); virtual ~ScDPDimensions(); void CountChanged(); // 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); // 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); virtual long getCount() const; virtual ScDPDimension* getByIndex(long nIndex) const; }; class ScDPDimension : public cppu::WeakImplHelper5< com::sun::star::sheet::XHierarchiesSupplier, com::sun::star::container::XNamed, com::sun::star::util::XCloneable, com::sun::star::beans::XPropertySet, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDim; ScDPHierarchies* pHierarchies; long nUsedHier; USHORT nFunction; // enum GeneralFunction String aName; // if empty, take from source long nSourceDim; // >=0 if dup'ed ::com::sun::star::sheet::DataPilotFieldReference aReferenceValue; // settings for "show data as" / "displayed value" BOOL bHasSelectedPage; String aSelectedPage; ScDPItemData* pSelectedData; // internal, temporary, created from aSelectedPage public: ScDPDimension( ScDPSource* pSrc, long nD ); virtual ~ScDPDimension(); long GetDimension() const { return nDim; } // dimension index in source long GetSourceDim() const { return nSourceDim; } // >=0 if dup'ed ScDPDimension* CreateCloneObject(); ScDPHierarchies* GetHierarchiesObject(); // 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); // XHierarchiesSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getHierarchies() throw(::com::sun::star::uno::RuntimeException); // XCloneable virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone() 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); virtual USHORT getOrientation() const; virtual void setOrientation(USHORT nNew); virtual long getPosition() const; virtual void setPosition(long nNew); virtual BOOL getIsDataLayoutDimension() const; virtual USHORT getFunction() const; virtual void setFunction(USHORT nNew); // for data dimension virtual long getUsedHierarchy() const; virtual void setUsedHierarchy(long nNew); virtual BOOL isDuplicated() const; BOOL HasSelectedPage() const { return bHasSelectedPage; } const ScDPItemData& GetSelectedData(); const ::com::sun::star::sheet::DataPilotFieldReference& GetReferenceValue() const; BOOL IsValidPage( const ScDPItemData& rData ); }; class ScDPHierarchies : public cppu::WeakImplHelper2< com::sun::star::container::XNameAccess, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDim; long nHierCount; ScDPHierarchy** ppHiers; public: ScDPHierarchies( ScDPSource* pSrc, long nD ); virtual ~ScDPHierarchies(); // 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); // 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); virtual long getCount() const; virtual ScDPHierarchy* getByIndex(long nIndex) const; }; class ScDPHierarchy : public cppu::WeakImplHelper3< com::sun::star::sheet::XLevelsSupplier, com::sun::star::container::XNamed, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDim; long nHier; ScDPLevels* pLevels; public: ScDPHierarchy( ScDPSource* pSrc, long nD, long nH ); virtual ~ScDPHierarchy(); ScDPLevels* GetLevelsObject(); // 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); // XLevelsSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getLevels() 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 ScDPLevels : public cppu::WeakImplHelper2< com::sun::star::container::XNameAccess, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDim; long nHier; long nLevCount; ScDPLevel** ppLevs; public: ScDPLevels( ScDPSource* pSrc, long nD, long nH ); virtual ~ScDPLevels(); // 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); // 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); virtual long getCount() const; virtual ScDPLevel* getByIndex(long nIndex) const; }; class ScDPLevel : public cppu::WeakImplHelper5< com::sun::star::sheet::XMembersSupplier, com::sun::star::container::XNamed, com::sun::star::sheet::XDataPilotMemberResults, com::sun::star::beans::XPropertySet, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDim; long nHier; long nLev; ScDPMembers* pMembers; com::sun::star::uno::Sequence aSubTotals; BOOL bShowEmpty; ::com::sun::star::sheet::DataPilotFieldSortInfo aSortInfo; // stored user settings ::com::sun::star::sheet::DataPilotFieldAutoShowInfo aAutoShowInfo; // stored user settings ::com::sun::star::sheet::DataPilotFieldLayoutInfo aLayoutInfo; // stored user settings // valid only from result calculation: ::std::vector aGlobalOrder; // result of sorting by name or position long nSortMeasure; // measure (index of data dimension) to sort by long nAutoMeasure; // measure (index of data dimension) for AutoShow BOOL bEnableLayout; // enabled only for row fields, not for the innermost one public: ScDPLevel( ScDPSource* pSrc, long nD, long nH, long nL ); virtual ~ScDPLevel(); ScDPMembers* GetMembersObject(); // 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); // XMembersSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getMembers() throw(::com::sun::star::uno::RuntimeException); // XDataPilotMemberResults virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::MemberResult > SAL_CALL getResults() 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); virtual com::sun::star::uno::Sequence getSubTotals() const; virtual void setSubTotals(const com::sun::star::uno::Sequence< com::sun::star::sheet::GeneralFunction>& rNew); virtual BOOL getShowEmpty() const; virtual void setShowEmpty(BOOL bSet); const ::com::sun::star::sheet::DataPilotFieldSortInfo& GetSortInfo() const { return aSortInfo; } const ::com::sun::star::sheet::DataPilotFieldAutoShowInfo& GetAutoShow() const { return aAutoShowInfo; } void EvaluateSortOrder(); void SetEnableLayout( BOOL bSet ); const ::std::vector& GetGlobalOrder() const { return aGlobalOrder; } ::std::vector& GetGlobalOrder() { return aGlobalOrder; } long GetSortMeasure() const { return nSortMeasure; } long GetAutoMeasure() const { return nAutoMeasure; } BOOL IsOutlineLayout() const { return bEnableLayout && aLayoutInfo.LayoutMode != ::com::sun::star::sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT; } BOOL IsSubtotalsAtTop() const { return bEnableLayout && aLayoutInfo.LayoutMode == ::com::sun::star::sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP; } BOOL IsAddEmpty() const { return bEnableLayout && aLayoutInfo.AddEmptyLines; } //! number format (for data fields and date fields) }; // hash map from name to index in the member array, for fast name access typedef ::std::hash_map< ::rtl::OUString, sal_Int32, ::rtl::OUStringHash > ScDPMembersHashMap; class ScDPMembers : public cppu::WeakImplHelper2< com::sun::star::container::XNameAccess, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDim; long nHier; long nLev; long nMbrCount; ScDPMember** ppMbrs; mutable ScDPMembersHashMap aHashMap; public: ScDPMembers( ScDPSource* pSrc, long nD, long nH, long nL ); virtual ~ScDPMembers(); // 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); // 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); virtual long getCount() const; virtual ScDPMember* getByIndex(long nIndex) const; long getMinMembers() const; sal_Int32 GetIndexFromName( const ::rtl::OUString& rName ) const; // <0 if not found }; class ScDPMember : public cppu::WeakImplHelper3< com::sun::star::container::XNamed, com::sun::star::beans::XPropertySet, com::sun::star::lang::XServiceInfo > { private: ScDPSource* pSource; long nDim; long nHier; long nLev; ScDPItemData maData; // String aCaption; // visible name (changeable by user) BOOL bVisible; BOOL bShowDet; public: ScDPMember( ScDPSource* pSrc, long nD, long nH, long nL, const String& rN, double fV, BOOL bHV ); virtual ~ScDPMember(); BOOL IsNamedItem( const ScDPItemData& r ) const; String GetNameStr() const; void FillItemData( ScDPItemData& rData ) const; sal_Int32 Compare( const ScDPMember& rOther ) const; // visible order // 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); virtual BOOL getIsVisible() const; virtual void setIsVisible(BOOL bSet); virtual BOOL getShowDetails() const; virtual void setShowDetails(BOOL bSet); }; #endif