bump product version to 4.1.6.2
[LibreOffice.git] / sc / inc / dptabsrc.hxx
blob60f92121f9307bc9ef27b715d6b3f7eca1cf942c
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef SC_DPTABSRC_HXX
21 #define SC_DPTABSRC_HXX
23 #include <tools/string.hxx>
24 #include "global.hxx" // enum ScSubTotalFunc
25 #include <com/sun/star/sheet/XDimensionsSupplier.hpp>
26 #include <com/sun/star/sheet/XHierarchiesSupplier.hpp>
27 #include <com/sun/star/sheet/XLevelsSupplier.hpp>
28 #include <com/sun/star/sheet/XMembersSupplier.hpp>
29 #include <com/sun/star/sheet/XDataPilotResults.hpp>
30 #include <com/sun/star/sheet/XDataPilotMemberResults.hpp>
31 #include <com/sun/star/sheet/MemberResult.hpp>
32 #include <com/sun/star/sheet/GeneralFunction.hpp>
33 #include <com/sun/star/sheet/DataPilotFieldAutoShowInfo.hpp>
34 #include <com/sun/star/sheet/DataPilotFieldLayoutInfo.hpp>
35 #include <com/sun/star/sheet/DataPilotFieldLayoutMode.hpp>
36 #include <com/sun/star/sheet/DataPilotFieldReference.hpp>
37 #include <com/sun/star/sheet/DataPilotFieldSortInfo.hpp>
38 #include <com/sun/star/util/XRefreshable.hpp>
39 #include <com/sun/star/sheet/XDrillDownDataSupplier.hpp>
40 #include <com/sun/star/util/XCloneable.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/lang/XServiceInfo.hpp>
43 #include <com/sun/star/container/XNamed.hpp>
44 #include <cppuhelper/implbase2.hxx>
45 #include <cppuhelper/implbase3.hxx>
46 #include <cppuhelper/implbase5.hxx>
47 #include <cppuhelper/implbase6.hxx>
48 #include "rtl/ref.hxx"
50 #include "dptabdat.hxx"
51 #include "dpglobal.hxx"
52 #include "dpresfilter.hxx"
54 #include <boost/unordered_map.hpp>
55 #include <boost/unordered_set.hpp>
56 #include <boost/noncopyable.hpp>
57 #include <boost/scoped_ptr.hpp>
58 #include <vector>
59 #include <list>
61 namespace com { namespace sun { namespace star {
62 namespace sheet {
63 struct DataPilotFieldFilter;
65 namespace table {
66 struct CellAddress;
68 }}}
70 class ScDPResultMember;
71 class ScDPResultData;
72 class ScDPItemData;
73 class ScDPTableData;
76 // implementation of DataPilotSource using ScDPTableData
80 class ScDPDimensions;
81 class ScDPDimension;
82 class ScDPHierarchies;
83 class ScDPHierarchy;
84 class ScDPLevels;
85 class ScDPLevel;
86 class ScDPMembers;
87 class ScDPMember;
90 class ScDPSource : public cppu::WeakImplHelper6<
91 com::sun::star::sheet::XDimensionsSupplier,
92 com::sun::star::sheet::XDataPilotResults,
93 com::sun::star::util::XRefreshable,
94 com::sun::star::sheet::XDrillDownDataSupplier,
95 com::sun::star::beans::XPropertySet,
96 com::sun::star::lang::XServiceInfo >
98 private:
99 ScDPTableData* pData; // data source (ScDPObject manages its life time)
100 ScDPDimensions* pDimensions; // api objects
101 // settings:
103 std::vector<long> maColDims;
104 std::vector<long> maRowDims;
105 std::vector<long> maDataDims;
106 std::vector<long> maPageDims;
107 ScDPResultTree maResFilterSet;
109 bool bColumnGrand;
110 bool bRowGrand;
111 bool bIgnoreEmptyRows;
112 bool bRepeatIfEmpty;
114 long nDupCount;
116 // results:
117 ScDPResultData* pResData; // keep the rest in this!
118 ScDPResultMember* pColResRoot;
119 ScDPResultMember* pRowResRoot;
120 com::sun::star::uno::Sequence<com::sun::star::sheet::MemberResult>* pColResults;
121 com::sun::star::uno::Sequence<com::sun::star::sheet::MemberResult>* pRowResults;
122 std::vector<ScDPLevel*> aColLevelList;
123 std::vector<ScDPLevel*> aRowLevelList;
124 bool bResultOverflow;
125 bool bPageFiltered; // set if page field filters have been applied to cache table
127 SAL_WNODEPRECATED_DECLARATIONS_PUSH
128 ::std::auto_ptr<OUString> mpGrandTotalName;
129 SAL_WNODEPRECATED_DECLARATIONS_POP
131 void CreateRes_Impl();
132 void FillMemberResults();
133 void FillLevelList( sal_uInt16 nOrientation, std::vector<ScDPLevel*> &rList );
134 void FillCalcInfo(bool bIsRow, ScDPTableData::CalcInfo& rInfo, bool &bHasAutoShow);
137 * Compile a list of dimension indices that are either, column, row or
138 * page dimensions (i.e. all but data dimensions).
140 void GetCategoryDimensionIndices(::boost::unordered_set<sal_Int32>& rCatDims);
143 * Set visibilities of individual rows in the cache table based on the
144 * page field data.
146 void FilterCacheByPageDimensions();
148 void SetDupCount( long nNew );
150 OUString getDataDescription(); //! ???
152 void setIgnoreEmptyRows(bool bSet);
153 void setRepeatIfEmpty(bool bSet);
155 void disposeData();
157 public:
158 ScDPSource( ScDPTableData* pD );
159 virtual ~ScDPSource();
161 ScDPTableData* GetData() { return pData; }
162 const ScDPTableData* GetData() const { return pData; }
164 const OUString* GetGrandTotalName() const;
166 sal_uInt16 GetOrientation(long nColumn);
167 void SetOrientation(long nColumn, sal_uInt16 nNew);
168 long GetPosition(long nColumn);
170 long GetDataDimensionCount();
171 ScDPDimension* GetDataDimension(long nIndex);
172 OUString GetDataDimName(long nIndex);
173 const ScDPCache* GetCache();
174 const ScDPItemData* GetItemDataById( long nDim, long nId );
175 long GetDataLayoutDim(){ return pData->GetColumnCount(); }
176 SCROW GetMemberId( long nDim, const ScDPItemData& rData );
177 sal_Bool IsDataLayoutDimension(long nDim);
178 sal_uInt16 GetDataLayoutOrientation();
180 sal_Bool IsDateDimension(long nDim);
182 sal_Bool SubTotalAllowed(long nColumn); //! move to ScDPResultData
184 ScDPDimension* AddDuplicated(long nSource, const OUString& rNewName);
185 long GetDupCount() const { return nDupCount; }
187 long GetSourceDim(long nDim);
189 const com::sun::star::uno::Sequence<com::sun::star::sheet::MemberResult>*
190 GetMemberResults( ScDPLevel* pLevel );
192 ScDPDimensions* GetDimensionsObject();
194 // XDimensionsSupplier
195 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >
196 SAL_CALL getDimensions( )
197 throw(::com::sun::star::uno::RuntimeException);
199 // XDataPilotResults
200 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence<
201 ::com::sun::star::sheet::DataResult > > SAL_CALL getResults( )
202 throw(::com::sun::star::uno::RuntimeException);
204 virtual com::sun::star::uno::Sequence<double> SAL_CALL
205 getFilteredResults(
206 const com::sun::star::uno::Sequence<com::sun::star::sheet::DataPilotFieldFilter>& aFilters )
207 throw (com::sun::star::uno::RuntimeException);
209 // XRefreshable
210 virtual void SAL_CALL refresh() throw(::com::sun::star::uno::RuntimeException);
211 virtual void SAL_CALL addRefreshListener( const ::com::sun::star::uno::Reference<
212 ::com::sun::star::util::XRefreshListener >& l )
213 throw(::com::sun::star::uno::RuntimeException);
214 virtual void SAL_CALL removeRefreshListener( const ::com::sun::star::uno::Reference<
215 ::com::sun::star::util::XRefreshListener >& l )
216 throw(::com::sun::star::uno::RuntimeException);
218 // XDrillDownDataSupplier
219 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > >
220 SAL_CALL getDrillDownData(const ::com::sun::star::uno::Sequence<
221 ::com::sun::star::sheet::DataPilotFieldFilter >& aFilters )
222 throw(::com::sun::star::uno::RuntimeException);
224 // XPropertySet
225 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
226 SAL_CALL getPropertySetInfo( )
227 throw(::com::sun::star::uno::RuntimeException);
228 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName,
229 const ::com::sun::star::uno::Any& aValue )
230 throw(::com::sun::star::beans::UnknownPropertyException,
231 ::com::sun::star::beans::PropertyVetoException,
232 ::com::sun::star::lang::IllegalArgumentException,
233 ::com::sun::star::lang::WrappedTargetException,
234 ::com::sun::star::uno::RuntimeException);
235 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
236 const OUString& PropertyName )
237 throw(::com::sun::star::beans::UnknownPropertyException,
238 ::com::sun::star::lang::WrappedTargetException,
239 ::com::sun::star::uno::RuntimeException);
240 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName,
241 const ::com::sun::star::uno::Reference<
242 ::com::sun::star::beans::XPropertyChangeListener >& xListener )
243 throw(::com::sun::star::beans::UnknownPropertyException,
244 ::com::sun::star::lang::WrappedTargetException,
245 ::com::sun::star::uno::RuntimeException);
246 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName,
247 const ::com::sun::star::uno::Reference<
248 ::com::sun::star::beans::XPropertyChangeListener >& aListener )
249 throw(::com::sun::star::beans::UnknownPropertyException,
250 ::com::sun::star::lang::WrappedTargetException,
251 ::com::sun::star::uno::RuntimeException);
252 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName,
253 const ::com::sun::star::uno::Reference<
254 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
255 throw(::com::sun::star::beans::UnknownPropertyException,
256 ::com::sun::star::lang::WrappedTargetException,
257 ::com::sun::star::uno::RuntimeException);
258 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName,
259 const ::com::sun::star::uno::Reference<
260 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
261 throw(::com::sun::star::beans::UnknownPropertyException,
262 ::com::sun::star::lang::WrappedTargetException,
263 ::com::sun::star::uno::RuntimeException);
265 // XServiceInfo
266 virtual OUString SAL_CALL getImplementationName( )
267 throw(::com::sun::star::uno::RuntimeException);
268 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
269 throw(::com::sun::star::uno::RuntimeException);
270 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
271 throw(::com::sun::star::uno::RuntimeException);
273 #if DEBUG_PIVOT_TABLE
274 void DumpResults() const;
275 #endif
278 class ScDPDimensions : public cppu::WeakImplHelper2<
279 com::sun::star::container::XNameAccess,
280 com::sun::star::lang::XServiceInfo >
282 private:
283 ScDPSource* pSource;
284 long nDimCount;
285 ScDPDimension** ppDims;
287 public:
288 ScDPDimensions( ScDPSource* pSrc );
289 virtual ~ScDPDimensions();
291 void CountChanged();
293 // XNameAccess
294 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const OUString& aName )
295 throw(::com::sun::star::container::NoSuchElementException,
296 ::com::sun::star::lang::WrappedTargetException,
297 ::com::sun::star::uno::RuntimeException);
298 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getElementNames()
299 throw(::com::sun::star::uno::RuntimeException);
300 virtual sal_Bool SAL_CALL hasByName( const OUString& aName )
301 throw(::com::sun::star::uno::RuntimeException);
303 // XElementAccess
304 virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
305 throw(::com::sun::star::uno::RuntimeException);
306 virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
308 // XServiceInfo
309 virtual OUString SAL_CALL getImplementationName( )
310 throw(::com::sun::star::uno::RuntimeException);
311 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
312 throw(::com::sun::star::uno::RuntimeException);
313 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
314 throw(::com::sun::star::uno::RuntimeException);
316 virtual long getCount() const;
317 virtual ScDPDimension* getByIndex(long nIndex) const;
320 class ScDPDimension : boost::noncopyable, public cppu::WeakImplHelper5<
321 com::sun::star::sheet::XHierarchiesSupplier,
322 com::sun::star::container::XNamed,
323 com::sun::star::util::XCloneable,
324 com::sun::star::beans::XPropertySet,
325 com::sun::star::lang::XServiceInfo >
327 ScDPSource* pSource;
328 long nDim; // dimension index (== column ID)
329 ScDPHierarchies* pHierarchies;
330 long nUsedHier;
331 sal_uInt16 nFunction; // enum GeneralFunction
332 OUString aName; // if empty, take from source
333 boost::scoped_ptr<OUString> mpLayoutName;
334 boost::scoped_ptr<OUString> mpSubtotalName;
335 long nSourceDim; // >=0 if dup'ed
336 ::com::sun::star::sheet::DataPilotFieldReference
337 aReferenceValue; // settings for "show data as" / "displayed value"
338 bool bHasSelectedPage;
339 OUString aSelectedPage;
340 ScDPItemData* pSelectedData; // internal, temporary, created from aSelectedPage
341 bool mbHasHiddenMember;
343 public:
344 ScDPDimension( ScDPSource* pSrc, long nD );
345 virtual ~ScDPDimension();
347 long GetDimension() const { return nDim; } // dimension index in source
348 long GetSourceDim() const { return nSourceDim; } // >=0 if dup'ed
350 ScDPDimension* CreateCloneObject();
351 ScDPHierarchies* GetHierarchiesObject();
353 SC_DLLPUBLIC const OUString* GetLayoutName() const;
354 const OUString* GetSubtotalName() const;
356 // XNamed
357 virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
358 virtual void SAL_CALL setName( const OUString& aName )
359 throw(::com::sun::star::uno::RuntimeException);
361 // XHierarchiesSupplier
362 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL
363 getHierarchies() throw(::com::sun::star::uno::RuntimeException);
365 // XCloneable
366 virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL
367 createClone() throw(::com::sun::star::uno::RuntimeException);
369 // XPropertySet
370 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
371 SAL_CALL getPropertySetInfo( )
372 throw(::com::sun::star::uno::RuntimeException);
373 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName,
374 const ::com::sun::star::uno::Any& aValue )
375 throw(::com::sun::star::beans::UnknownPropertyException,
376 ::com::sun::star::beans::PropertyVetoException,
377 ::com::sun::star::lang::IllegalArgumentException,
378 ::com::sun::star::lang::WrappedTargetException,
379 ::com::sun::star::uno::RuntimeException);
380 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
381 const OUString& PropertyName )
382 throw(::com::sun::star::beans::UnknownPropertyException,
383 ::com::sun::star::lang::WrappedTargetException,
384 ::com::sun::star::uno::RuntimeException);
385 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName,
386 const ::com::sun::star::uno::Reference<
387 ::com::sun::star::beans::XPropertyChangeListener >& xListener )
388 throw(::com::sun::star::beans::UnknownPropertyException,
389 ::com::sun::star::lang::WrappedTargetException,
390 ::com::sun::star::uno::RuntimeException);
391 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName,
392 const ::com::sun::star::uno::Reference<
393 ::com::sun::star::beans::XPropertyChangeListener >& aListener )
394 throw(::com::sun::star::beans::UnknownPropertyException,
395 ::com::sun::star::lang::WrappedTargetException,
396 ::com::sun::star::uno::RuntimeException);
397 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName,
398 const ::com::sun::star::uno::Reference<
399 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
400 throw(::com::sun::star::beans::UnknownPropertyException,
401 ::com::sun::star::lang::WrappedTargetException,
402 ::com::sun::star::uno::RuntimeException);
403 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName,
404 const ::com::sun::star::uno::Reference<
405 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
406 throw(::com::sun::star::beans::UnknownPropertyException,
407 ::com::sun::star::lang::WrappedTargetException,
408 ::com::sun::star::uno::RuntimeException);
410 // XServiceInfo
411 virtual OUString SAL_CALL getImplementationName( )
412 throw(::com::sun::star::uno::RuntimeException);
413 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
414 throw(::com::sun::star::uno::RuntimeException);
415 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
416 throw(::com::sun::star::uno::RuntimeException);
418 sal_uInt16 getOrientation() const;
419 void setOrientation(sal_uInt16 nNew);
420 long getPosition() const;
421 bool getIsDataLayoutDimension() const;
422 sal_uInt16 getFunction() const;
423 void setFunction(sal_uInt16 nNew); // for data dimension
424 long getUsedHierarchy() const;
425 void setUsedHierarchy(long nNew);
427 bool HasSelectedPage() const { return bHasSelectedPage; }
428 const ScDPItemData& GetSelectedData();
430 const ::com::sun::star::sheet::DataPilotFieldReference& GetReferenceValue() const;
433 class ScDPHierarchies : public cppu::WeakImplHelper2<
434 com::sun::star::container::XNameAccess,
435 com::sun::star::lang::XServiceInfo >
437 private:
438 ScDPSource* pSource;
439 long nDim;
440 long nHierCount;
441 ScDPHierarchy** ppHiers;
443 public:
444 ScDPHierarchies( ScDPSource* pSrc, long nD );
445 virtual ~ScDPHierarchies();
447 // XNameAccess
448 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const OUString& aName )
449 throw(::com::sun::star::container::NoSuchElementException,
450 ::com::sun::star::lang::WrappedTargetException,
451 ::com::sun::star::uno::RuntimeException);
452 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getElementNames()
453 throw(::com::sun::star::uno::RuntimeException);
454 virtual sal_Bool SAL_CALL hasByName( const OUString& aName )
455 throw(::com::sun::star::uno::RuntimeException);
457 // XElementAccess
458 virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
459 throw(::com::sun::star::uno::RuntimeException);
460 virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
462 // XServiceInfo
463 virtual OUString SAL_CALL getImplementationName( )
464 throw(::com::sun::star::uno::RuntimeException);
465 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
466 throw(::com::sun::star::uno::RuntimeException);
467 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
468 throw(::com::sun::star::uno::RuntimeException);
470 virtual long getCount() const;
471 virtual ScDPHierarchy* getByIndex(long nIndex) const;
474 class ScDPHierarchy : public cppu::WeakImplHelper3<
475 com::sun::star::sheet::XLevelsSupplier,
476 com::sun::star::container::XNamed,
477 com::sun::star::lang::XServiceInfo >
479 private:
480 ScDPSource* pSource;
481 long nDim;
482 long nHier;
483 ScDPLevels* pLevels;
485 public:
486 ScDPHierarchy( ScDPSource* pSrc, long nD, long nH );
487 virtual ~ScDPHierarchy();
489 ScDPLevels* GetLevelsObject();
491 // XNamed
492 virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
493 virtual void SAL_CALL setName( const OUString& aName )
494 throw(::com::sun::star::uno::RuntimeException);
496 // XLevelsSupplier
497 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL
498 getLevels() throw(::com::sun::star::uno::RuntimeException);
500 // XServiceInfo
501 virtual OUString SAL_CALL getImplementationName( )
502 throw(::com::sun::star::uno::RuntimeException);
503 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
504 throw(::com::sun::star::uno::RuntimeException);
505 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
506 throw(::com::sun::star::uno::RuntimeException);
509 class ScDPLevels : public cppu::WeakImplHelper2<
510 com::sun::star::container::XNameAccess,
511 com::sun::star::lang::XServiceInfo >
513 private:
514 ScDPSource* pSource;
515 long nDim;
516 long nHier;
517 long nLevCount;
518 ScDPLevel** ppLevs;
520 public:
521 ScDPLevels( ScDPSource* pSrc, long nD, long nH );
522 virtual ~ScDPLevels();
524 // XNameAccess
525 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const OUString& aName )
526 throw(::com::sun::star::container::NoSuchElementException,
527 ::com::sun::star::lang::WrappedTargetException,
528 ::com::sun::star::uno::RuntimeException);
529 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getElementNames()
530 throw(::com::sun::star::uno::RuntimeException);
531 virtual sal_Bool SAL_CALL hasByName( const OUString& aName )
532 throw(::com::sun::star::uno::RuntimeException);
534 // XElementAccess
535 virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
536 throw(::com::sun::star::uno::RuntimeException);
537 virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
539 // XServiceInfo
540 virtual OUString SAL_CALL getImplementationName( )
541 throw(::com::sun::star::uno::RuntimeException);
542 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
543 throw(::com::sun::star::uno::RuntimeException);
544 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
545 throw(::com::sun::star::uno::RuntimeException);
547 virtual long getCount() const;
548 virtual ScDPLevel* getByIndex(long nIndex) const;
551 class ScDPLevel : public cppu::WeakImplHelper5<
552 com::sun::star::sheet::XMembersSupplier,
553 com::sun::star::container::XNamed,
554 com::sun::star::sheet::XDataPilotMemberResults,
555 com::sun::star::beans::XPropertySet,
556 com::sun::star::lang::XServiceInfo >
558 private:
559 ScDPSource* pSource;
560 long nDim;
561 long nHier;
562 long nLev;
563 ScDPMembers* pMembers;
564 com::sun::star::uno::Sequence<com::sun::star::sheet::GeneralFunction> aSubTotals;
565 ::com::sun::star::sheet::DataPilotFieldSortInfo aSortInfo; // stored user settings
566 ::com::sun::star::sheet::DataPilotFieldAutoShowInfo aAutoShowInfo; // stored user settings
567 ::com::sun::star::sheet::DataPilotFieldLayoutInfo aLayoutInfo; // stored user settings
568 // valid only from result calculation:
569 ::std::vector<sal_Int32> aGlobalOrder; // result of sorting by name or position
570 long nSortMeasure; // measure (index of data dimension) to sort by
571 long nAutoMeasure; // measure (index of data dimension) for AutoShow
572 bool bShowEmpty:1;
573 bool bEnableLayout:1; // enabled only for row fields, not for the innermost one
575 public:
576 ScDPLevel( ScDPSource* pSrc, long nD, long nH, long nL );
577 virtual ~ScDPLevel();
579 ScDPMembers* GetMembersObject();
581 // XNamed
582 virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
583 virtual void SAL_CALL setName( const OUString& aName )
584 throw(::com::sun::star::uno::RuntimeException);
586 // XMembersSupplier
587 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL
588 getMembers() throw(::com::sun::star::uno::RuntimeException);
590 // XDataPilotMemberResults
591 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::MemberResult > SAL_CALL
592 getResults() throw(::com::sun::star::uno::RuntimeException);
594 // XPropertySet
595 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
596 SAL_CALL getPropertySetInfo( )
597 throw(::com::sun::star::uno::RuntimeException);
598 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName,
599 const ::com::sun::star::uno::Any& aValue )
600 throw(::com::sun::star::beans::UnknownPropertyException,
601 ::com::sun::star::beans::PropertyVetoException,
602 ::com::sun::star::lang::IllegalArgumentException,
603 ::com::sun::star::lang::WrappedTargetException,
604 ::com::sun::star::uno::RuntimeException);
605 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
606 const OUString& PropertyName )
607 throw(::com::sun::star::beans::UnknownPropertyException,
608 ::com::sun::star::lang::WrappedTargetException,
609 ::com::sun::star::uno::RuntimeException);
610 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName,
611 const ::com::sun::star::uno::Reference<
612 ::com::sun::star::beans::XPropertyChangeListener >& xListener )
613 throw(::com::sun::star::beans::UnknownPropertyException,
614 ::com::sun::star::lang::WrappedTargetException,
615 ::com::sun::star::uno::RuntimeException);
616 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName,
617 const ::com::sun::star::uno::Reference<
618 ::com::sun::star::beans::XPropertyChangeListener >& aListener )
619 throw(::com::sun::star::beans::UnknownPropertyException,
620 ::com::sun::star::lang::WrappedTargetException,
621 ::com::sun::star::uno::RuntimeException);
622 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName,
623 const ::com::sun::star::uno::Reference<
624 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
625 throw(::com::sun::star::beans::UnknownPropertyException,
626 ::com::sun::star::lang::WrappedTargetException,
627 ::com::sun::star::uno::RuntimeException);
628 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName,
629 const ::com::sun::star::uno::Reference<
630 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
631 throw(::com::sun::star::beans::UnknownPropertyException,
632 ::com::sun::star::lang::WrappedTargetException,
633 ::com::sun::star::uno::RuntimeException);
635 // XServiceInfo
636 virtual OUString SAL_CALL getImplementationName( )
637 throw(::com::sun::star::uno::RuntimeException);
638 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
639 throw(::com::sun::star::uno::RuntimeException);
640 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
641 throw(::com::sun::star::uno::RuntimeException);
643 com::sun::star::uno::Sequence<com::sun::star::sheet::GeneralFunction> getSubTotals() const;
644 bool getShowEmpty() const;
646 const ::com::sun::star::sheet::DataPilotFieldSortInfo& GetSortInfo() const { return aSortInfo; }
647 const ::com::sun::star::sheet::DataPilotFieldAutoShowInfo& GetAutoShow() const { return aAutoShowInfo; }
649 void EvaluateSortOrder();
650 void SetEnableLayout(bool bSet);
652 const ::std::vector<sal_Int32>& GetGlobalOrder() const { return aGlobalOrder; }
653 ::std::vector<sal_Int32>& GetGlobalOrder() { return aGlobalOrder; }
654 long GetSortMeasure() const { return nSortMeasure; }
655 long GetAutoMeasure() const { return nAutoMeasure; }
657 bool IsOutlineLayout() const
659 return bEnableLayout &&
660 aLayoutInfo.LayoutMode !=
661 ::com::sun::star::sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT;
664 bool IsSubtotalsAtTop() const
666 return bEnableLayout &&
667 aLayoutInfo.LayoutMode ==
668 ::com::sun::star::sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP;
671 bool IsAddEmpty() const
673 return bEnableLayout && aLayoutInfo.AddEmptyLines;
676 //! number format (for data fields and date fields)
679 // hash map from name to index in the member array, for fast name access
680 typedef ::boost::unordered_map< OUString, sal_Int32, OUStringHash > ScDPMembersHashMap;
682 class ScDPMembers : public cppu::WeakImplHelper2<
683 com::sun::star::container::XNameAccess,
684 com::sun::star::lang::XServiceInfo >
686 private:
687 typedef std::vector<rtl::Reference<ScDPMember> > MembersType;
688 ScDPSource* pSource;
689 long nDim;
690 long nHier;
691 long nLev;
692 long nMbrCount;
693 mutable MembersType maMembers;
694 mutable ScDPMembersHashMap aHashMap;
696 public:
697 ScDPMembers( ScDPSource* pSrc, long nD, long nH, long nL );
698 virtual ~ScDPMembers();
700 // XNameAccess
701 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const OUString& aName )
702 throw(::com::sun::star::container::NoSuchElementException,
703 ::com::sun::star::lang::WrappedTargetException,
704 ::com::sun::star::uno::RuntimeException);
705 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getElementNames()
706 throw(::com::sun::star::uno::RuntimeException);
707 virtual sal_Bool SAL_CALL hasByName( const OUString& aName )
708 throw(::com::sun::star::uno::RuntimeException);
710 // XElementAccess
711 virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
712 throw(::com::sun::star::uno::RuntimeException);
713 virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
715 // XServiceInfo
716 virtual OUString SAL_CALL getImplementationName( )
717 throw(::com::sun::star::uno::RuntimeException);
718 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
719 throw(::com::sun::star::uno::RuntimeException);
720 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
721 throw(::com::sun::star::uno::RuntimeException);
723 long getCount() const;
724 ScDPMember* getByIndex(long nIndex) const;
726 long getMinMembers() const;
728 sal_Int32 GetIndexFromName( const OUString& rName ) const; // <0 if not found
729 const std::vector<sal_Int32>& GetGlobalOrder();
730 const ScDPItemData* GetSrcItemDataByIndex( SCROW nIndex);
731 SCROW GetSrcItemsCount();
734 class ScDPMember : boost::noncopyable, public cppu::WeakImplHelper3<
735 com::sun::star::container::XNamed,
736 com::sun::star::beans::XPropertySet,
737 com::sun::star::lang::XServiceInfo >
739 private:
740 ScDPSource* pSource;
741 long nDim;
742 long nHier;
743 long nLev;
745 SCROW mnDataId;
746 boost::scoped_ptr<OUString> mpLayoutName;
748 sal_Int32 nPosition; // manual sorting
749 bool bVisible;
750 bool bShowDet;
752 public:
753 ScDPMember(ScDPSource* pSrc, long nD, long nH, long nL, SCROW nIndex);
754 virtual ~ScDPMember();
756 OUString GetNameStr() const;
757 void FillItemData( ScDPItemData& rData ) const;
758 const ScDPItemData* GetItemData() const;
759 SCROW GetItemDataId() const { return mnDataId; }
760 bool IsNamedItem(SCROW nIndex) const;
762 SC_DLLPUBLIC const OUString* GetLayoutName() const;
763 long GetDim() const;
765 sal_Int32 Compare( const ScDPMember& rOther ) const; // visible order
767 // XNamed
768 virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
769 virtual void SAL_CALL setName( const OUString& aName )
770 throw(::com::sun::star::uno::RuntimeException);
772 // XPropertySet
773 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
774 SAL_CALL getPropertySetInfo( )
775 throw(::com::sun::star::uno::RuntimeException);
776 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName,
777 const ::com::sun::star::uno::Any& aValue )
778 throw(::com::sun::star::beans::UnknownPropertyException,
779 ::com::sun::star::beans::PropertyVetoException,
780 ::com::sun::star::lang::IllegalArgumentException,
781 ::com::sun::star::lang::WrappedTargetException,
782 ::com::sun::star::uno::RuntimeException);
783 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
784 const OUString& PropertyName )
785 throw(::com::sun::star::beans::UnknownPropertyException,
786 ::com::sun::star::lang::WrappedTargetException,
787 ::com::sun::star::uno::RuntimeException);
788 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName,
789 const ::com::sun::star::uno::Reference<
790 ::com::sun::star::beans::XPropertyChangeListener >& xListener )
791 throw(::com::sun::star::beans::UnknownPropertyException,
792 ::com::sun::star::lang::WrappedTargetException,
793 ::com::sun::star::uno::RuntimeException);
794 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName,
795 const ::com::sun::star::uno::Reference<
796 ::com::sun::star::beans::XPropertyChangeListener >& aListener )
797 throw(::com::sun::star::beans::UnknownPropertyException,
798 ::com::sun::star::lang::WrappedTargetException,
799 ::com::sun::star::uno::RuntimeException);
800 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName,
801 const ::com::sun::star::uno::Reference<
802 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
803 throw(::com::sun::star::beans::UnknownPropertyException,
804 ::com::sun::star::lang::WrappedTargetException,
805 ::com::sun::star::uno::RuntimeException);
806 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName,
807 const ::com::sun::star::uno::Reference<
808 ::com::sun::star::beans::XVetoableChangeListener >& aListener )
809 throw(::com::sun::star::beans::UnknownPropertyException,
810 ::com::sun::star::lang::WrappedTargetException,
811 ::com::sun::star::uno::RuntimeException);
813 // XServiceInfo
814 virtual OUString SAL_CALL getImplementationName( )
815 throw(::com::sun::star::uno::RuntimeException);
816 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
817 throw(::com::sun::star::uno::RuntimeException);
818 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
819 throw(::com::sun::star::uno::RuntimeException);
821 bool isVisible() const;
822 bool getShowDetails() const;
826 #endif
828 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */