/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef SC_DPTABSRC_HXX #define SC_DPTABSRC_HXX #include #include // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance #include // End Comments #include #include #include #include "global.hxx" // enum ScSubTotalFunc #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance #include "dpglobal.hxx" // End Comments #include "dptabdat.hxx" namespace com { namespace sun { namespace star { namespace sheet { struct DataPilotFieldFilter; } namespace table { struct CellAddress; } }}} class ScDPResultMember; class ScDPResultData; // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance class ScDPItemData; // End Comments 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::WeakImplHelper6< com::sun::star::sheet::XDimensionsSupplier, com::sun::star::sheet::XDataPilotResults, com::sun::star::util::XRefreshable, com::sun::star::sheet::XDrillDownDataSupplier, com::sun::star::beans::XPropertySet, com::sun::star::lang::XServiceInfo > { private: ScDPTableData* pData; // data source (ScDPObject manages its life time) 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; sal_Bool bColumnGrand; sal_Bool bRowGrand; sal_Bool bIgnoreEmptyRows; sal_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; sal_Bool bResultOverflow; bool bPageFiltered; // set if page field filters have been applied to cache table ::std::auto_ptr mpGrandTotalName; void CreateRes_Impl(); void FillMemberResults(); void FillLevelList( sal_uInt16 nOrientation, List& rList ); void FillCalcInfo(bool bIsRow, ScDPTableData::CalcInfo& rInfo, bool &bHasAutoShow); /** * Compile a list of dimension indices that are either, column, row or * page dimensions (i.e. all but data dimensions). */ void GetCategoryDimensionIndices(::std::hash_set& rCatDims); /** * Set visibilities of individual rows in the cache table based on the * page field data. */ void FilterCacheTableByPageDimensions(); 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; } void SetGrandTotalName(const ::rtl::OUString& rName); const ::rtl::OUString* GetGrandTotalName() const; sal_uInt16 GetOrientation(long nColumn); void SetOrientation(long nColumn, sal_uInt16 nNew); long GetPosition(long nColumn); long GetDataDimensionCount(); ScDPDimension* GetDataDimension(long nIndex); String GetDataDimName(long nIndex); // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance ScDPTableDataCache* GetCache(); const ScDPItemData* GetItemDataById( long nDim, long nId ); long GetDataLayoutDim(){ return pData->GetColumnCount(); } SCROW GetMemberId( long nDim, const ScDPItemData& rData ); // End Comments sal_Bool IsDataLayoutDimension(long nDim); sal_uInt16 GetDataLayoutOrientation(); sal_Bool IsDateDimension(long nDim); sal_uInt32 GetNumberFormat(long nDim); sal_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(); //UNUSED2009-05 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); // XDrillDownDataSupplier virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > > SAL_CALL getDrillDownData(const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::DataPilotFieldFilter >& aFilters ) 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 sal_Bool getColumnGrand() const; virtual void setColumnGrand(sal_Bool bSet); virtual sal_Bool getRowGrand() const; virtual void setRowGrand(sal_Bool bSet); virtual sal_Bool getIgnoreEmptyRows() const; virtual void setIgnoreEmptyRows(sal_Bool bSet); virtual sal_Bool getRepeatIfEmpty() const; virtual void setRepeatIfEmpty(sal_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; // dimension index (== column ID) ScDPHierarchies* pHierarchies; long nUsedHier; sal_uInt16 nFunction; // enum GeneralFunction String aName; // if empty, take from source ::std::auto_ptr mpLayoutName; ::std::auto_ptr mpSubtotalName; long nSourceDim; // >=0 if dup'ed ::com::sun::star::sheet::DataPilotFieldReference aReferenceValue; // settings for "show data as" / "displayed value" sal_Bool bHasSelectedPage; String aSelectedPage; ScDPItemData* pSelectedData; // internal, temporary, created from aSelectedPage sal_Bool mbHasHiddenMember; 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(); SC_DLLPUBLIC const ::rtl::OUString* GetLayoutName() const; const ::rtl::OUString* GetSubtotalName() const; // 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 sal_uInt16 getOrientation() const; virtual void setOrientation(sal_uInt16 nNew); virtual long getPosition() const; virtual void setPosition(long nNew); virtual sal_Bool getIsDataLayoutDimension() const; virtual sal_uInt16 getFunction() const; virtual void setFunction(sal_uInt16 nNew); // for data dimension virtual long getUsedHierarchy() const; virtual void setUsedHierarchy(long nNew); virtual sal_Bool isDuplicated() const; sal_Bool HasSelectedPage() const { return bHasSelectedPage; } const ScDPItemData& GetSelectedData(); const ::com::sun::star::sheet::DataPilotFieldReference& GetReferenceValue() const; //UNUSED2009-05 sal_Bool IsValidPage( const ScDPItemData& rData ); // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance sal_Bool IsVisible( const ScDPItemData& rData ); // End Comments }; 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; sal_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 sal_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 sal_Bool getShowEmpty() const; virtual void setShowEmpty(sal_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( sal_Bool bSet ); const ::std::vector& GetGlobalOrder() const { return aGlobalOrder; } ::std::vector& GetGlobalOrder() { return aGlobalOrder; } long GetSortMeasure() const { return nSortMeasure; } long GetAutoMeasure() const { return nAutoMeasure; } sal_Bool IsOutlineLayout() const { return bEnableLayout && aLayoutInfo.LayoutMode != ::com::sun::star::sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT; } sal_Bool IsSubtotalsAtTop() const { return bEnableLayout && aLayoutInfo.LayoutMode == ::com::sun::star::sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP; } sal_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 // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance const std::vector& GetGlobalOrder(); const ScDPItemData* GetSrcItemDataByIndex( SCROW nIndex); SCROW GetSrcItemsCount(); // End Comments }; 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; // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance SCROW mnDataId; // End Comments // String aCaption; // visible name (changeable by user) ::std::auto_ptr mpLayoutName; sal_Int32 nPosition; // manual sorting sal_Bool bVisible; sal_Bool bShowDet; public: // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance ScDPMember( ScDPSource* pSrc, long nD, long nH, long nL, SCROW nIndex /*const String& rN, double fV, sal_Bool bHV */); // End Comments virtual ~ScDPMember(); sal_Bool IsNamedItem( const ScDPItemData& r ) const; String GetNameStr() const; void FillItemData( ScDPItemData& rData ) const; // Wang Xu Ming -- 2009-8-17 // DataPilot Migration - Cache&&Performance // const ScDPItemData& GetItemData() const{ return maData; } const ScDPItemData& GetItemData() const; inline SCROW GetItemDataId() const { return mnDataId; } sal_Bool IsNamedItem( SCROW nIndex ) const; // End Comments SC_DLLPUBLIC const ::rtl::OUString* GetLayoutName() 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 sal_Bool getIsVisible() const; virtual void setIsVisible(sal_Bool bSet); virtual sal_Bool getShowDetails() const; virtual void setShowDetails(sal_Bool bSet); sal_Int32 getPosition() const; void setPosition(sal_Int32 nNew); }; #endif