1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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>
61 namespace com
{ namespace sun
{ namespace star
{
63 struct DataPilotFieldFilter
;
70 class ScDPResultMember
;
76 // implementation of DataPilotSource using ScDPTableData
82 class ScDPHierarchies
;
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
>
99 ScDPTableData
* pData
; // data source (ScDPObject manages its life time)
100 ScDPDimensions
* pDimensions
; // api objects
103 std::vector
<long> maColDims
;
104 std::vector
<long> maRowDims
;
105 std::vector
<long> maDataDims
;
106 std::vector
<long> maPageDims
;
107 ScDPResultTree maResFilterSet
;
111 bool bIgnoreEmptyRows
;
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
146 void FilterCacheByPageDimensions();
148 void SetDupCount( long nNew
);
150 OUString
getDataDescription(); //! ???
152 void setIgnoreEmptyRows(bool bSet
);
153 void setRepeatIfEmpty(bool bSet
);
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
);
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
206 const com::sun::star::uno::Sequence
<com::sun::star::sheet::DataPilotFieldFilter
>& aFilters
)
207 throw (com::sun::star::uno::RuntimeException
);
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
);
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
);
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;
278 class ScDPDimensions
: public cppu::WeakImplHelper2
<
279 com::sun::star::container::XNameAccess
,
280 com::sun::star::lang::XServiceInfo
>
285 ScDPDimension
** ppDims
;
288 ScDPDimensions( ScDPSource
* pSrc
);
289 virtual ~ScDPDimensions();
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
);
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
);
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
>
328 long nDim
; // dimension index (== column ID)
329 ScDPHierarchies
* pHierarchies
;
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
;
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;
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
);
366 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::util::XCloneable
> SAL_CALL
367 createClone() throw(::com::sun::star::uno::RuntimeException
);
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
);
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
>
441 ScDPHierarchy
** ppHiers
;
444 ScDPHierarchies( ScDPSource
* pSrc
, long nD
);
445 virtual ~ScDPHierarchies();
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
);
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
);
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
>
486 ScDPHierarchy( ScDPSource
* pSrc
, long nD
, long nH
);
487 virtual ~ScDPHierarchy();
489 ScDPLevels
* GetLevelsObject();
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
);
497 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameAccess
> SAL_CALL
498 getLevels() throw(::com::sun::star::uno::RuntimeException
);
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
>
521 ScDPLevels( ScDPSource
* pSrc
, long nD
, long nH
);
522 virtual ~ScDPLevels();
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
);
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
);
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
>
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
573 bool bEnableLayout
:1; // enabled only for row fields, not for the innermost one
576 ScDPLevel( ScDPSource
* pSrc
, long nD
, long nH
, long nL
);
577 virtual ~ScDPLevel();
579 ScDPMembers
* GetMembersObject();
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
);
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
);
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
);
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
>
687 typedef std::vector
<rtl::Reference
<ScDPMember
> > MembersType
;
693 mutable MembersType maMembers
;
694 mutable ScDPMembersHashMap aHashMap
;
697 ScDPMembers( ScDPSource
* pSrc
, long nD
, long nH
, long nL
);
698 virtual ~ScDPMembers();
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
);
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
);
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
>
746 boost::scoped_ptr
<OUString
> mpLayoutName
;
748 sal_Int32 nPosition
; // manual sorting
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;
765 sal_Int32
Compare( const ScDPMember
& rOther
) const; // visible order
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
);
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
);
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;
828 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */