1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef SC_DAPIUNO_HXX 25 #define SC_DAPIUNO_HXX 26 27 #include "global.hxx" 28 #include "dpobject.hxx" 29 #include "rangeutl.hxx" // ScArea 30 #include "cellsuno.hxx" // for XModifyListenerArr_Impl 31 32 #include <svl/lstner.hxx> 33 #include <svl/itemprop.hxx> 34 35 #include <com/sun/star/lang/XServiceInfo.hpp> 36 #include <com/sun/star/lang/XUnoTunnel.hpp> 37 #include <com/sun/star/beans/XPropertySet.hpp> 38 #include <com/sun/star/container/XEnumerationAccess.hpp> 39 #include <com/sun/star/container/XNameContainer.hpp> 40 #include <com/sun/star/util/XModifyBroadcaster.hpp> 41 42 #include <com/sun/star/sheet/DataPilotFieldAutoShowInfo.hpp> 43 #include <com/sun/star/sheet/DataPilotFieldGroupInfo.hpp> 44 #include <com/sun/star/sheet/DataPilotFieldLayoutInfo.hpp> 45 #include <com/sun/star/sheet/DataPilotFieldOrientation.hpp> 46 #include <com/sun/star/sheet/DataPilotFieldReference.hpp> 47 #include <com/sun/star/sheet/DataPilotFieldSortInfo.hpp> 48 #include <com/sun/star/sheet/GeneralFunction.hpp> 49 #include <com/sun/star/sheet/XDataPilotDataLayoutFieldSupplier.hpp> 50 #include <com/sun/star/sheet/XDataPilotDescriptor.hpp> 51 #include <com/sun/star/sheet/XDataPilotField.hpp> 52 #include <com/sun/star/sheet/XDataPilotFieldGrouping.hpp> 53 #include <com/sun/star/sheet/XDataPilotTable.hpp> 54 #include <com/sun/star/sheet/XDataPilotTable2.hpp> 55 #include <com/sun/star/sheet/XDataPilotTables.hpp> 56 57 #include <cppuhelper/implbase2.hxx> 58 #include <cppuhelper/implbase3.hxx> 59 #include <cppuhelper/implbase4.hxx> 60 #include <cppuhelper/implbase5.hxx> 61 62 #include <memory> 63 #include <vector> 64 65 namespace com { namespace sun { namespace star { namespace sheet { 66 struct DataPilotFieldFilter; 67 struct DataPilotTablePositionData; 68 }}}} 69 70 class ScDocShell; 71 class ScDPSaveDimension; 72 class ScDPSaveGroupDimension; 73 class ScDPSaveNumGroupDimension; 74 struct ScDPNumGroupInfo; 75 76 class ScDataPilotTableObj; 77 class ScDataPilotFieldObj; 78 class ScDataPilotItemObj; 79 80 81 class ScDataPilotConversion 82 { 83 public: 84 static com::sun::star::sheet::GeneralFunction FirstFunc( sal_uInt16 nBits ); 85 static sal_uInt16 FunctionBit( com::sun::star::sheet::GeneralFunction eFunc ); 86 87 static void FillGroupInfo( 88 ::com::sun::star::sheet::DataPilotFieldGroupInfo& rInfo, 89 const ScDPNumGroupInfo& rGroupInfo ); 90 }; 91 92 // ============================================================================ 93 94 /** DataPilotTables collection per sheet. */ 95 class ScDataPilotTablesObj : public cppu::WeakImplHelper4< 96 com::sun::star::sheet::XDataPilotTables, 97 com::sun::star::container::XEnumerationAccess, 98 com::sun::star::container::XIndexAccess, 99 com::sun::star::lang::XServiceInfo>, 100 public SfxListener 101 { 102 private: 103 ScDocShell* pDocShell; 104 SCTAB nTab; 105 106 ScDataPilotTableObj* GetObjectByIndex_Impl( sal_Int32 nIndex ); 107 ScDataPilotTableObj* GetObjectByName_Impl(const ::rtl::OUString& aName); 108 109 public: 110 ScDataPilotTablesObj(ScDocShell* pDocSh, SCTAB nT); 111 virtual ~ScDataPilotTablesObj(); 112 113 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 114 115 // XDataPilotTables 116 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotDescriptor > SAL_CALL 117 createDataPilotDescriptor(); 118 virtual void SAL_CALL insertNewByName( const ::rtl::OUString& aName, 119 const ::com::sun::star::table::CellAddress& aOutputAddress, 120 const ::com::sun::star::uno::Reference< 121 ::com::sun::star::sheet::XDataPilotDescriptor >& xDescriptor ); 122 virtual void SAL_CALL removeByName( const ::rtl::OUString& aName ); 123 124 // XNameAccess 125 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ); 126 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(); 127 virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ); 128 129 // XIndexAccess 130 virtual sal_Int32 SAL_CALL getCount(); 131 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ); 132 133 // XEnumerationAccess 134 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL 135 createEnumeration(); 136 137 // XElementAccess 138 virtual ::com::sun::star::uno::Type SAL_CALL getElementType(); 139 virtual sal_Bool SAL_CALL hasElements(); 140 141 // XServiceInfo 142 virtual ::rtl::OUString SAL_CALL getImplementationName(); 143 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 144 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 145 }; 146 147 // ============================================================================ 148 149 // ScDataPilotDescriptorBase is never instantiated directly 150 class ScDataPilotDescriptorBase : public com::sun::star::sheet::XDataPilotDescriptor, 151 public com::sun::star::beans::XPropertySet, 152 public com::sun::star::sheet::XDataPilotDataLayoutFieldSupplier, 153 public com::sun::star::lang::XServiceInfo, 154 public com::sun::star::lang::XUnoTunnel, 155 public com::sun::star::lang::XTypeProvider, 156 public cppu::OWeakObject, 157 public SfxListener 158 { 159 private: 160 SfxItemPropertySet maPropSet; 161 ScDocShell* pDocShell; 162 163 public: 164 ScDataPilotDescriptorBase(ScDocShell* pDocSh); 165 virtual ~ScDataPilotDescriptorBase(); 166 167 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( 168 const ::com::sun::star::uno::Type & rType ); 169 virtual void SAL_CALL acquire() throw(); 170 virtual void SAL_CALL release() throw(); 171 172 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 173 GetDocShell() const174 ScDocShell* GetDocShell() const { return pDocShell; } 175 176 // in den Ableitungen: 177 virtual ScDPObject* GetDPObject() const = 0; 178 virtual void SetDPObject(ScDPObject* pDPObj) = 0; 179 180 // XDataPilotDescriptor 181 // getName, setName, getTag, setTag in derived classes 182 183 virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getSourceRange(); 184 virtual void SAL_CALL setSourceRange( const ::com::sun::star::table::CellRangeAddress& aSourceRange ); 185 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetFilterDescriptor > SAL_CALL 186 getFilterDescriptor(); 187 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL 188 getDataPilotFields(); 189 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL 190 getColumnFields(); 191 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL 192 getRowFields(); 193 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL 194 getPageFields(); 195 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL 196 getDataFields(); 197 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL 198 getHiddenFields(); 199 200 // XPropertySet 201 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > 202 SAL_CALL getPropertySetInfo( ); 203 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, 204 const ::com::sun::star::uno::Any& aValue ); 205 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( 206 const ::rtl::OUString& PropertyName ); 207 virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, 208 const ::com::sun::star::uno::Reference< 209 ::com::sun::star::beans::XPropertyChangeListener >& xListener ); 210 virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, 211 const ::com::sun::star::uno::Reference< 212 ::com::sun::star::beans::XPropertyChangeListener >& aListener ); 213 virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, 214 const ::com::sun::star::uno::Reference< 215 ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 216 virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, 217 const ::com::sun::star::uno::Reference< 218 ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 219 220 // XDataPilotDataLayoutFieldSupplier 221 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotField > 222 SAL_CALL getDataLayoutField(); 223 224 // XUnoTunnel 225 virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< 226 sal_Int8 >& aIdentifier ); 227 228 static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId(); 229 static ScDataPilotDescriptorBase* getImplementation( const com::sun::star::uno::Reference< 230 com::sun::star::sheet::XDataPilotDescriptor> xObj ); 231 232 // XTypeProvider (overloaded in ScDataPilotTableObj) 233 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(); 234 virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(); 235 236 // XServiceInfo is in derived classes 237 }; 238 239 // ============================================================================ 240 241 class ScDataPilotDescriptor : public ScDataPilotDescriptorBase 242 { 243 private: 244 ScDPObject* mpDPObject; 245 246 public: 247 ScDataPilotDescriptor(ScDocShell* pDocSh); 248 virtual ~ScDataPilotDescriptor(); 249 250 virtual ScDPObject* GetDPObject() const; 251 virtual void SetDPObject(ScDPObject* pDPObj); 252 253 // rest of XDataPilotDescriptor (incl. XNamed) 254 virtual ::rtl::OUString SAL_CALL getName(); 255 virtual void SAL_CALL setName( const ::rtl::OUString& aName ); 256 virtual ::rtl::OUString SAL_CALL getTag(); 257 virtual void SAL_CALL setTag( const ::rtl::OUString& aTag ); 258 259 // XServiceInfo 260 virtual ::rtl::OUString SAL_CALL getImplementationName(); 261 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 262 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 263 }; 264 265 // ============================================================================ 266 267 class ScDataPilotTableObj : public ScDataPilotDescriptorBase, 268 public com::sun::star::sheet::XDataPilotTable2, 269 public com::sun::star::util::XModifyBroadcaster 270 { 271 private: 272 SCTAB nTab; 273 String aName; 274 XModifyListenerArr_Impl aModifyListeners; 275 276 void Refreshed_Impl(); 277 278 public: 279 ScDataPilotTableObj(ScDocShell* pDocSh, SCTAB nT, const String& rN); 280 virtual ~ScDataPilotTableObj(); 281 282 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( 283 const ::com::sun::star::uno::Type & rType ); 284 virtual void SAL_CALL acquire() throw(); 285 virtual void SAL_CALL release() throw(); 286 287 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 288 289 virtual ScDPObject* GetDPObject() const; 290 virtual void SetDPObject(ScDPObject* pDPObj); 291 292 // rest of XDataPilotDescriptor (incl. XNamed) 293 virtual ::rtl::OUString SAL_CALL getName(); 294 virtual void SAL_CALL setName( const ::rtl::OUString& aName ); 295 virtual ::rtl::OUString SAL_CALL getTag(); 296 virtual void SAL_CALL setTag( const ::rtl::OUString& aTag ); 297 298 // XDataPilotTable 299 virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getOutputRange(); 300 virtual void SAL_CALL refresh(); 301 302 // XDataPilotTable2 303 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > > 304 SAL_CALL getDrillDownData(const ::com::sun::star::table::CellAddress& aAddr); 305 306 virtual ::com::sun::star::sheet::DataPilotTablePositionData 307 SAL_CALL getPositionData(const ::com::sun::star::table::CellAddress& aAddr); 308 309 virtual void SAL_CALL insertDrillDownSheet(const ::com::sun::star::table::CellAddress& aAddr); 310 311 virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getOutputRangeByType( sal_Int32 nType ); 312 313 // XModifyBroadcaster 314 virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< 315 ::com::sun::star::util::XModifyListener >& aListener ); 316 virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< 317 ::com::sun::star::util::XModifyListener >& aListener ); 318 319 // XTypeProvider (overloaded) 320 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(); 321 virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(); 322 323 // XServiceInfo 324 virtual ::rtl::OUString SAL_CALL getImplementationName(); 325 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 326 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 327 }; 328 329 // ============================================================================ 330 331 struct ScFieldIdentifier 332 { 333 ::rtl::OUString maFieldName; /// Source field name. 334 sal_Int32 mnFieldIdx; /// Field index (if several fields with same name exist). 335 bool mbDataLayout; /// True = data layout field collecting all data fields as items. 336 ScFieldIdentifierScFieldIdentifier337 inline explicit ScFieldIdentifier() : 338 mnFieldIdx( 0 ), mbDataLayout( false ) {} 339 ScFieldIdentifierScFieldIdentifier340 inline explicit ScFieldIdentifier( const ::rtl::OUString& rFieldName, sal_Int32 nFieldIdx, bool bDataLayout ) : 341 maFieldName( rFieldName ), mnFieldIdx( nFieldIdx ), mbDataLayout( bDataLayout ) {} 342 }; 343 344 // ============================================================================ 345 346 /** Base class of all implementation objects based on a DataPilot descriptor 347 or DataPilot table object. Wraps acquiring and releasing the parent. */ 348 class ScDataPilotChildObjBase 349 { 350 protected: 351 explicit ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent ); 352 explicit ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId ); 353 virtual ~ScDataPilotChildObjBase(); 354 355 /** Returns the wrapped DataPilot object (calls GetDPObject() at parent). */ 356 ScDPObject* GetDPObject() const; 357 /** Sets the passed DataPilot object (calls SetDPObject() at parent). */ 358 void SetDPObject( ScDPObject* pDPObject ); 359 360 /** Returns the DataPilot dimension object related to the field described by maFieldId. */ 361 ScDPSaveDimension* GetDPDimension( ScDPObject** ppDPObject = 0 ) const; 362 363 /** Returns the number of members for the field described by maFieldId. */ 364 sal_Int32 GetMemberCount() const; 365 /** Returns the collection of members for the field described by maFieldId. */ 366 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > 367 GetMembers() const; 368 369 protected: 370 ScDataPilotDescriptorBase& mrParent; 371 ScFieldIdentifier maFieldId; 372 373 private: 374 ScDataPilotChildObjBase& operator=( const ScDataPilotChildObjBase& ); 375 }; 376 377 // ============================================================================ 378 379 typedef ::cppu::WeakImplHelper4 380 < 381 ::com::sun::star::container::XEnumerationAccess, 382 ::com::sun::star::container::XIndexAccess, 383 ::com::sun::star::container::XNameAccess, 384 ::com::sun::star::lang::XServiceInfo 385 > 386 ScDataPilotFieldsObjImpl; 387 388 /** Collection of all DataPilot fields, or of all fields from a specific dimension. */ 389 class ScDataPilotFieldsObj : public ScDataPilotChildObjBase, public ScDataPilotFieldsObjImpl 390 { 391 public: 392 explicit ScDataPilotFieldsObj( 393 ScDataPilotDescriptorBase& rParent ); 394 395 explicit ScDataPilotFieldsObj( 396 ScDataPilotDescriptorBase& rParent, 397 ::com::sun::star::sheet::DataPilotFieldOrientation eOrient ); 398 399 virtual ~ScDataPilotFieldsObj(); 400 401 // XNameAccess 402 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ); 403 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(); 404 virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ); 405 406 // XIndexAccess 407 virtual sal_Int32 SAL_CALL getCount(); 408 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ); 409 410 // XEnumerationAccess 411 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL 412 createEnumeration(); 413 414 // XElementAccess 415 virtual ::com::sun::star::uno::Type SAL_CALL getElementType(); 416 virtual sal_Bool SAL_CALL hasElements(); 417 418 // XServiceInfo 419 virtual ::rtl::OUString SAL_CALL getImplementationName(); 420 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 421 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 422 423 private: 424 ScDataPilotFieldObj* GetObjectByIndex_Impl( sal_Int32 nIndex ) const; 425 ScDataPilotFieldObj* GetObjectByName_Impl( const ::rtl::OUString& rName ) const; 426 427 private: 428 ::com::sun::star::uno::Any maOrient; /// Field orientation, no value = all fields. 429 }; 430 431 // ============================================================================ 432 433 typedef ::cppu::WeakImplHelper5 434 < 435 ::com::sun::star::container::XNamed, 436 ::com::sun::star::beans::XPropertySet, 437 ::com::sun::star::sheet::XDataPilotField, 438 ::com::sun::star::sheet::XDataPilotFieldGrouping, 439 ::com::sun::star::lang::XServiceInfo 440 > 441 ScDataPilotFieldObjImpl; 442 443 /** Implementation of a single DataPilot field. */ 444 class ScDataPilotFieldObj : public ScDataPilotChildObjBase, public ScDataPilotFieldObjImpl 445 { 446 public: 447 ScDataPilotFieldObj( 448 ScDataPilotDescriptorBase& rParent, 449 const ScFieldIdentifier& rIdent ); 450 451 ScDataPilotFieldObj( 452 ScDataPilotDescriptorBase& rParent, 453 const ScFieldIdentifier& rIdent, 454 const ::com::sun::star::uno::Any& rOrient ); 455 456 virtual ~ScDataPilotFieldObj(); 457 458 // XNamed 459 virtual ::rtl::OUString SAL_CALL getName(); 460 virtual void SAL_CALL setName( const ::rtl::OUString& aName ); 461 462 // XPropertySet 463 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > 464 SAL_CALL getPropertySetInfo( ); 465 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, 466 const ::com::sun::star::uno::Any& aValue ); 467 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( 468 const ::rtl::OUString& PropertyName ); 469 virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, 470 const ::com::sun::star::uno::Reference< 471 ::com::sun::star::beans::XPropertyChangeListener >& xListener ); 472 virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, 473 const ::com::sun::star::uno::Reference< 474 ::com::sun::star::beans::XPropertyChangeListener >& aListener ); 475 virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, 476 const ::com::sun::star::uno::Reference< 477 ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 478 virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, 479 const ::com::sun::star::uno::Reference< 480 ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 481 482 // XDatePilotField 483 virtual com::sun::star::uno::Reference<com::sun::star::container::XIndexAccess> SAL_CALL 484 getItems(); 485 486 // nur noch aus Property-Funktionen gerufen: 487 com::sun::star::sheet::DataPilotFieldOrientation getOrientation(void) const; 488 void setOrientation(com::sun::star::sheet::DataPilotFieldOrientation Orientation); 489 com::sun::star::sheet::GeneralFunction getFunction(void) const; 490 void setFunction(com::sun::star::sheet::GeneralFunction Function); 491 com::sun::star::uno::Sequence< com::sun::star::sheet::GeneralFunction > getSubtotals() const; 492 void setSubtotals(const com::sun::star::uno::Sequence< com::sun::star::sheet::GeneralFunction >& rFunctions); 493 rtl::OUString getCurrentPage() const; 494 void setCurrentPage(const rtl::OUString& sPage); 495 sal_Bool getUseCurrentPage() const; 496 void setUseCurrentPage(sal_Bool bUse); 497 const com::sun::star::sheet::DataPilotFieldAutoShowInfo* getAutoShowInfo(); 498 void setAutoShowInfo(const com::sun::star::sheet::DataPilotFieldAutoShowInfo* pInfo); 499 const com::sun::star::sheet::DataPilotFieldLayoutInfo* getLayoutInfo(); 500 void setLayoutInfo(const com::sun::star::sheet::DataPilotFieldLayoutInfo* pInfo); 501 const com::sun::star::sheet::DataPilotFieldReference* getReference(); 502 void setReference(const com::sun::star::sheet::DataPilotFieldReference* pInfo); 503 const com::sun::star::sheet::DataPilotFieldSortInfo* getSortInfo(); 504 void setSortInfo(const com::sun::star::sheet::DataPilotFieldSortInfo* pInfo); 505 sal_Bool getShowEmpty() const; 506 void setShowEmpty(sal_Bool bShow); 507 508 sal_Bool hasGroupInfo(); 509 com::sun::star::sheet::DataPilotFieldGroupInfo getGroupInfo(); 510 void setGroupInfo(const com::sun::star::sheet::DataPilotFieldGroupInfo* pInfo); 511 512 // XDataPilotFieldGrouping 513 sal_Bool HasString(const com::sun::star::uno::Sequence< ::rtl::OUString >& aItems, const ::rtl::OUString& aString); 514 virtual com::sun::star::uno::Reference < com::sun::star::sheet::XDataPilotField > SAL_CALL 515 createNameGroup(const com::sun::star::uno::Sequence< ::rtl::OUString >& aItems); 516 virtual com::sun::star::uno::Reference < com::sun::star::sheet::XDataPilotField > SAL_CALL 517 createDateGroup(const com::sun::star::sheet::DataPilotFieldGroupInfo& rInfo); 518 519 // XServiceInfo 520 virtual ::rtl::OUString SAL_CALL getImplementationName(); 521 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 522 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 523 524 private: 525 ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > 526 mxItems; 527 SfxItemPropertySet maPropSet; 528 ::com::sun::star::uno::Any maOrient; 529 }; 530 531 // ============================================================================ 532 533 typedef ::std::vector< ::rtl::OUString > ScFieldGroupMembers; 534 535 struct ScFieldGroup 536 { 537 ::rtl::OUString maName; 538 ScFieldGroupMembers maMembers; 539 }; 540 541 typedef ::std::vector< ScFieldGroup > ScFieldGroups; 542 543 // ============================================================================ 544 545 typedef ::cppu::WeakImplHelper4 546 < 547 ::com::sun::star::container::XNameContainer, 548 ::com::sun::star::container::XEnumerationAccess, 549 ::com::sun::star::container::XIndexAccess, 550 ::com::sun::star::lang::XServiceInfo 551 > 552 ScDataPilotFieldGroupsObjImpl; 553 554 /** Implementation of all grouped items in a DataPilot field. 555 556 This is a stand-alone object without any connection to the base DataPilot 557 field. Grouping info has to be written back with the GroupInfo property of 558 the DataPilot field after modifying this object. 559 */ 560 class ScDataPilotFieldGroupsObj : public ScDataPilotFieldGroupsObjImpl 561 { 562 public: 563 explicit ScDataPilotFieldGroupsObj( const ScFieldGroups& rGroups ); 564 virtual ~ScDataPilotFieldGroupsObj(); 565 566 // XNameAccess 567 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ); 568 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(); 569 virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ); 570 571 // XNameReplace 572 virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, 573 const ::com::sun::star::uno::Any& aElement ); 574 575 // XNameContainer 576 virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, 577 const ::com::sun::star::uno::Any& aElement ); 578 virtual void SAL_CALL removeByName( const ::rtl::OUString& Name ); 579 580 // XIndexAccess 581 virtual sal_Int32 SAL_CALL getCount(); 582 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ); 583 584 // XEnumerationAccess 585 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL 586 createEnumeration(); 587 588 // XElementAccess 589 virtual ::com::sun::star::uno::Type SAL_CALL getElementType(); 590 virtual sal_Bool SAL_CALL hasElements(); 591 592 // XServiceInfo 593 virtual ::rtl::OUString SAL_CALL getImplementationName(); 594 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 595 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 596 597 // implementation 598 ScFieldGroup& getFieldGroup( const ::rtl::OUString& rName ); 599 void renameFieldGroup( const ::rtl::OUString& rOldName, const ::rtl::OUString& rNewName ); 600 601 private: 602 ScFieldGroups::iterator implFindByName( const ::rtl::OUString& rName ); 603 604 private: 605 ScFieldGroups maGroups; 606 }; 607 608 // ============================================================================ 609 610 typedef ::cppu::WeakImplHelper5 611 < 612 ::com::sun::star::container::XNameContainer, 613 ::com::sun::star::container::XEnumerationAccess, 614 ::com::sun::star::container::XIndexAccess, 615 ::com::sun::star::container::XNamed, 616 ::com::sun::star::lang::XServiceInfo 617 > 618 ScDataPilotFieldGroupObjImpl; 619 620 class ScDataPilotFieldGroupObj : public ScDataPilotFieldGroupObjImpl 621 { 622 public: 623 explicit ScDataPilotFieldGroupObj( ScDataPilotFieldGroupsObj& rParent, const ::rtl::OUString& rGroupName ); 624 virtual ~ScDataPilotFieldGroupObj(); 625 626 // XNameAccess 627 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ); 628 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(); 629 virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ); 630 631 // XNameReplace 632 virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, 633 const ::com::sun::star::uno::Any& aElement ); 634 635 // XNameContainer 636 virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, 637 const ::com::sun::star::uno::Any& aElement ); 638 virtual void SAL_CALL removeByName( const ::rtl::OUString& Name ); 639 640 // XIndexAccess 641 virtual sal_Int32 SAL_CALL getCount(); 642 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ); 643 644 // XEnumerationAccess 645 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL 646 createEnumeration(); 647 648 // XElementAccess 649 virtual ::com::sun::star::uno::Type SAL_CALL getElementType(); 650 virtual sal_Bool SAL_CALL hasElements(); 651 652 // XNamed 653 virtual ::rtl::OUString SAL_CALL getName(); 654 virtual void SAL_CALL setName( const ::rtl::OUString& aName ); 655 656 // XServiceInfo 657 virtual ::rtl::OUString SAL_CALL getImplementationName(); 658 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 659 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 660 661 private: 662 ScDataPilotFieldGroupsObj& mrParent; 663 ::rtl::OUString maGroupName; 664 }; 665 666 // ============================================================================ 667 668 typedef ::cppu::WeakImplHelper2 669 < 670 ::com::sun::star::container::XNamed, 671 ::com::sun::star::lang::XServiceInfo 672 > 673 ScDataPilotFieldGroupItemObjImpl; 674 675 class ScDataPilotFieldGroupItemObj : public ScDataPilotFieldGroupItemObjImpl 676 { 677 public: 678 explicit ScDataPilotFieldGroupItemObj( ScDataPilotFieldGroupObj& rParent, const ::rtl::OUString& rName ); 679 virtual ~ScDataPilotFieldGroupItemObj(); 680 681 // XNamed 682 virtual ::rtl::OUString SAL_CALL getName(); 683 virtual void SAL_CALL setName( const ::rtl::OUString& aName ); 684 685 // XServiceInfo 686 virtual ::rtl::OUString SAL_CALL getImplementationName(); 687 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 688 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 689 690 private: 691 ScDataPilotFieldGroupObj& mrParent; 692 ::rtl::OUString maName; 693 }; 694 695 // ============================================================================ 696 697 typedef ::cppu::WeakImplHelper4 698 < 699 ::com::sun::star::container::XEnumerationAccess, 700 ::com::sun::star::container::XIndexAccess, 701 ::com::sun::star::container::XNameAccess, 702 ::com::sun::star::lang::XServiceInfo 703 > 704 ScDataPilotItemsObjImpl; 705 706 class ScDataPilotItemsObj : public ScDataPilotChildObjBase, public ScDataPilotItemsObjImpl 707 { 708 public: 709 explicit ScDataPilotItemsObj( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId ); 710 virtual ~ScDataPilotItemsObj(); 711 712 // XNameAccess 713 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ); 714 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(); 715 virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ); 716 717 // XIndexAccess 718 virtual sal_Int32 SAL_CALL getCount(); 719 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ); 720 721 // XEnumerationAccess 722 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL 723 createEnumeration(); 724 725 // XElementAccess 726 virtual ::com::sun::star::uno::Type SAL_CALL getElementType(); 727 virtual sal_Bool SAL_CALL hasElements(); 728 729 // XServiceInfo 730 virtual ::rtl::OUString SAL_CALL getImplementationName(); 731 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 732 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 733 734 private: 735 ScDataPilotItemObj* GetObjectByIndex_Impl( sal_Int32 nIndex ) const; 736 }; 737 738 // ============================================================================ 739 740 typedef ::cppu::WeakImplHelper3 741 < 742 ::com::sun::star::container::XNamed, 743 ::com::sun::star::beans::XPropertySet, 744 ::com::sun::star::lang::XServiceInfo 745 > 746 ScDataPilotItemObjImpl; 747 748 class ScDataPilotItemObj : public ScDataPilotChildObjBase, public ScDataPilotItemObjImpl 749 { 750 public: 751 explicit ScDataPilotItemObj( 752 ScDataPilotDescriptorBase& rParent, 753 const ScFieldIdentifier& rFieldId, 754 sal_Int32 nIndex ); 755 756 virtual ~ScDataPilotItemObj(); 757 758 // XNamed 759 virtual ::rtl::OUString SAL_CALL getName(); 760 virtual void SAL_CALL setName( const ::rtl::OUString& aName ); 761 762 // XPropertySet 763 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > 764 SAL_CALL getPropertySetInfo( ); 765 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, 766 const ::com::sun::star::uno::Any& aValue ); 767 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( 768 const ::rtl::OUString& PropertyName ); 769 virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, 770 const ::com::sun::star::uno::Reference< 771 ::com::sun::star::beans::XPropertyChangeListener >& xListener ); 772 virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, 773 const ::com::sun::star::uno::Reference< 774 ::com::sun::star::beans::XPropertyChangeListener >& aListener ); 775 virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, 776 const ::com::sun::star::uno::Reference< 777 ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 778 virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, 779 const ::com::sun::star::uno::Reference< 780 ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 781 782 // XServiceInfo 783 virtual ::rtl::OUString SAL_CALL getImplementationName(); 784 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); 785 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(); 786 787 private: 788 SfxItemPropertySet maPropSet; 789 sal_Int32 mnIndex; 790 }; 791 792 // ============================================================================ 793 794 #endif 795