xref: /trunk/main/sc/inc/dapiuno.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef SC_DAPIUNO_HXX
29 #define SC_DAPIUNO_HXX
30 
31 #include "global.hxx"
32 #include "dpobject.hxx"
33 #include "rangeutl.hxx"     // ScArea
34 #include "cellsuno.hxx"     // for XModifyListenerArr_Impl
35 
36 #include <svl/lstner.hxx>
37 #include <svl/itemprop.hxx>
38 
39 #include <com/sun/star/lang/XServiceInfo.hpp>
40 #include <com/sun/star/lang/XUnoTunnel.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/container/XEnumerationAccess.hpp>
43 #include <com/sun/star/container/XNameContainer.hpp>
44 #include <com/sun/star/util/XModifyBroadcaster.hpp>
45 
46 #include <com/sun/star/sheet/DataPilotFieldAutoShowInfo.hpp>
47 #include <com/sun/star/sheet/DataPilotFieldGroupInfo.hpp>
48 #include <com/sun/star/sheet/DataPilotFieldLayoutInfo.hpp>
49 #include <com/sun/star/sheet/DataPilotFieldOrientation.hpp>
50 #include <com/sun/star/sheet/DataPilotFieldReference.hpp>
51 #include <com/sun/star/sheet/DataPilotFieldSortInfo.hpp>
52 #include <com/sun/star/sheet/GeneralFunction.hpp>
53 #include <com/sun/star/sheet/XDataPilotDataLayoutFieldSupplier.hpp>
54 #include <com/sun/star/sheet/XDataPilotDescriptor.hpp>
55 #include <com/sun/star/sheet/XDataPilotField.hpp>
56 #include <com/sun/star/sheet/XDataPilotFieldGrouping.hpp>
57 #include <com/sun/star/sheet/XDataPilotTable.hpp>
58 #include <com/sun/star/sheet/XDataPilotTable2.hpp>
59 #include <com/sun/star/sheet/XDataPilotTables.hpp>
60 
61 #include <cppuhelper/implbase2.hxx>
62 #include <cppuhelper/implbase3.hxx>
63 #include <cppuhelper/implbase4.hxx>
64 #include <cppuhelper/implbase5.hxx>
65 
66 #include <memory>
67 #include <vector>
68 
69 namespace com { namespace sun { namespace star { namespace sheet {
70     struct DataPilotFieldFilter;
71     struct DataPilotTablePositionData;
72 }}}}
73 
74 class ScDocShell;
75 class ScDPSaveDimension;
76 class ScDPSaveGroupDimension;
77 class ScDPSaveNumGroupDimension;
78 struct ScDPNumGroupInfo;
79 
80 class ScDataPilotTableObj;
81 class ScDataPilotFieldObj;
82 class ScDataPilotItemObj;
83 
84 
85 class ScDataPilotConversion
86 {
87 public:
88     static com::sun::star::sheet::GeneralFunction   FirstFunc( sal_uInt16 nBits );
89     static sal_uInt16           FunctionBit( com::sun::star::sheet::GeneralFunction eFunc );
90 
91     static void         FillGroupInfo(
92                             ::com::sun::star::sheet::DataPilotFieldGroupInfo& rInfo,
93                             const ScDPNumGroupInfo& rGroupInfo );
94 };
95 
96 // ============================================================================
97 
98 /** DataPilotTables collection per sheet. */
99 class ScDataPilotTablesObj : public cppu::WeakImplHelper4<
100                                         com::sun::star::sheet::XDataPilotTables,
101                                         com::sun::star::container::XEnumerationAccess,
102                                         com::sun::star::container::XIndexAccess,
103                                         com::sun::star::lang::XServiceInfo>,
104                                     public SfxListener
105 {
106 private:
107     ScDocShell*             pDocShell;
108     SCTAB                   nTab;
109 
110     ScDataPilotTableObj*    GetObjectByIndex_Impl( sal_Int32 nIndex );
111     ScDataPilotTableObj*    GetObjectByName_Impl(const ::rtl::OUString& aName);
112 
113 public:
114                             ScDataPilotTablesObj(ScDocShell* pDocSh, SCTAB nT);
115     virtual                 ~ScDataPilotTablesObj();
116 
117     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
118 
119                             // XDataPilotTables
120     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotDescriptor > SAL_CALL
121                             createDataPilotDescriptor() throw(::com::sun::star::uno::RuntimeException);
122     virtual void SAL_CALL   insertNewByName( const ::rtl::OUString& aName,
123                                     const ::com::sun::star::table::CellAddress& aOutputAddress,
124                                     const ::com::sun::star::uno::Reference<
125                                         ::com::sun::star::sheet::XDataPilotDescriptor >& xDescriptor )
126                                     throw(::com::sun::star::uno::RuntimeException);
127     virtual void SAL_CALL   removeByName( const ::rtl::OUString& aName )
128                                     throw(::com::sun::star::uno::RuntimeException);
129 
130                             // XNameAccess
131     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
132                                 throw(::com::sun::star::container::NoSuchElementException,
133                                     ::com::sun::star::lang::WrappedTargetException,
134                                     ::com::sun::star::uno::RuntimeException);
135     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
136                                 throw(::com::sun::star::uno::RuntimeException);
137     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
138                                 throw(::com::sun::star::uno::RuntimeException);
139 
140                             // XIndexAccess
141     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
142     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
143                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
144                                     ::com::sun::star::lang::WrappedTargetException,
145                                     ::com::sun::star::uno::RuntimeException);
146 
147                             // XEnumerationAccess
148     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
149                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
150 
151                             // XElementAccess
152     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
153                                 throw(::com::sun::star::uno::RuntimeException);
154     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
155 
156                             // XServiceInfo
157     virtual ::rtl::OUString SAL_CALL getImplementationName()
158                                 throw(::com::sun::star::uno::RuntimeException);
159     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
160                                 throw(::com::sun::star::uno::RuntimeException);
161     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
162                                 throw(::com::sun::star::uno::RuntimeException);
163 };
164 
165 // ============================================================================
166 
167 //  ScDataPilotDescriptorBase is never instantiated directly
168 class ScDataPilotDescriptorBase : public com::sun::star::sheet::XDataPilotDescriptor,
169                                   public com::sun::star::beans::XPropertySet,
170                                   public com::sun::star::sheet::XDataPilotDataLayoutFieldSupplier,
171                                   public com::sun::star::lang::XServiceInfo,
172                                   public com::sun::star::lang::XUnoTunnel,
173                                   public com::sun::star::lang::XTypeProvider,
174                                   public cppu::OWeakObject,
175                                   public SfxListener
176 {
177 private:
178     SfxItemPropertySet  maPropSet;
179     ScDocShell*         pDocShell;
180 
181 public:
182                             ScDataPilotDescriptorBase(ScDocShell* pDocSh);
183     virtual                 ~ScDataPilotDescriptorBase();
184 
185     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
186                                 const ::com::sun::star::uno::Type & rType )
187                                     throw(::com::sun::star::uno::RuntimeException);
188     virtual void SAL_CALL   acquire() throw();
189     virtual void SAL_CALL   release() throw();
190 
191     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
192 
193     ScDocShell*             GetDocShell() const     { return pDocShell; }
194 
195                             // in den Ableitungen:
196     virtual ScDPObject* GetDPObject() const = 0;
197     virtual void SetDPObject(ScDPObject* pDPObj) = 0;
198 
199                             // XDataPilotDescriptor
200                             //  getName, setName, getTag, setTag in derived classes
201 
202     virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getSourceRange()
203                                 throw(::com::sun::star::uno::RuntimeException);
204     virtual void SAL_CALL setSourceRange( const ::com::sun::star::table::CellRangeAddress& aSourceRange )
205                                 throw(::com::sun::star::uno::RuntimeException);
206     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetFilterDescriptor > SAL_CALL
207                             getFilterDescriptor() throw(::com::sun::star::uno::RuntimeException);
208     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
209                             getDataPilotFields() throw(::com::sun::star::uno::RuntimeException);
210     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
211                             getColumnFields() throw(::com::sun::star::uno::RuntimeException);
212     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
213                             getRowFields() throw(::com::sun::star::uno::RuntimeException);
214     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
215                             getPageFields() throw(::com::sun::star::uno::RuntimeException);
216     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
217                             getDataFields() throw(::com::sun::star::uno::RuntimeException);
218     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
219                             getHiddenFields() throw(::com::sun::star::uno::RuntimeException);
220 
221                             // XPropertySet
222     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
223                             SAL_CALL getPropertySetInfo(  )
224                                 throw(::com::sun::star::uno::RuntimeException);
225     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
226                                     const ::com::sun::star::uno::Any& aValue )
227                                 throw(::com::sun::star::beans::UnknownPropertyException,
228                                     ::com::sun::star::beans::PropertyVetoException,
229                                     ::com::sun::star::lang::IllegalArgumentException,
230                                     ::com::sun::star::lang::WrappedTargetException,
231                                     ::com::sun::star::uno::RuntimeException);
232     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
233                                     const ::rtl::OUString& PropertyName )
234                                 throw(::com::sun::star::beans::UnknownPropertyException,
235                                     ::com::sun::star::lang::WrappedTargetException,
236                                     ::com::sun::star::uno::RuntimeException);
237     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
238                                     const ::com::sun::star::uno::Reference<
239                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener )
240                                 throw(::com::sun::star::beans::UnknownPropertyException,
241                                     ::com::sun::star::lang::WrappedTargetException,
242                                     ::com::sun::star::uno::RuntimeException);
243     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
244                                     const ::com::sun::star::uno::Reference<
245                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener )
246                                 throw(::com::sun::star::beans::UnknownPropertyException,
247                                     ::com::sun::star::lang::WrappedTargetException,
248                                     ::com::sun::star::uno::RuntimeException);
249     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
250                                     const ::com::sun::star::uno::Reference<
251                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
252                                 throw(::com::sun::star::beans::UnknownPropertyException,
253                                     ::com::sun::star::lang::WrappedTargetException,
254                                     ::com::sun::star::uno::RuntimeException);
255     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
256                                     const ::com::sun::star::uno::Reference<
257                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
258                                 throw(::com::sun::star::beans::UnknownPropertyException,
259                                     ::com::sun::star::lang::WrappedTargetException,
260                                     ::com::sun::star::uno::RuntimeException);
261 
262                             // XDataPilotDataLayoutFieldSupplier
263     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotField >
264                             SAL_CALL getDataLayoutField()
265                                 throw(::com::sun::star::uno::RuntimeException);
266 
267                             // XUnoTunnel
268     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<
269                                     sal_Int8 >& aIdentifier )
270                                 throw(::com::sun::star::uno::RuntimeException);
271 
272     static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
273     static ScDataPilotDescriptorBase* getImplementation( const com::sun::star::uno::Reference<
274                                     com::sun::star::sheet::XDataPilotDescriptor> xObj );
275 
276                             // XTypeProvider (overloaded in ScDataPilotTableObj)
277     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
278                                 throw(::com::sun::star::uno::RuntimeException);
279     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
280                                 throw(::com::sun::star::uno::RuntimeException);
281 
282                             // XServiceInfo is in derived classes
283 };
284 
285 // ============================================================================
286 
287 class ScDataPilotDescriptor : public ScDataPilotDescriptorBase
288 {
289 private:
290     ScDPObject*             mpDPObject;
291 
292 public:
293                             ScDataPilotDescriptor(ScDocShell* pDocSh);
294     virtual                 ~ScDataPilotDescriptor();
295 
296     virtual ScDPObject* GetDPObject() const;
297     virtual void SetDPObject(ScDPObject* pDPObj);
298 
299                             // rest of XDataPilotDescriptor (incl. XNamed)
300     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
301     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
302                                 throw(::com::sun::star::uno::RuntimeException);
303     virtual ::rtl::OUString SAL_CALL getTag() throw(::com::sun::star::uno::RuntimeException);
304     virtual void SAL_CALL   setTag( const ::rtl::OUString& aTag )
305                                 throw(::com::sun::star::uno::RuntimeException);
306 
307                             // XServiceInfo
308     virtual ::rtl::OUString SAL_CALL getImplementationName()
309                                 throw(::com::sun::star::uno::RuntimeException);
310     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
311                                 throw(::com::sun::star::uno::RuntimeException);
312     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
313                                 throw(::com::sun::star::uno::RuntimeException);
314 };
315 
316 // ============================================================================
317 
318 class ScDataPilotTableObj : public ScDataPilotDescriptorBase,
319                             public com::sun::star::sheet::XDataPilotTable2,
320                             public com::sun::star::util::XModifyBroadcaster
321 {
322 private:
323     SCTAB                   nTab;
324     String                  aName;
325     XModifyListenerArr_Impl aModifyListeners;
326 
327     void                    Refreshed_Impl();
328 
329 public:
330                             ScDataPilotTableObj(ScDocShell* pDocSh, SCTAB nT, const String& rN);
331     virtual                 ~ScDataPilotTableObj();
332 
333     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
334                                 const ::com::sun::star::uno::Type & rType )
335                                     throw(::com::sun::star::uno::RuntimeException);
336     virtual void SAL_CALL   acquire() throw();
337     virtual void SAL_CALL   release() throw();
338 
339     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
340 
341     virtual ScDPObject* GetDPObject() const;
342     virtual void SetDPObject(ScDPObject* pDPObj);
343 
344                             // rest of XDataPilotDescriptor (incl. XNamed)
345     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
346     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
347                                 throw(::com::sun::star::uno::RuntimeException);
348     virtual ::rtl::OUString SAL_CALL getTag() throw(::com::sun::star::uno::RuntimeException);
349     virtual void SAL_CALL   setTag( const ::rtl::OUString& aTag )
350                                 throw(::com::sun::star::uno::RuntimeException);
351 
352                             // XDataPilotTable
353     virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getOutputRange()
354                                 throw(::com::sun::star::uno::RuntimeException);
355     virtual void SAL_CALL   refresh() throw(::com::sun::star::uno::RuntimeException);
356 
357                             // XDataPilotTable2
358     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > >
359         SAL_CALL getDrillDownData(const ::com::sun::star::table::CellAddress& aAddr)
360                                 throw(::com::sun::star::uno::RuntimeException);
361 
362     virtual ::com::sun::star::sheet::DataPilotTablePositionData
363         SAL_CALL getPositionData(const ::com::sun::star::table::CellAddress& aAddr)
364                                 throw(::com::sun::star::uno::RuntimeException);
365 
366     virtual void SAL_CALL insertDrillDownSheet(const ::com::sun::star::table::CellAddress& aAddr)
367                                 throw(::com::sun::star::uno::RuntimeException);
368 
369     virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getOutputRangeByType( sal_Int32 nType )
370                                 throw(::com::sun::star::lang::IllegalArgumentException,
371                                       ::com::sun::star::uno::RuntimeException);
372 
373                             // XModifyBroadcaster
374     virtual void SAL_CALL   addModifyListener( const ::com::sun::star::uno::Reference<
375                                                 ::com::sun::star::util::XModifyListener >& aListener )
376                                 throw (::com::sun::star::uno::RuntimeException);
377     virtual void SAL_CALL   removeModifyListener( const ::com::sun::star::uno::Reference<
378                                                 ::com::sun::star::util::XModifyListener >& aListener )
379                                 throw (::com::sun::star::uno::RuntimeException);
380 
381                             // XTypeProvider (overloaded)
382     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
383                                 throw(::com::sun::star::uno::RuntimeException);
384     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
385                                 throw(::com::sun::star::uno::RuntimeException);
386 
387                             // XServiceInfo
388     virtual ::rtl::OUString SAL_CALL getImplementationName()
389                                 throw(::com::sun::star::uno::RuntimeException);
390     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
391                                 throw(::com::sun::star::uno::RuntimeException);
392     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
393                                 throw(::com::sun::star::uno::RuntimeException);
394 };
395 
396 // ============================================================================
397 
398 struct ScFieldIdentifier
399 {
400     ::rtl::OUString     maFieldName;    /// Source field name.
401     sal_Int32           mnFieldIdx;     /// Field index (if several fields with same name exist).
402     bool                mbDataLayout;   /// True = data layout field collecting all data fields as items.
403 
404     inline explicit     ScFieldIdentifier() :
405                             mnFieldIdx( 0 ), mbDataLayout( false ) {}
406 
407     inline explicit     ScFieldIdentifier( const ::rtl::OUString& rFieldName, sal_Int32 nFieldIdx, bool bDataLayout ) :
408                             maFieldName( rFieldName ), mnFieldIdx( nFieldIdx ), mbDataLayout( bDataLayout ) {}
409 };
410 
411 // ============================================================================
412 
413 /** Base class of all implementation objects based on a DataPilot descriptor
414     or DataPilot table object. Wraps acquiring and releasing the parent. */
415 class ScDataPilotChildObjBase
416 {
417 protected:
418     explicit            ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent );
419     explicit            ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId );
420     virtual             ~ScDataPilotChildObjBase();
421 
422     /** Returns the wrapped DataPilot object (calls GetDPObject() at parent). */
423     ScDPObject*         GetDPObject() const;
424     /** Sets the passed DataPilot object (calls SetDPObject() at parent). */
425     void                SetDPObject( ScDPObject* pDPObject );
426 
427     /** Returns the DataPilot dimension object related to the field described by maFieldId. */
428     ScDPSaveDimension*  GetDPDimension( ScDPObject** ppDPObject = 0 ) const;
429 
430     /** Returns the number of members for the field described by maFieldId. */
431     sal_Int32           GetMemberCount() const;
432     /** Returns the collection of members for the field described by maFieldId. */
433     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >
434                         GetMembers() const;
435 
436 protected:
437     ScDataPilotDescriptorBase& mrParent;
438     ScFieldIdentifier   maFieldId;
439 
440 private:
441     ScDataPilotChildObjBase& operator=( const ScDataPilotChildObjBase& );
442 };
443 
444 // ============================================================================
445 
446 typedef ::cppu::WeakImplHelper4
447 <
448     ::com::sun::star::container::XEnumerationAccess,
449     ::com::sun::star::container::XIndexAccess,
450     ::com::sun::star::container::XNameAccess,
451     ::com::sun::star::lang::XServiceInfo
452 >
453 ScDataPilotFieldsObjImpl;
454 
455 /** Collection of all DataPilot fields, or of all fields from a specific dimension. */
456 class ScDataPilotFieldsObj : public ScDataPilotChildObjBase, public ScDataPilotFieldsObjImpl
457 {
458 public:
459     explicit            ScDataPilotFieldsObj(
460                             ScDataPilotDescriptorBase& rParent );
461 
462     explicit            ScDataPilotFieldsObj(
463                             ScDataPilotDescriptorBase& rParent,
464                             ::com::sun::star::sheet::DataPilotFieldOrientation eOrient );
465 
466     virtual             ~ScDataPilotFieldsObj();
467 
468                             // XNameAccess
469     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
470                                 throw(::com::sun::star::container::NoSuchElementException,
471                                     ::com::sun::star::lang::WrappedTargetException,
472                                     ::com::sun::star::uno::RuntimeException);
473     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
474                                 throw(::com::sun::star::uno::RuntimeException);
475     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
476                                 throw(::com::sun::star::uno::RuntimeException);
477 
478                             // XIndexAccess
479     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
480     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
481                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
482                                     ::com::sun::star::lang::WrappedTargetException,
483                                     ::com::sun::star::uno::RuntimeException);
484 
485                             // XEnumerationAccess
486     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
487                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
488 
489                             // XElementAccess
490     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
491                                 throw(::com::sun::star::uno::RuntimeException);
492     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
493 
494                             // XServiceInfo
495     virtual ::rtl::OUString SAL_CALL getImplementationName()
496                                 throw(::com::sun::star::uno::RuntimeException);
497     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
498                                 throw(::com::sun::star::uno::RuntimeException);
499     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
500                                 throw(::com::sun::star::uno::RuntimeException);
501 
502 private:
503     ScDataPilotFieldObj*    GetObjectByIndex_Impl( sal_Int32 nIndex ) const;
504     ScDataPilotFieldObj*    GetObjectByName_Impl( const ::rtl::OUString& rName ) const;
505 
506 private:
507     ::com::sun::star::uno::Any maOrient;    /// Field orientation, no value = all fields.
508 };
509 
510 // ============================================================================
511 
512 typedef ::cppu::WeakImplHelper5
513 <
514     ::com::sun::star::container::XNamed,
515     ::com::sun::star::beans::XPropertySet,
516     ::com::sun::star::sheet::XDataPilotField,
517     ::com::sun::star::sheet::XDataPilotFieldGrouping,
518     ::com::sun::star::lang::XServiceInfo
519 >
520 ScDataPilotFieldObjImpl;
521 
522 /** Implementation of a single DataPilot field. */
523 class ScDataPilotFieldObj : public ScDataPilotChildObjBase, public ScDataPilotFieldObjImpl
524 {
525 public:
526                         ScDataPilotFieldObj(
527                             ScDataPilotDescriptorBase& rParent,
528                             const ScFieldIdentifier& rIdent );
529 
530                         ScDataPilotFieldObj(
531                             ScDataPilotDescriptorBase& rParent,
532                             const ScFieldIdentifier& rIdent,
533                             const ::com::sun::star::uno::Any& rOrient );
534 
535     virtual             ~ScDataPilotFieldObj();
536 
537                             // XNamed
538     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
539     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
540                                 throw(::com::sun::star::uno::RuntimeException);
541 
542                             // XPropertySet
543     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
544                             SAL_CALL getPropertySetInfo(  )
545                                 throw(::com::sun::star::uno::RuntimeException);
546     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
547                                     const ::com::sun::star::uno::Any& aValue )
548                                 throw(::com::sun::star::beans::UnknownPropertyException,
549                                     ::com::sun::star::beans::PropertyVetoException,
550                                     ::com::sun::star::lang::IllegalArgumentException,
551                                     ::com::sun::star::lang::WrappedTargetException,
552                                     ::com::sun::star::uno::RuntimeException);
553     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
554                                     const ::rtl::OUString& PropertyName )
555                                 throw(::com::sun::star::beans::UnknownPropertyException,
556                                     ::com::sun::star::lang::WrappedTargetException,
557                                     ::com::sun::star::uno::RuntimeException);
558     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
559                                     const ::com::sun::star::uno::Reference<
560                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener )
561                                 throw(::com::sun::star::beans::UnknownPropertyException,
562                                     ::com::sun::star::lang::WrappedTargetException,
563                                     ::com::sun::star::uno::RuntimeException);
564     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
565                                     const ::com::sun::star::uno::Reference<
566                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener )
567                                 throw(::com::sun::star::beans::UnknownPropertyException,
568                                     ::com::sun::star::lang::WrappedTargetException,
569                                     ::com::sun::star::uno::RuntimeException);
570     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
571                                     const ::com::sun::star::uno::Reference<
572                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
573                                 throw(::com::sun::star::beans::UnknownPropertyException,
574                                     ::com::sun::star::lang::WrappedTargetException,
575                                     ::com::sun::star::uno::RuntimeException);
576     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
577                                     const ::com::sun::star::uno::Reference<
578                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
579                                 throw(::com::sun::star::beans::UnknownPropertyException,
580                                     ::com::sun::star::lang::WrappedTargetException,
581                                     ::com::sun::star::uno::RuntimeException);
582 
583                             // XDatePilotField
584     virtual com::sun::star::uno::Reference<com::sun::star::container::XIndexAccess> SAL_CALL
585                                 getItems() throw (::com::sun::star::uno::RuntimeException);
586 
587                             // nur noch aus Property-Funktionen gerufen:
588     com::sun::star::sheet::DataPilotFieldOrientation getOrientation(void) const;
589     void setOrientation(com::sun::star::sheet::DataPilotFieldOrientation Orientation);
590     com::sun::star::sheet::GeneralFunction getFunction(void) const;
591     void setFunction(com::sun::star::sheet::GeneralFunction Function);
592     com::sun::star::uno::Sequence< com::sun::star::sheet::GeneralFunction > getSubtotals() const;
593     void setSubtotals(const com::sun::star::uno::Sequence< com::sun::star::sheet::GeneralFunction >& rFunctions);
594     rtl::OUString getCurrentPage() const;
595     void setCurrentPage(const rtl::OUString& sPage);
596     sal_Bool getUseCurrentPage() const;
597     void setUseCurrentPage(sal_Bool bUse);
598     const com::sun::star::sheet::DataPilotFieldAutoShowInfo* getAutoShowInfo();
599     void setAutoShowInfo(const com::sun::star::sheet::DataPilotFieldAutoShowInfo* pInfo);
600     const com::sun::star::sheet::DataPilotFieldLayoutInfo* getLayoutInfo();
601     void setLayoutInfo(const com::sun::star::sheet::DataPilotFieldLayoutInfo* pInfo);
602     const com::sun::star::sheet::DataPilotFieldReference* getReference();
603     void setReference(const com::sun::star::sheet::DataPilotFieldReference* pInfo);
604     const com::sun::star::sheet::DataPilotFieldSortInfo* getSortInfo();
605     void setSortInfo(const com::sun::star::sheet::DataPilotFieldSortInfo* pInfo);
606     sal_Bool getShowEmpty() const;
607     void setShowEmpty(sal_Bool bShow);
608 
609     sal_Bool hasGroupInfo();
610     com::sun::star::sheet::DataPilotFieldGroupInfo getGroupInfo();
611     void setGroupInfo(const com::sun::star::sheet::DataPilotFieldGroupInfo* pInfo);
612 
613                             // XDataPilotFieldGrouping
614     sal_Bool HasString(const com::sun::star::uno::Sequence< ::rtl::OUString >& aItems, const ::rtl::OUString& aString);
615     virtual com::sun::star::uno::Reference < com::sun::star::sheet::XDataPilotField > SAL_CALL
616         createNameGroup(const com::sun::star::uno::Sequence< ::rtl::OUString >& aItems)
617              throw (::com::sun::star::uno::RuntimeException,
618                     ::com::sun::star::lang::IllegalArgumentException);
619     virtual com::sun::star::uno::Reference < com::sun::star::sheet::XDataPilotField > SAL_CALL
620         createDateGroup(const com::sun::star::sheet::DataPilotFieldGroupInfo& rInfo)
621              throw (::com::sun::star::uno::RuntimeException,
622                     ::com::sun::star::lang::IllegalArgumentException);
623 
624                             // XServiceInfo
625     virtual ::rtl::OUString SAL_CALL getImplementationName()
626                                 throw(::com::sun::star::uno::RuntimeException);
627     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
628                                 throw(::com::sun::star::uno::RuntimeException);
629     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
630                                 throw(::com::sun::star::uno::RuntimeException);
631 
632 private:
633     ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >
634                         mxItems;
635     SfxItemPropertySet  maPropSet;
636     ::com::sun::star::uno::Any maOrient;
637 };
638 
639 // ============================================================================
640 
641 typedef ::std::vector< ::rtl::OUString > ScFieldGroupMembers;
642 
643 struct ScFieldGroup
644 {
645     ::rtl::OUString     maName;
646     ScFieldGroupMembers maMembers;
647 };
648 
649 typedef ::std::vector< ScFieldGroup > ScFieldGroups;
650 
651 // ============================================================================
652 
653 typedef ::cppu::WeakImplHelper4
654 <
655     ::com::sun::star::container::XNameContainer,
656     ::com::sun::star::container::XEnumerationAccess,
657     ::com::sun::star::container::XIndexAccess,
658     ::com::sun::star::lang::XServiceInfo
659 >
660 ScDataPilotFieldGroupsObjImpl;
661 
662 /** Implementation of all grouped items in a DataPilot field.
663 
664     This is a stand-alone object without any connection to the base DataPilot
665     field. Grouping info has to be written back with the GroupInfo property of
666     the DataPilot field after modifying this object.
667  */
668 class ScDataPilotFieldGroupsObj : public ScDataPilotFieldGroupsObjImpl
669 {
670 public:
671     explicit            ScDataPilotFieldGroupsObj( const ScFieldGroups& rGroups );
672     virtual             ~ScDataPilotFieldGroupsObj();
673 
674                             // XNameAccess
675     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
676                                 throw(::com::sun::star::container::NoSuchElementException,
677                                     ::com::sun::star::lang::WrappedTargetException,
678                                     ::com::sun::star::uno::RuntimeException);
679     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
680                                 throw(::com::sun::star::uno::RuntimeException);
681     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
682                                 throw(::com::sun::star::uno::RuntimeException);
683 
684                                 // XNameReplace
685     virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName,
686                                 const ::com::sun::star::uno::Any& aElement )
687                                 throw (::com::sun::star::lang::IllegalArgumentException,
688                                     ::com::sun::star::container::NoSuchElementException,
689                                     ::com::sun::star::lang::WrappedTargetException,
690                                     ::com::sun::star::uno::RuntimeException);
691 
692                             // XNameContainer
693     virtual void SAL_CALL insertByName( const ::rtl::OUString& aName,
694                                 const ::com::sun::star::uno::Any& aElement )
695                                 throw (::com::sun::star::lang::IllegalArgumentException,
696                                     ::com::sun::star::container::ElementExistException,
697                                     ::com::sun::star::lang::WrappedTargetException,
698                                     ::com::sun::star::uno::RuntimeException);
699     virtual void SAL_CALL removeByName( const ::rtl::OUString& Name )
700                                 throw (::com::sun::star::container::NoSuchElementException,
701                                     ::com::sun::star::lang::WrappedTargetException,
702                                     ::com::sun::star::uno::RuntimeException);
703 
704                         // XIndexAccess
705     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
706     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
707                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
708                                     ::com::sun::star::lang::WrappedTargetException,
709                                     ::com::sun::star::uno::RuntimeException);
710 
711                             // XEnumerationAccess
712     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
713                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
714 
715                             // XElementAccess
716     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
717                                 throw(::com::sun::star::uno::RuntimeException);
718     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
719 
720                             // XServiceInfo
721     virtual ::rtl::OUString SAL_CALL getImplementationName()
722                                 throw(::com::sun::star::uno::RuntimeException);
723     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
724                                 throw(::com::sun::star::uno::RuntimeException);
725     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
726                                 throw(::com::sun::star::uno::RuntimeException);
727 
728     // implementation
729     ScFieldGroup&       getFieldGroup( const ::rtl::OUString& rName ) throw(::com::sun::star::uno::RuntimeException);
730     void                renameFieldGroup( const ::rtl::OUString& rOldName, const ::rtl::OUString& rNewName ) throw(::com::sun::star::uno::RuntimeException);
731 
732 private:
733     ScFieldGroups::iterator implFindByName( const ::rtl::OUString& rName );
734 
735 private:
736     ScFieldGroups       maGroups;
737 };
738 
739 // ============================================================================
740 
741 typedef ::cppu::WeakImplHelper5
742 <
743     ::com::sun::star::container::XNameContainer,
744     ::com::sun::star::container::XEnumerationAccess,
745     ::com::sun::star::container::XIndexAccess,
746     ::com::sun::star::container::XNamed,
747     ::com::sun::star::lang::XServiceInfo
748 >
749 ScDataPilotFieldGroupObjImpl;
750 
751 class ScDataPilotFieldGroupObj : public ScDataPilotFieldGroupObjImpl
752 {
753 public:
754     explicit            ScDataPilotFieldGroupObj( ScDataPilotFieldGroupsObj& rParent, const ::rtl::OUString& rGroupName );
755     virtual             ~ScDataPilotFieldGroupObj();
756 
757                             // XNameAccess
758     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
759                                 throw(::com::sun::star::container::NoSuchElementException,
760                                     ::com::sun::star::lang::WrappedTargetException,
761                                     ::com::sun::star::uno::RuntimeException);
762     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
763                                 throw(::com::sun::star::uno::RuntimeException);
764     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
765                                 throw(::com::sun::star::uno::RuntimeException);
766 
767                                 // XNameReplace
768     virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName,
769                                 const ::com::sun::star::uno::Any& aElement )
770                                 throw (::com::sun::star::lang::IllegalArgumentException,
771                                     ::com::sun::star::container::NoSuchElementException,
772                                     ::com::sun::star::lang::WrappedTargetException,
773                                     ::com::sun::star::uno::RuntimeException);
774 
775                                 // XNameContainer
776     virtual void SAL_CALL insertByName( const ::rtl::OUString& aName,
777                                 const ::com::sun::star::uno::Any& aElement )
778                                 throw (::com::sun::star::lang::IllegalArgumentException,
779                                     ::com::sun::star::container::ElementExistException,
780                                     ::com::sun::star::lang::WrappedTargetException,
781                                     ::com::sun::star::uno::RuntimeException);
782     virtual void SAL_CALL removeByName( const ::rtl::OUString& Name )
783                                 throw (::com::sun::star::container::NoSuchElementException,
784                                     ::com::sun::star::lang::WrappedTargetException,
785                                     ::com::sun::star::uno::RuntimeException);
786 
787                     // XIndexAccess
788     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
789     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
790                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
791                                     ::com::sun::star::lang::WrappedTargetException,
792                                     ::com::sun::star::uno::RuntimeException);
793 
794                             // XEnumerationAccess
795     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
796                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
797 
798                             // XElementAccess
799     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
800                                 throw(::com::sun::star::uno::RuntimeException);
801     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
802 
803                             // XNamed
804     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
805     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
806                                 throw(::com::sun::star::uno::RuntimeException);
807 
808                             // XServiceInfo
809     virtual ::rtl::OUString SAL_CALL getImplementationName()
810                                 throw(::com::sun::star::uno::RuntimeException);
811     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
812                                 throw(::com::sun::star::uno::RuntimeException);
813     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
814                                 throw(::com::sun::star::uno::RuntimeException);
815 
816 private:
817     ScDataPilotFieldGroupsObj& mrParent;
818     ::rtl::OUString     maGroupName;
819 };
820 
821 // ============================================================================
822 
823 typedef ::cppu::WeakImplHelper2
824 <
825     ::com::sun::star::container::XNamed,
826     ::com::sun::star::lang::XServiceInfo
827 >
828 ScDataPilotFieldGroupItemObjImpl;
829 
830 class ScDataPilotFieldGroupItemObj : public ScDataPilotFieldGroupItemObjImpl
831 {
832 public:
833     explicit            ScDataPilotFieldGroupItemObj( ScDataPilotFieldGroupObj& rParent, const ::rtl::OUString& rName );
834     virtual             ~ScDataPilotFieldGroupItemObj();
835 
836                             // XNamed
837     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
838     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
839                                 throw(::com::sun::star::uno::RuntimeException);
840 
841                             // XServiceInfo
842     virtual ::rtl::OUString SAL_CALL getImplementationName()
843                                 throw(::com::sun::star::uno::RuntimeException);
844     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
845                                 throw(::com::sun::star::uno::RuntimeException);
846     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
847                                 throw(::com::sun::star::uno::RuntimeException);
848 
849 private:
850     ScDataPilotFieldGroupObj& mrParent;
851     ::rtl::OUString     maName;
852 };
853 
854 // ============================================================================
855 
856 typedef ::cppu::WeakImplHelper4
857 <
858     ::com::sun::star::container::XEnumerationAccess,
859     ::com::sun::star::container::XIndexAccess,
860     ::com::sun::star::container::XNameAccess,
861     ::com::sun::star::lang::XServiceInfo
862 >
863 ScDataPilotItemsObjImpl;
864 
865 class ScDataPilotItemsObj : public ScDataPilotChildObjBase, public ScDataPilotItemsObjImpl
866 {
867 public:
868     explicit            ScDataPilotItemsObj( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId );
869     virtual             ~ScDataPilotItemsObj();
870 
871                             // XNameAccess
872     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
873                                 throw(::com::sun::star::container::NoSuchElementException,
874                                     ::com::sun::star::lang::WrappedTargetException,
875                                     ::com::sun::star::uno::RuntimeException);
876     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
877                                 throw(::com::sun::star::uno::RuntimeException);
878     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
879                                 throw(::com::sun::star::uno::RuntimeException);
880 
881                             // XIndexAccess
882     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
883     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
884                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
885                                     ::com::sun::star::lang::WrappedTargetException,
886                                     ::com::sun::star::uno::RuntimeException);
887 
888                             // XEnumerationAccess
889     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
890                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
891 
892                             // XElementAccess
893     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
894                                 throw(::com::sun::star::uno::RuntimeException);
895     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
896 
897                             // XServiceInfo
898     virtual ::rtl::OUString SAL_CALL getImplementationName()
899                                 throw(::com::sun::star::uno::RuntimeException);
900     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
901                                 throw(::com::sun::star::uno::RuntimeException);
902     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
903                                 throw(::com::sun::star::uno::RuntimeException);
904 
905 private:
906     ScDataPilotItemObj* GetObjectByIndex_Impl( sal_Int32 nIndex ) const;
907 };
908 
909 // ============================================================================
910 
911 typedef ::cppu::WeakImplHelper3
912 <
913     ::com::sun::star::container::XNamed,
914     ::com::sun::star::beans::XPropertySet,
915     ::com::sun::star::lang::XServiceInfo
916 >
917 ScDataPilotItemObjImpl;
918 
919 class ScDataPilotItemObj : public ScDataPilotChildObjBase, public ScDataPilotItemObjImpl
920 {
921 public:
922     explicit            ScDataPilotItemObj(
923                             ScDataPilotDescriptorBase& rParent,
924                             const ScFieldIdentifier& rFieldId,
925                             sal_Int32 nIndex );
926 
927     virtual             ~ScDataPilotItemObj();
928 
929                             // XNamed
930     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
931     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
932                                 throw(::com::sun::star::uno::RuntimeException);
933 
934                             // XPropertySet
935     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
936                             SAL_CALL getPropertySetInfo(  )
937                                 throw(::com::sun::star::uno::RuntimeException);
938     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
939                                     const ::com::sun::star::uno::Any& aValue )
940                                 throw(::com::sun::star::beans::UnknownPropertyException,
941                                     ::com::sun::star::beans::PropertyVetoException,
942                                     ::com::sun::star::lang::IllegalArgumentException,
943                                     ::com::sun::star::lang::WrappedTargetException,
944                                     ::com::sun::star::uno::RuntimeException);
945     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
946                                     const ::rtl::OUString& PropertyName )
947                                 throw(::com::sun::star::beans::UnknownPropertyException,
948                                     ::com::sun::star::lang::WrappedTargetException,
949                                     ::com::sun::star::uno::RuntimeException);
950     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
951                                     const ::com::sun::star::uno::Reference<
952                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener )
953                                 throw(::com::sun::star::beans::UnknownPropertyException,
954                                     ::com::sun::star::lang::WrappedTargetException,
955                                     ::com::sun::star::uno::RuntimeException);
956     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
957                                     const ::com::sun::star::uno::Reference<
958                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener )
959                                 throw(::com::sun::star::beans::UnknownPropertyException,
960                                     ::com::sun::star::lang::WrappedTargetException,
961                                     ::com::sun::star::uno::RuntimeException);
962     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
963                                     const ::com::sun::star::uno::Reference<
964                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
965                                 throw(::com::sun::star::beans::UnknownPropertyException,
966                                     ::com::sun::star::lang::WrappedTargetException,
967                                     ::com::sun::star::uno::RuntimeException);
968     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
969                                     const ::com::sun::star::uno::Reference<
970                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
971                                 throw(::com::sun::star::beans::UnknownPropertyException,
972                                     ::com::sun::star::lang::WrappedTargetException,
973                                     ::com::sun::star::uno::RuntimeException);
974 
975                             // XServiceInfo
976     virtual ::rtl::OUString SAL_CALL getImplementationName()
977                                 throw(::com::sun::star::uno::RuntimeException);
978     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
979                                 throw(::com::sun::star::uno::RuntimeException);
980     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
981                                 throw(::com::sun::star::uno::RuntimeException);
982 
983 private:
984     SfxItemPropertySet  maPropSet;
985     sal_Int32           mnIndex;
986 };
987 
988 // ============================================================================
989 
990 #endif
991 
992