1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright IBM Corporation 2009.
* Copyright 2009 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: dpglobal.hxx,v $
* $Revision: 1.0 $
*
* 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
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// Wang Xu Ming - DataPilot migration
// Buffer&&Performance
//
#ifndef _SC_DPGLOBAL_HXX
#define _SC_DPGLOBAL_HXX
#include <algorithm>
#include <list>
#include <tools/gen.hxx>
#include <tools/debug.hxx>
#include <global.hxx>
#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/sheet/XDimensionsSupplier.hpp>
#include <com/sun/star/sheet/DataPilotFieldFilter.hpp>
#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp>
#include <com/sun/star/sheet/DataPilotTableHeaderData.hpp>
#include <com/sun/star/sheet/DataPilotTablePositionData.hpp>
#include <com/sun/star/sheet/DataPilotTablePositionType.hpp>
#include <com/sun/star/sheet/DataPilotTableResultData.hpp>
#include <com/sun/star/sheet/DataResultFlags.hpp>
#include <com/sun/star/sheet/GeneralFunction.hpp>
#include <com/sun/star/sheet/MemberResultFlags.hpp>
#include <com/sun/star/sheet/TableFilterField.hpp>
#include <com/sun/star/sheet/XDataPilotMemberResults.hpp>
#include <com/sun/star/sheet/XDataPilotResults.hpp>
#include <com/sun/star/sheet/XHierarchiesSupplier.hpp>
#include <com/sun/star/sheet/XLevelsSupplier.hpp>
// moved from fieldwnd.hxx, see also SC_DAPI_MAXFIELDS
#define MAX_LABELS 256
#define MAX_PAGEFIELDS 10 // maximum count of fields for page area
#define PIVOT_MAXFUNC 11
#define PIVOT_FUNC_NONE 0x0000
#define PIVOT_FUNC_SUM 0x0001
#define PIVOT_FUNC_COUNT 0x0002
#define PIVOT_FUNC_AVERAGE 0x0004
#define PIVOT_FUNC_MAX 0x0008
#define PIVOT_FUNC_MIN 0x0010
#define PIVOT_FUNC_PRODUCT 0x0020
#define PIVOT_FUNC_COUNT_NUM 0x0040
#define PIVOT_FUNC_STD_DEV 0x0080
#define PIVOT_FUNC_STD_DEVP 0x0100
#define PIVOT_FUNC_STD_VAR 0x0200
#define PIVOT_FUNC_STD_VARP 0x0400
#define PIVOT_FUNC_AUTO 0x1000
#define DATA_RENAME_SEPARATOR "_"
#define __MAX_NUM_LEN 64
#define __DECIMALPLACE 18
#define DP_PROP_COLUMNGRAND "ColumnGrand"
#define DP_PROP_FUNCTION "Function"
#define DP_PROP_IGNOREEMPTY "IgnoreEmptyRows"
#define DP_PROP_ISDATALAYOUT "IsDataLayoutDimension"
#define DP_PROP_ISVISIBLE "IsVisible"
#define DP_PROP_ORIENTATION "Orientation"
#define DP_PROP_REPEATIFEMPTY "RepeatIfEmpty"
#define DP_PROP_ROWGRAND "RowGrand"
#define DP_PROP_SHOWDETAILS "ShowDetails"
#define DP_PROP_SHOWEMPTY "ShowEmpty"
#define DP_PROP_SUBTOTALS "SubTotals"
#define DP_PROP_USEDHIERARCHY "UsedHierarchy"
#define DP_PROP_FILTER "Filter"
#define DP_PROP_POSITION "Position"
#define DBG_TRACESTR( x ) \
{\
ByteString aTemp( x , RTL_TEXTENCODING_UTF8 ); \
DBG_TRACE( aTemp.GetBuffer() );\
}
class TypedStrData;
class ScDPObject;
class SC_DLLPUBLIC ScDPItemData
{
public:
enum { MK_VAL = 0x01, MK_DATA = MK_VAL<<1, MK_ERR = MK_DATA<<1, MK_DATE = MK_ERR<<1, MK_DATEPART = MK_DATE<<1 };
private:
union
{
ULONG nNumFormat;
sal_Int32 mnDatePart;
};
String aString;
double fValue;
BYTE mbFlag;
//BOOL bHasValue: 1 ;
//BOOL bHasData: 1;
//BOOL bErr: 1;
friend class ScDPTableDataCache;
public:
ScDPItemData() : nNumFormat( 0 ), fValue(0.0), mbFlag( 0 ){}
ScDPItemData( ULONG nNF, const String & rS, double fV, BYTE bF ):nNumFormat(nNF), aString(rS), fValue(fV), mbFlag( bF ){}
ScDPItemData( const String& rS, double fV = 0.0, BOOL bHV = FALSE, const ULONG nNumFormat = 0 , BOOL bData = TRUE) ;
ScDPItemData( ScDocument* pDoc, SCROW nRow, USHORT nCol, USHORT nDocTab );
void SetString( const String& rS ) { aString = rS; mbFlag &= ~(MK_VAL|MK_DATE); nNumFormat = 0; mbFlag |= MK_DATA; }
// void SetValue ( double value , ULONG nNumFormat = 0 ) { bHasValue = TRUE; nNumFormat = 0;bHasData = TRUE; bDate = FALSE; fValue = value ;}
BOOL IsCaseInsEqual( const ScDPItemData& r ) const;
size_t Hash() const;
// exact equality
BOOL operator==( const ScDPItemData& r ) const;
// case insensitive equality
static sal_Int32 Compare( const ScDPItemData& rA, const ScDPItemData& rB );
#ifdef DEBUG
void dump() const;
#endif
public:
BOOL IsHasData() const ;
BOOL IsHasErr() const ;
BOOL IsValue() const;
String GetString() const ;
double GetValue() const ;
ULONG GetNumFormat() const ;
BOOL HasStringData() const ;
BOOL IsDate() const;
BOOL HasDatePart() const;
void SetDate( BOOL b ) ;
TypedStrData* CreateTypeString( );
sal_uInt8 GetType() const;
BYTE & GetFlag() throw() { return mbFlag; }
const BYTE & GetFlag() const throw() { return const_cast<ScDPItemData*>(this)->GetFlag(); }
};
class SC_DLLPUBLIC ScDPItemDataPool
{
public:
// construct
ScDPItemDataPool(void);
ScDPItemDataPool(const ScDPItemDataPool& r);
virtual ~ScDPItemDataPool(void);
virtual const ScDPItemData* getData( sal_Int32 nId );
virtual sal_Int32 getDataId( const ScDPItemData& aData );
virtual sal_Int32 insertData( const ScDPItemData& aData );
protected:
struct DataHashFunc : public std::unary_function< const ScDPItemData &, size_t >
{
size_t operator() (const ScDPItemData &rData) const { return rData.Hash(); }
};
typedef ::std::hash_multimap< ScDPItemData, sal_Int32, DataHashFunc > DataHash;
::std::vector< ScDPItemData > maItems;
DataHash maItemIds;
};
class ScDPInfoWnd;
class ScDocShell;
class ScTabViewShell;
namespace ScDPGlobal
{
// used for core data
String GetFieldFuncString( const String& rSourceName, USHORT &rFuncMask, BOOL bIsValue );
String GetFuncString( const String &rString, const USHORT nIndex );
com::sun::star::uno::Reference<com::sun::star::container::XNameAccess> DP_GetMembers( const com::sun::star::uno::Reference<
com::sun::star::sheet::XDimensionsSupplier>&rSrc, long nField );
// common operation
String operator + ( const String & rL, const String &rR );
Rectangle operator *( const Rectangle &rLeft, const std::pair<double,double> & rRight );
// used for DataPilot Panel
ScDPInfoWnd* GetDPInfoWnd( ScTabViewShell *pViewShell );
bool ChkDPTableOverlap( ScDocument *pDestDoc, std::list<ScDPObject> & rClipboard, SCCOL nClipStartCol, SCROW nClipStartRow, SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, USHORT nEndTab, BOOL bExcludeClip = FALSE );
}
#endif
|