diff options
Diffstat (limited to 'sc/inc/dapiuno.hxx')
-rw-r--r-- | sc/inc/dapiuno.hxx | 725 |
1 files changed, 725 insertions, 0 deletions
diff --git a/sc/inc/dapiuno.hxx b/sc/inc/dapiuno.hxx new file mode 100644 index 000000000..c32c2d6bf --- /dev/null +++ b/sc/inc/dapiuno.hxx @@ -0,0 +1,725 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SC_INC_DAPIUNO_HXX +#define INCLUDED_SC_INC_DAPIUNO_HXX + +#include "cellsuno.hxx" +#include "dpglobal.hxx" + +#include <svl/lstner.hxx> +#include <svl/itemprop.hxx> + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/container/XEnumerationAccess.hpp> +#include <com/sun/star/container/XNameContainer.hpp> +#include <com/sun/star/util/XModifyBroadcaster.hpp> + +#include <com/sun/star/sheet/DataPilotFieldGroupInfo.hpp> +#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp> +#include <com/sun/star/sheet/XDataPilotDataLayoutFieldSupplier.hpp> +#include <com/sun/star/sheet/XDataPilotDescriptor.hpp> +#include <com/sun/star/sheet/XDataPilotField.hpp> +#include <com/sun/star/sheet/XDataPilotFieldGrouping.hpp> +#include <com/sun/star/sheet/XDataPilotTable2.hpp> +#include <com/sun/star/sheet/XDataPilotTables.hpp> + +#include <cppuhelper/implbase.hxx> + +#include <memory> +#include <vector> + +namespace com::sun::star::sheet { struct DataPilotFieldAutoShowInfo; } +namespace com::sun::star::sheet { class XMembersAccess; } +namespace com::sun::star::sheet { struct DataPilotFieldLayoutInfo; } +namespace com::sun::star::sheet { struct DataPilotFieldReference; } +namespace com::sun::star::sheet { struct DataPilotFieldSortInfo; } + + +class ScDocShell; +class ScDPSaveDimension; +struct ScDPNumGroupInfo; + +class ScDataPilotTableObj; +class ScDataPilotFieldObj; +class ScDataPilotItemObj; +enum class ScGeneralFunction; +class ScDPObject; + +class ScDataPilotConversion +{ +public: + static ScGeneralFunction FirstFunc( PivotFunc nBits ); + static PivotFunc FunctionBit( sal_Int16 eFunc ); + + static void FillGroupInfo( + css::sheet::DataPilotFieldGroupInfo& rInfo, + const ScDPNumGroupInfo& rGroupInfo ); +}; + +/** DataPilotTables collection per sheet. */ +class ScDataPilotTablesObj final : public cppu::WeakImplHelper< + css::sheet::XDataPilotTables, + css::container::XEnumerationAccess, + css::container::XIndexAccess, + css::lang::XServiceInfo>, + public SfxListener +{ +private: + ScDocShell* pDocShell; + SCTAB nTab; + + ScDataPilotTableObj* GetObjectByIndex_Impl( sal_Int32 nIndex ); + ScDataPilotTableObj* GetObjectByName_Impl(const OUString& aName); + +public: + ScDataPilotTablesObj(ScDocShell* pDocSh, SCTAB nT); + virtual ~ScDataPilotTablesObj() override; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; + + // XDataPilotTables + virtual css::uno::Reference< css::sheet::XDataPilotDescriptor > SAL_CALL + createDataPilotDescriptor() override; + virtual void SAL_CALL insertNewByName( const OUString& aName, + const css::table::CellAddress& aOutputAddress, + const css::uno::Reference< css::sheet::XDataPilotDescriptor >& xDescriptor ) override; + virtual void SAL_CALL removeByName( const OUString& aName ) override; + + // XNameAccess + virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override; + virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override; + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() override; + virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override; + + // XEnumerationAccess + virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL + createEnumeration() override; + + // XElementAccess + virtual css::uno::Type SAL_CALL getElementType() override; + virtual sal_Bool SAL_CALL hasElements() override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; +}; + +// ScDataPilotDescriptorBase is never instantiated directly +class SAL_DLLPUBLIC_RTTI ScDataPilotDescriptorBase : + public cppu::WeakImplHelper< + css::sheet::XDataPilotDescriptor, + css::beans::XPropertySet, + css::sheet::XDataPilotDataLayoutFieldSupplier, + css::lang::XServiceInfo, + css::lang::XUnoTunnel>, + public SfxListener +{ +private: + SfxItemPropertySet maPropSet; + ScDocShell* pDocShell; + +public: + ScDataPilotDescriptorBase(ScDocShell* pDocSh); + virtual ~ScDataPilotDescriptorBase() override; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; + + ScDocShell* GetDocShell() const { return pDocShell; } + + // in the derivatives: + virtual ScDPObject* GetDPObject() const = 0; + virtual void SetDPObject(ScDPObject* pDPObj) = 0; + + // XDataPilotDescriptor + // getName, setName, getTag, setTag in derived classes + + virtual css::table::CellRangeAddress SAL_CALL getSourceRange() override; + virtual void SAL_CALL setSourceRange( const css::table::CellRangeAddress& aSourceRange ) override; + virtual css::uno::Reference< css::sheet::XSheetFilterDescriptor > SAL_CALL + getFilterDescriptor() override; + virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL + getDataPilotFields() override; + virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL + getColumnFields() override; + virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL + getRowFields() override; + virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL + getPageFields() override; + virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL + getDataFields() override; + virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL + getHiddenFields() override; + + // XPropertySet + virtual css::uno::Reference< css::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo( ) override; + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, + const css::uno::Any& aValue ) override; + virtual css::uno::Any SAL_CALL getPropertyValue( + const OUString& PropertyName ) override; + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, + const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override; + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, + const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override; + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, + const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, + const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + + // XDataPilotDataLayoutFieldSupplier + virtual css::uno::Reference< css::sheet::XDataPilotField > + SAL_CALL getDataLayoutField() override; + + // XUnoTunnel + virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< + sal_Int8 >& aIdentifier ) override; + + SC_DLLPUBLIC static const css::uno::Sequence<sal_Int8>& getUnoTunnelId(); + + // XServiceInfo is in derived classes +}; + +class ScDataPilotDescriptor final : public ScDataPilotDescriptorBase +{ +private: + std::unique_ptr<ScDPObject> mpDPObject; + +public: + ScDataPilotDescriptor(ScDocShell* pDocSh); + virtual ~ScDataPilotDescriptor() override; + + virtual ScDPObject* GetDPObject() const override; + virtual void SetDPObject(ScDPObject* pDPObj) override; + + // rest of XDataPilotDescriptor (incl. XNamed) + virtual OUString SAL_CALL getName() override; + virtual void SAL_CALL setName( const OUString& aName ) override; + virtual OUString SAL_CALL getTag() override; + virtual void SAL_CALL setTag( const OUString& aTag ) override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; +}; + +class ScDataPilotTableObj : public ScDataPilotDescriptorBase, + public css::sheet::XDataPilotTable2, + public css::util::XModifyBroadcaster +{ +private: + SCTAB nTab; + OUString aName; + XModifyListenerArr_Impl aModifyListeners; + + void Refreshed_Impl(); + +public: + ScDataPilotTableObj(ScDocShell* pDocSh, SCTAB nT, const OUString& rN); + virtual ~ScDataPilotTableObj() override; + + virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; + virtual void SAL_CALL acquire() throw() override; + virtual void SAL_CALL release() throw() override; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; + + virtual ScDPObject* GetDPObject() const override; + virtual void SetDPObject(ScDPObject* pDPObj) override; + + // rest of XDataPilotDescriptor (incl. XNamed) + virtual OUString SAL_CALL getName() override; + virtual void SAL_CALL setName( const OUString& aName ) override; + virtual OUString SAL_CALL getTag() override; + virtual void SAL_CALL setTag( const OUString& aTag ) override; + + // XDataPilotTable + virtual css::table::CellRangeAddress SAL_CALL getOutputRange() override; + virtual void SAL_CALL refresh() override; + + // XDataPilotTable2 + virtual css::uno::Sequence< css::uno::Sequence< css::uno::Any > > + SAL_CALL getDrillDownData(const css::table::CellAddress& aAddr) override; + + virtual css::sheet::DataPilotTablePositionData + SAL_CALL getPositionData(const css::table::CellAddress& aAddr) override; + + virtual void SAL_CALL insertDrillDownSheet(const css::table::CellAddress& aAddr) override; + + virtual css::table::CellRangeAddress SAL_CALL getOutputRangeByType( sal_Int32 nType ) override; + + // XModifyBroadcaster + virtual void SAL_CALL addModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override; + virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override; + + // XTypeProvider (override) + virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override; + virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; +}; + +struct ScFieldIdentifier +{ + OUString maFieldName; /// Source field name. + sal_Int32 mnFieldIdx; /// Field index (if several fields with same name exist). + bool mbDataLayout; /// True = data layout field collecting all data fields as items. + + explicit ScFieldIdentifier() : + mnFieldIdx( 0 ), mbDataLayout( false ) {} + + explicit ScFieldIdentifier( const OUString& rFieldName, bool bDataLayout ) : + maFieldName( rFieldName ), mnFieldIdx( 0 ), mbDataLayout( bDataLayout ) {} +}; + +/** Base class of all implementation objects based on a DataPilot descriptor + or DataPilot table object. Wraps acquiring and releasing the parent. */ +class ScDataPilotChildObjBase +{ +protected: + explicit ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent ); + explicit ScDataPilotChildObjBase( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId ); + virtual ~ScDataPilotChildObjBase(); + + /** Returns the wrapped DataPilot object (calls GetDPObject() at parent). */ + ScDPObject* GetDPObject() const; + /** Sets the passed DataPilot object (calls SetDPObject() at parent). */ + void SetDPObject( ScDPObject* pDPObject ); + + /** Returns the DataPilot dimension object related to the field described by maFieldId. */ + ScDPSaveDimension* GetDPDimension( ScDPObject** ppDPObject = nullptr ) const; + + /** Returns the number of members for the field described by maFieldId. */ + sal_Int32 GetMemberCount() const; + /** Returns the collection of members for the field described by maFieldId. */ + css::uno::Reference< css::sheet::XMembersAccess > GetMembers() const; + + ScDocShell* GetDocShell() const; +protected: + rtl::Reference<ScDataPilotDescriptorBase> mxParent; + ScFieldIdentifier maFieldId; + +private: + ScDataPilotChildObjBase& operator=( const ScDataPilotChildObjBase& ) = delete; +}; + +typedef ::cppu::WeakImplHelper +< + css::container::XEnumerationAccess, + css::container::XIndexAccess, + css::container::XNameAccess, + css::lang::XServiceInfo +> +ScDataPilotFieldsObjImpl; + +/** Collection of all DataPilot fields, or of all fields from a specific dimension. */ +class ScDataPilotFieldsObj final : public ScDataPilotChildObjBase, public ScDataPilotFieldsObjImpl +{ +public: + explicit ScDataPilotFieldsObj( + ScDataPilotDescriptorBase& rParent ); + + explicit ScDataPilotFieldsObj( + ScDataPilotDescriptorBase& rParent, + css::sheet::DataPilotFieldOrientation eOrient ); + + virtual ~ScDataPilotFieldsObj() override; + + // XNameAccess + virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override; + virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override; + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() override; + virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override; + + // XEnumerationAccess + virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL + createEnumeration() override; + + // XElementAccess + virtual css::uno::Type SAL_CALL getElementType() override; + virtual sal_Bool SAL_CALL hasElements() override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + +private: + ScDataPilotFieldObj* GetObjectByIndex_Impl( sal_Int32 nIndex ) const; + ScDataPilotFieldObj* GetObjectByName_Impl( const OUString& rName ) const; + +private: + css::uno::Any maOrient; /// Field orientation, no value = all fields. +}; + +typedef ::cppu::WeakImplHelper +< + css::container::XNamed, + css::beans::XPropertySet, + css::sheet::XDataPilotField, + css::sheet::XDataPilotFieldGrouping, + css::lang::XServiceInfo +> +ScDataPilotFieldObjImpl; + +/** Implementation of a single DataPilot field. */ +class ScDataPilotFieldObj : public ScDataPilotChildObjBase, public ScDataPilotFieldObjImpl +{ +public: + ScDataPilotFieldObj( + ScDataPilotDescriptorBase& rParent, + const ScFieldIdentifier& rIdent ); + + ScDataPilotFieldObj( + ScDataPilotDescriptorBase& rParent, + const ScFieldIdentifier& rIdent, + const css::uno::Any& rOrient ); + + virtual ~ScDataPilotFieldObj() override; + + // XNamed + virtual OUString SAL_CALL getName() override; + virtual void SAL_CALL setName(const OUString& aName) override; + + // XPropertySet + virtual css::uno::Reference< css::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo( ) override; + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, + const css::uno::Any& aValue ) override; + virtual css::uno::Any SAL_CALL getPropertyValue(const OUString& PropertyName ) override; + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, + const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override; + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, + const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override; + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, + const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, + const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + + // XDatePilotField + virtual css::uno::Reference<css::container::XIndexAccess> SAL_CALL + getItems() override; + + // only called from property-functions: + css::sheet::DataPilotFieldOrientation getOrientation() const; + void setOrientation(css::sheet::DataPilotFieldOrientation Orientation); + sal_Int16 getFunction() const; + void setFunction(ScGeneralFunction Function); + css::uno::Sequence< sal_Int16 > getSubtotals() const; + void setSubtotals(const std::vector< ScGeneralFunction >& rFunctions); + void setCurrentPage(const OUString& sPage); + void setUseCurrentPage(bool bUse); + const css::sheet::DataPilotFieldAutoShowInfo* getAutoShowInfo() const; + void setAutoShowInfo(const css::sheet::DataPilotFieldAutoShowInfo* pInfo); + const css::sheet::DataPilotFieldLayoutInfo* getLayoutInfo() const; + void setLayoutInfo(const css::sheet::DataPilotFieldLayoutInfo* pInfo); + const css::sheet::DataPilotFieldReference* getReference() const; + void setReference(const css::sheet::DataPilotFieldReference* pInfo); + const css::sheet::DataPilotFieldSortInfo* getSortInfo() const; + void setSortInfo(const css::sheet::DataPilotFieldSortInfo* pInfo); + bool getShowEmpty() const; + void setShowEmpty(bool bShow); + bool getRepeatItemLabels() const; + void setRepeatItemLabels(bool bShow); + + bool hasGroupInfo() const; + css::sheet::DataPilotFieldGroupInfo getGroupInfo(); + void setGroupInfo(const css::sheet::DataPilotFieldGroupInfo* pInfo); + + // XDataPilotFieldGrouping + virtual css::uno::Reference < css::sheet::XDataPilotField > SAL_CALL + createNameGroup(const css::uno::Sequence< OUString >& aItems) override; + virtual css::uno::Reference < css::sheet::XDataPilotField > SAL_CALL + createDateGroup(const css::sheet::DataPilotFieldGroupInfo& rInfo) override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + +private: + css::uno::Reference< css::container::XIndexAccess > + mxItems; + SfxItemPropertySet maPropSet; + css::uno::Any maOrient; +}; + +typedef ::std::vector< OUString > ScFieldGroupMembers; + +struct ScFieldGroup +{ + OUString maName; + ScFieldGroupMembers maMembers; +}; + +typedef ::std::vector< ScFieldGroup > ScFieldGroups; + +typedef ::cppu::WeakImplHelper +< + css::container::XNameContainer, + css::container::XEnumerationAccess, + css::container::XIndexAccess, + css::lang::XServiceInfo +> +ScDataPilotFieldGroupsObjImpl; + +/** Implementation of all grouped items in a DataPilot field. + + This is a stand-alone object without any connection to the base DataPilot + field. Grouping info has to be written back with the GroupInfo property of + the DataPilot field after modifying this object. + */ +class ScDataPilotFieldGroupsObj final : public ScDataPilotFieldGroupsObjImpl +{ +public: + explicit ScDataPilotFieldGroupsObj( const ScFieldGroups& rGroups ); + virtual ~ScDataPilotFieldGroupsObj() override; + + // XNameAccess + virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override; + virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override; + + // XNameReplace + virtual void SAL_CALL replaceByName( const OUString& aName, + const css::uno::Any& aElement ) override; + + // XNameContainer + virtual void SAL_CALL insertByName( const OUString& aName, + const css::uno::Any& aElement ) override; + virtual void SAL_CALL removeByName( const OUString& Name ) override; + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() override; + virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override; + + // XEnumerationAccess + virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL + createEnumeration() override; + + // XElementAccess + virtual css::uno::Type SAL_CALL getElementType() override; + virtual sal_Bool SAL_CALL hasElements() override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + + // implementation + /// @throws css::uno::RuntimeException + ScFieldGroup& getFieldGroup( const OUString& rName ); + /// @throws css::uno::RuntimeException + void renameFieldGroup( const OUString& rOldName, const OUString& rNewName ); + +private: + ScFieldGroups::iterator implFindByName( const OUString& rName ); + +private: + ScFieldGroups maGroups; +}; + +typedef ::cppu::WeakImplHelper +< + css::container::XNameContainer, + css::container::XEnumerationAccess, + css::container::XIndexAccess, + css::container::XNamed, + css::lang::XServiceInfo +> +ScDataPilotFieldGroupObjImpl; + +class ScDataPilotFieldGroupObj final : public ScDataPilotFieldGroupObjImpl +{ +public: + explicit ScDataPilotFieldGroupObj( ScDataPilotFieldGroupsObj& rParent, const OUString& rGroupName ); + virtual ~ScDataPilotFieldGroupObj() override; + + // XNameAccess + virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override; + virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override; + + // XNameReplace + virtual void SAL_CALL replaceByName( const OUString& aName, + const css::uno::Any& aElement ) override; + + // XNameContainer + virtual void SAL_CALL insertByName( const OUString& aName, + const css::uno::Any& aElement ) override; + virtual void SAL_CALL removeByName( const OUString& Name ) override; + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() override; + virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override; + + // XEnumerationAccess + virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL + createEnumeration() override; + + // XElementAccess + virtual css::uno::Type SAL_CALL getElementType() override; + virtual sal_Bool SAL_CALL hasElements() override; + + // XNamed + virtual OUString SAL_CALL getName() override; + virtual void SAL_CALL setName( const OUString& aName ) override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + +private: + rtl::Reference<ScDataPilotFieldGroupsObj> mxParent; + OUString maGroupName; +}; + +typedef ::cppu::WeakImplHelper +< + css::container::XNamed, + css::lang::XServiceInfo +> +ScDataPilotFieldGroupItemObjImpl; + +class ScDataPilotFieldGroupItemObj final : public ScDataPilotFieldGroupItemObjImpl +{ +public: + explicit ScDataPilotFieldGroupItemObj( ScDataPilotFieldGroupObj& rParent, const OUString& rName ); + virtual ~ScDataPilotFieldGroupItemObj() override; + + // XNamed + virtual OUString SAL_CALL getName() override; + virtual void SAL_CALL setName( const OUString& aName ) override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + +private: + rtl::Reference<ScDataPilotFieldGroupObj> mxParent; + OUString maName; +}; + +typedef ::cppu::WeakImplHelper +< + css::container::XEnumerationAccess, + css::container::XIndexAccess, + css::container::XNameAccess, + css::lang::XServiceInfo +> +ScDataPilotItemsObjImpl; + +class ScDataPilotItemsObj final : public ScDataPilotChildObjBase, public ScDataPilotItemsObjImpl +{ +public: + explicit ScDataPilotItemsObj( ScDataPilotDescriptorBase& rParent, const ScFieldIdentifier& rFieldId ); + virtual ~ScDataPilotItemsObj() override; + + // XNameAccess + virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override; + virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override; + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() override; + virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override; + + // XEnumerationAccess + virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL + createEnumeration() override; + + // XElementAccess + virtual css::uno::Type SAL_CALL getElementType() override; + virtual sal_Bool SAL_CALL hasElements() override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + +private: + ScDataPilotItemObj* GetObjectByIndex_Impl( sal_Int32 nIndex ) const; +}; + +typedef ::cppu::WeakImplHelper +< + css::container::XNamed, + css::beans::XPropertySet, + css::lang::XServiceInfo +> +ScDataPilotItemObjImpl; + +class ScDataPilotItemObj : public ScDataPilotChildObjBase, public ScDataPilotItemObjImpl +{ +public: + explicit ScDataPilotItemObj( + ScDataPilotDescriptorBase& rParent, + const ScFieldIdentifier& rFieldId, + sal_Int32 nIndex ); + + virtual ~ScDataPilotItemObj() override; + + // XNamed + virtual OUString SAL_CALL getName() override; + virtual void SAL_CALL setName( const OUString& aName ) override; + + // XPropertySet + virtual css::uno::Reference< css::beans::XPropertySetInfo > + SAL_CALL getPropertySetInfo( ) override; + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, + const css::uno::Any& aValue ) override; + virtual css::uno::Any SAL_CALL getPropertyValue( + const OUString& PropertyName ) override; + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, + const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override; + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, + const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override; + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, + const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, + const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + +private: + SfxItemPropertySet maPropSet; + sal_Int32 mnIndex; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |