From 9ae5a91f7955e44d3b24a3f7741f9bca02ac7f24 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Mon, 18 Sep 2000 16:07:07 +0000 Subject: initial import --- sc/inc/dptabres.hxx | 343 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) create mode 100644 sc/inc/dptabres.hxx (limited to 'sc/inc/dptabres.hxx') diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx new file mode 100644 index 000000000000..a5caaea911ca --- /dev/null +++ b/sc/inc/dptabres.hxx @@ -0,0 +1,343 @@ +/************************************************************************* + * + * $RCSfile: dptabres.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:44:49 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 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 + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef SC_DPTABRES_HXX +#define SC_DPTABRES_HXX + +#ifndef _SVARRAY_HXX //autogen +#include +#endif + +#ifndef _STRING_HXX //autogen +#include +#endif + +#ifndef _COM_SUN_STAR_SHEET_MEMBERRESULT_HPP_ +#include +#endif +#ifndef _COM_SUN_STAR_SHEET_DATARESULT_HPP_ +#include +#endif +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_ +#include +#endif + +#ifndef SC_SCGLOB_HXX +#include "global.hxx" // enum ScSubTotalFunc +#endif + + +class ScAddress; +class ScDocument; +class ScDPSource; +class ScDPDimension; +class ScDPLevel; +class ScDPMember; +class ScDPAggData; + +struct ScDPValueData; + +// +// aggregated data +//! separate header file? +// + +class ScDPAggData +{ +private: + double fVal; + double fSquare; + long nCount; + ScDPAggData* pChild; + +public: + ScDPAggData() : fVal(0.0), fSquare(0.0), nCount(0), pChild(NULL) {} + ~ScDPAggData() { delete pChild; } + + void Update( const ScDPValueData& rNext, ScSubTotalFunc eFunc ); + double GetResult( ScSubTotalFunc eFunc ) const; + BOOL HasError( ScSubTotalFunc eFunc ) const; + BOOL HasData() const { return ( nCount != 0 ); } + + const ScDPAggData* GetExistingChild() const { return pChild; } + ScDPAggData* GetChild(); +}; + + +// -------------------------------------------------------------------- +// +// results for a hierarchy dimension +// + +#define SC_DP_RES_GROW 16 + +class ScDPResultDimension; +class ScDPDataDimension; +class ScDPDataMember; +struct ScDPItemData; + + +#define SC_DPMEASURE_ALL -1 +#define SC_DPMEASURE_ANY -2 + +class ScDPResultData +{ +private: + ScDPSource* pSource; //! Ref + //! keep things like measure lists here + + long nMeasCount; + ScSubTotalFunc* pMeasFuncs; + String* pMeasNames; + BOOL bDataAtCol; + BOOL bDataAtRow; + +public: + ScDPResultData( ScDPSource* pSrc ); //! Ref + ~ScDPResultData(); + + void SetMeasureData( long nCount, const ScSubTotalFunc* pFunctions, + const String* pNames ); + void SetDataLayoutOrientation( USHORT nOrient ); + + long GetMeasureCount() const { return nMeasCount; } + ScSubTotalFunc GetMeasureFunction(long nMeasure) const; + String GetMeasureString(long nMeasure, BOOL bForce, ScSubTotalFunc eForceFunc) const; + String GetMeasureDimensionName(long nMeasure) const; + + BOOL IsDataAtCol() const { return bDataAtCol; } + BOOL IsDataAtRow() const { return bDataAtRow; } + + long GetColStartMeasure() const; + long GetRowStartMeasure() const; + + long GetCountForMeasure( long nMeas ) const + { return ( nMeas == SC_DPMEASURE_ALL ) ? nMeasCount : 1; } +}; + + +class ScDPResultMember +{ +private: + ScDPResultData* pResultData; + ScDPDimension* pParentDim; //! Ref + ScDPLevel* pParentLevel; //! Ref + ScDPMember* pMemberDesc; //! Ref + ScDPResultDimension* pChildDimension; + ScDPDataMember* pDataRoot; + BOOL bHasElements; + BOOL bForceSubTotal; + +public: + ScDPResultMember( ScDPResultData* pData, ScDPDimension* pDim, + ScDPLevel* pLev, ScDPMember* pDesc, + BOOL bForceSub ); //! Ref + ~ScDPResultMember(); + + void InitFrom( ScDPDimension** ppDim, ScDPLevel** ppLev ); + + String GetName() const; + BOOL IsValid() const; + BOOL IsVisible() const; + long GetSize(long nMeasure) const; + +// BOOL SubTotalEnabled() const; + long GetSubTotalCount() const; + + BOOL IsNamedItem( const ScDPItemData& r ) const; + + void SetHasElements() { bHasElements = TRUE; } + + void ProcessData( const ScDPItemData* pChildMembers, + ScDPResultDimension* pDataDim, + const ScDPItemData* pDataMembers, + const ScDPValueData* pValues ); + + void FillMemberResults( com::sun::star::uno::Sequence< + com::sun::star::sheet::MemberResult>* pSequences, + long& rPos, long nMeasure, BOOL bRoot, + const String* pMemberName, + const String* pMemberCaption ); + + void FillDataResults( const ScDPResultMember* pRefMember, + com::sun::star::uno::Sequence< + com::sun::star::uno::Sequence< + com::sun::star::sheet::DataResult> >& rSequence, + long& rRow, long nMeasure ) const; + + //! this will be removed! + const ScDPResultDimension* GetChildDimension() const { return pChildDimension; } + ScDPResultDimension* GetChildDimension() { return pChildDimension; } + + ScDPDimension* GetParentDim() { return pParentDim; } //! Ref + ScDPLevel* GetParentLevel() { return pParentLevel; } //! Ref +}; + +class ScDPDataMember +{ +private: + ScDPResultData* pResultData; + ScDPResultMember* pResultMember; //! Ref? + ScDPDataDimension* pChildDimension; + ScDPAggData aAggregate; + + void UpdateValues(const ScDPValueData* pValues); + +public: + ScDPDataMember( ScDPResultData* pData, ScDPResultMember* pRes ); + ~ScDPDataMember(); + + void InitFrom( ScDPResultDimension* pDim ); + + String GetName() const; + BOOL HasData(long nMeasure) const; + + BOOL IsNamedItem( const ScDPItemData& r ) const; + + void ProcessData( const ScDPItemData* pChildMembers, const ScDPValueData* pValues ); + + BOOL HasError(long nMeasure) const; + double GetAggregate(long nMeasure) const; + + void FillDataRow( const ScDPResultMember* pRefMember, + com::sun::star::uno::Sequence& rSequence, + long& rCol, long nMeasure, BOOL bIsSubTotalRow ) const; + + //! this will be removed! + const ScDPDataDimension* GetChildDimension() const { return pChildDimension; } + ScDPDataDimension* GetChildDimension() { return pChildDimension; } +}; + +//! replace PtrArr with 32-bit array ???? + +typedef ScDPResultMember* ScDPResultMemberPtr; +SV_DECL_PTRARR_DEL(ScDPResultMembers, ScDPResultMemberPtr, SC_DP_RES_GROW, SC_DP_RES_GROW); + +typedef ScDPDataMember* ScDPDataMemberPtr; +SV_DECL_PTRARR_DEL(ScDPDataMembers, ScDPDataMemberPtr, SC_DP_RES_GROW, SC_DP_RES_GROW); + + +// result dimension contains only members + +class ScDPResultDimension +{ +private: + ScDPResultData* pResultData; + ScDPResultMembers aMembers; + BOOL bIsDataLayout; //! or ptr to IntDimension? + +public: + ScDPResultDimension( ScDPResultData* pData ); + ~ScDPResultDimension(); + + // allocates new members + void InitFrom( ScDPDimension** ppDim, ScDPLevel** ppLev ); + + long GetSize(long nMeasure) const; + + BOOL IsValidEntry( const ScDPItemData* pMembers ) const; + + // modifies existing members, allocates data dimensions + void ProcessData( const ScDPItemData* pMembers, + ScDPResultDimension* pDataDim, + const ScDPItemData* pDataMembers, + const ScDPValueData* pValues ); //! Test + + void FillMemberResults( com::sun::star::uno::Sequence< + com::sun::star::sheet::MemberResult>* pSequences, + long nStart, long nMeasure ); + + void FillDataResults( const ScDPResultMember* pRefMember, + com::sun::star::uno::Sequence< + com::sun::star::uno::Sequence< + com::sun::star::sheet::DataResult> >& rSequence, + long nRow, long nMeasure ) const; + + // for ScDPDataDimension::InitFrom + long GetMemberCount() const; + ScDPResultMember* GetMember(long n) const; + + BOOL IsDataLayout() const { return bIsDataLayout; } + + ScDPResultDimension* GetFirstChildDimension() const; +}; + +class ScDPDataDimension +{ +private: + ScDPResultData* pResultData; + ScDPDataMembers aMembers; + BOOL bIsDataLayout; //! or ptr to IntDimension? + +public: + ScDPDataDimension( ScDPResultData* pData ); + ~ScDPDataDimension(); + + void InitFrom( ScDPResultDimension* pDim ); // recursive + void ProcessData( const ScDPItemData* pDataMembers, const ScDPValueData* pValues ); + + void FillDataRow( const ScDPResultDimension* pRefDim, + com::sun::star::uno::Sequence& rSequence, + long nCol, long nMeasure, BOOL bIsSubTotalRow ) const; +}; + +#endif + -- cgit