xref: /AOO41X/main/sc/inc/dpsave.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
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_DPSAVE_HXX
25 #define SC_DPSAVE_HXX
26 
27 #include <tools/string.hxx>
28 #include <tools/list.hxx>
29 #include <com/sun/star/sheet/XDimensionsSupplier.hpp>
30 #include <com/sun/star/sheet/DataPilotFieldOrientation.hpp>
31 #include "scdllapi.h"
32 #include <hash_map>
33 #include <list>
34 #include <memory>
35 
36 namespace com { namespace sun { namespace star { namespace sheet {
37     struct DataPilotFieldReference;
38     struct DataPilotFieldSortInfo;
39     struct DataPilotFieldAutoShowInfo;
40     struct DataPilotFieldLayoutInfo;
41 } } } }
42 
43 class ScDPDimensionSaveData;
44 class ScDPTableData;
45 class ScDPObject;
46 
47 // --------------------------------------------------------------------
48 //
49 //  classes to save Data Pilot settings
50 //
51 
52 
53 class ScDPSaveMember
54 {
55 private:
56     String      aName;
57     ::std::auto_ptr<rtl::OUString> mpLayoutName; // custom name to be displayed in the table.
58     sal_uInt16      nVisibleMode;
59     sal_uInt16      nShowDetailsMode;
60 
61 public:
62                             ScDPSaveMember(const String& rName);
63                             ScDPSaveMember(const ScDPSaveMember& r);
64                             ~ScDPSaveMember();
65 
66     sal_Bool                    operator== ( const ScDPSaveMember& r ) const;
67 
GetName() const68     const String&           GetName() const { return aName; }
69     SC_DLLPUBLIC sal_Bool   HasIsVisible() const;
70     SC_DLLPUBLIC void       SetIsVisible(sal_Bool bSet);
GetIsVisible() const71     sal_Bool                GetIsVisible() const { return sal_Bool(nVisibleMode); }
72     SC_DLLPUBLIC sal_Bool   HasShowDetails() const;
73     SC_DLLPUBLIC void       SetShowDetails(sal_Bool bSet);
GetShowDetails() const74     sal_Bool                GetShowDetails() const { return sal_Bool(nShowDetailsMode); }
75 
76     void                    SetName( const String& rNew );  // used if the source member was renamed (groups)
77 
78     SC_DLLPUBLIC void       SetLayoutName( const ::rtl::OUString& rName );
79     SC_DLLPUBLIC const ::rtl::OUString*  GetLayoutName() const;
80     void                    RemoveLayoutName();
81 
82     void                    WriteToSource( const com::sun::star::uno::Reference<
83                                             com::sun::star::uno::XInterface>& xMember,
84                                             sal_Int32 nPosition );
85 };
86 
87 
88 bool operator == (const ::com::sun::star::sheet::DataPilotFieldSortInfo &l, const ::com::sun::star::sheet::DataPilotFieldSortInfo &r );
89 bool operator == (const ::com::sun::star::sheet::DataPilotFieldAutoShowInfo &l, const ::com::sun::star::sheet::DataPilotFieldAutoShowInfo &r );
90 bool operator == (const ::com::sun::star::sheet::DataPilotFieldReference &l, const ::com::sun::star::sheet::DataPilotFieldReference &r );
91 class SC_DLLPUBLIC ScDPSaveDimension
92 {
93 private:
94     String      aName;
95     String*     pSelectedPage;
96     ::std::auto_ptr<rtl::OUString> mpLayoutName;
97     ::std::auto_ptr<rtl::OUString> mpSubtotalName;
98     sal_Bool        bIsDataLayout;
99     sal_Bool        bDupFlag;
100     sal_uInt16      nOrientation;
101     sal_uInt16      nFunction;          // enum GeneralFunction, for data dimensions
102     long        nUsedHierarchy;
103     sal_uInt16      nShowEmptyMode;     //! at level
104     sal_Bool        bSubTotalDefault;   //! at level
105     long        nSubTotalCount;
106     sal_uInt16*     pSubTotalFuncs;     // enum GeneralFunction
107     ::com::sun::star::sheet::DataPilotFieldReference* pReferenceValue;
108     ::com::sun::star::sheet::DataPilotFieldSortInfo*  pSortInfo;            // (level)
109     ::com::sun::star::sheet::DataPilotFieldAutoShowInfo* pAutoShowInfo;     // (level)
110     ::com::sun::star::sheet::DataPilotFieldLayoutInfo* pLayoutInfo;         // (level)
111 
112 public:
113     typedef std::hash_map <String, ScDPSaveMember*, rtl::OUStringHash> MemberHash;
114     typedef std::list <ScDPSaveMember*>                                MemberList;
115 private:
116     MemberHash maMemberHash;
117     MemberList maMemberList;
118 public:
119                             ScDPSaveDimension(const String& rName, sal_Bool bDataLayout);
120                             ScDPSaveDimension(const ScDPSaveDimension& r);
121                             ~ScDPSaveDimension();
122 
123     sal_Bool                    operator== ( const ScDPSaveDimension& r ) const;
124 
GetMembers() const125     const MemberList&       GetMembers() const { return maMemberList; }
126     void                    AddMember(ScDPSaveMember* pMember);
127 
SetDupFlag(sal_Bool bSet)128     void                    SetDupFlag(sal_Bool bSet)   { bDupFlag = bSet; }
GetDupFlag() const129     sal_Bool                    GetDupFlag() const      { return bDupFlag; }
130 
GetName() const131     const String&           GetName() const         { return aName; }
IsDataLayout() const132     sal_Bool                    IsDataLayout() const    { return bIsDataLayout; }
133 
134     void                    SetName( const String& rNew );  // used if the source dim was renamed (groups)
135 
136     void                    SetOrientation(sal_uInt16 nNew);
137     void                    SetSubTotals(long nCount, const sal_uInt16* pFuncs);
GetSubTotalsCount() const138     long                    GetSubTotalsCount() const { return nSubTotalCount; }
GetSubTotalFunc(long nIndex) const139     sal_uInt16                  GetSubTotalFunc(long nIndex) const { return pSubTotalFuncs[nIndex]; }
140     bool                    HasShowEmpty() const;
141     void                    SetShowEmpty(sal_Bool bSet);
GetShowEmpty() const142     sal_Bool                    GetShowEmpty() const { return sal_Bool(nShowEmptyMode); }
143     void                    SetFunction(sal_uInt16 nNew);       // enum GeneralFunction
GetFunction() const144     sal_uInt16                  GetFunction() const { return nFunction; }
145     void                    SetUsedHierarchy(long nNew);
GetUsedHierarchy() const146     long                    GetUsedHierarchy() const { return nUsedHierarchy; }
147 
148     void                    SetLayoutName(const ::rtl::OUString& rName);
149     const ::rtl::OUString*  GetLayoutName() const;
150     void                    RemoveLayoutName();
151     void                    SetSubtotalName(const ::rtl::OUString& rName);
152     const ::rtl::OUString*  GetSubtotalName() const;
153 
154     bool                    IsMemberNameInUse(const ::rtl::OUString& rName) const;
155 
GetReferenceValue() const156     const ::com::sun::star::sheet::DataPilotFieldReference* GetReferenceValue() const   { return pReferenceValue; }
157     void                    SetReferenceValue(const ::com::sun::star::sheet::DataPilotFieldReference* pNew);
158 
GetSortInfo() const159     const ::com::sun::star::sheet::DataPilotFieldSortInfo* GetSortInfo() const          { return pSortInfo; }
160     void                    SetSortInfo(const ::com::sun::star::sheet::DataPilotFieldSortInfo* pNew);
GetAutoShowInfo() const161     const ::com::sun::star::sheet::DataPilotFieldAutoShowInfo* GetAutoShowInfo() const  { return pAutoShowInfo; }
162     void                    SetAutoShowInfo(const ::com::sun::star::sheet::DataPilotFieldAutoShowInfo* pNew);
GetLayoutInfo() const163     const ::com::sun::star::sheet::DataPilotFieldLayoutInfo* GetLayoutInfo() const      { return pLayoutInfo; }
164     void                    SetLayoutInfo(const ::com::sun::star::sheet::DataPilotFieldLayoutInfo* pNew);
165 
166     void                    SetCurrentPage( const String* pPage );      // NULL = no selection (all)
167     sal_Bool                    HasCurrentPage() const;
168     const String&           GetCurrentPage() const;
169 
GetOrientation() const170     sal_uInt16                  GetOrientation() const  { return nOrientation; }
171 
172     ScDPSaveMember*         GetExistingMemberByName(const String& rName);
173     ScDPSaveMember*         GetMemberByName(const String& rName);
174 
175     void                    SetMemberPosition( const String& rName, sal_Int32 nNewPos );
176 
177     void                    WriteToSource( const com::sun::star::uno::Reference<
178                                             com::sun::star::uno::XInterface>& xDim );
179     void                    Refresh( const com::sun::star::uno::Reference<
180                                     com::sun::star::sheet::XDimensionsSupplier>& xSource ,
181                                     const   std::list<String> & deletedDims);
182 
183     void                    UpdateMemberVisibility(const ::std::hash_map< ::rtl::OUString, bool, ::rtl::OUStringHash>& rData);
184 
185     bool                    HasInvisibleMember() const;
186 };
187 
188 
189 class ScDPSaveData
190 {
191 private:
192     List        aDimList;
193     ScDPDimensionSaveData* pDimensionData;      // settings that create new dimensions
194     sal_uInt16      nColumnGrandMode;
195     sal_uInt16      nRowGrandMode;
196     sal_uInt16      nIgnoreEmptyMode;
197     sal_uInt16      nRepeatEmptyMode;
198     sal_Bool        bFilterButton;      // not passed to DataPilotSource
199     sal_Bool        bDrillDown;         // not passed to DataPilotSource
200     // Wang Xu Ming -- 2009-8-17
201     // DataPilot Migration - Cache&&Performance
202     long      mnCacheId;
203     // End Comments
204 
205     /** if true, all dimensions already have all of their member instances
206      *  created. */
207     bool        mbDimensionMembersBuilt;
208 
209     ::std::auto_ptr<rtl::OUString> mpGrandTotalName;
210 
211 public:
212     SC_DLLPUBLIC                        ScDPSaveData();
213                             ScDPSaveData(const ScDPSaveData& r);
214     SC_DLLPUBLIC                        ~ScDPSaveData();
215 
216     ScDPSaveData&           operator= ( const ScDPSaveData& r );
217 
218     sal_Bool                    operator== ( const ScDPSaveData& r ) const;
219 
220     SC_DLLPUBLIC void                    SetGrandTotalName(const ::rtl::OUString& rName);
221     SC_DLLPUBLIC const ::rtl::OUString*  GetGrandTotalName() const;
222 
GetDimensions() const223     const List&             GetDimensions() const { return aDimList; }
AddDimension(ScDPSaveDimension * pDim)224     void                    AddDimension(ScDPSaveDimension* pDim) { aDimList.Insert(pDim, LIST_APPEND); }
225 
226     ScDPSaveDimension*      GetDimensionByName(const String& rName);
227     SC_DLLPUBLIC ScDPSaveDimension*     GetDataLayoutDimension();
228     SC_DLLPUBLIC ScDPSaveDimension*      GetExistingDataLayoutDimension() const;
229 
230     ScDPSaveDimension*      DuplicateDimension(const String& rName);
231     SC_DLLPUBLIC ScDPSaveDimension&      DuplicateDimension(const ScDPSaveDimension& rDim);
232 
233     SC_DLLPUBLIC ScDPSaveDimension*     GetExistingDimensionByName(const String& rName) const;
234     SC_DLLPUBLIC ScDPSaveDimension*     GetNewDimensionByName(const String& rName);
235 
236     void                    RemoveDimensionByName(const String& rName);
237 
238     ScDPSaveDimension*      GetInnermostDimension(sal_uInt16 nOrientation);
239     ScDPSaveDimension*      GetFirstDimension(::com::sun::star::sheet::DataPilotFieldOrientation eOrientation);
240     long                    GetDataDimensionCount() const;
241 
242 
243     void                    SetPosition( ScDPSaveDimension* pDim, long nNew );
244     SC_DLLPUBLIC void                   SetColumnGrand( sal_Bool bSet );
GetColumnGrand() const245     sal_Bool                    GetColumnGrand() const { return sal_Bool(nColumnGrandMode); }
246     SC_DLLPUBLIC void                   SetRowGrand( sal_Bool bSet );
GetRowGrand() const247     sal_Bool                    GetRowGrand() const { return sal_Bool(nRowGrandMode); }
248     void                    SetIgnoreEmptyRows( sal_Bool bSet );
GetIgnoreEmptyRows() const249     sal_Bool                    GetIgnoreEmptyRows() const { return sal_Bool(nIgnoreEmptyMode); }
250     void                    SetRepeatIfEmpty( sal_Bool bSet );
GetRepeatIfEmpty() const251     sal_Bool                    GetRepeatIfEmpty() const { return sal_Bool(nRepeatEmptyMode); }
252 
253     SC_DLLPUBLIC void                    SetFilterButton( sal_Bool bSet );
GetFilterButton() const254     sal_Bool                    GetFilterButton() const { return bFilterButton; }
255     SC_DLLPUBLIC void                    SetDrillDown( sal_Bool bSet );
GetDrillDown() const256     sal_Bool                    GetDrillDown() const { return bDrillDown; }
257 
258     void                    WriteToSource( const com::sun::star::uno::Reference<
259         com::sun::star::sheet::XDimensionsSupplier>& xSource );
260     // Wang Xu Ming -- 2009-8-17
261     // DataPilot Migration - Cache&&Performance
262     void                    Refresh( const com::sun::star::uno::Reference<
263                                             com::sun::star::sheet::XDimensionsSupplier>& xSource );
264     sal_Bool                    IsEmpty() const;
GetCacheId() const265     inline long GetCacheId() const{ return mnCacheId; }
SetCacheId(long nCacheId)266     inline void SetCacheId( long nCacheId ){ mnCacheId = nCacheId; }
267     // End Comments
GetExistingDimensionData() const268     const ScDPDimensionSaveData* GetExistingDimensionData() const   { return pDimensionData; }
269     SC_DLLPUBLIC ScDPDimensionSaveData*  GetDimensionData();     // create if not there
270     void                    SetDimensionData( const ScDPDimensionSaveData* pNew );      // copied
271     void                    BuildAllDimensionMembers(ScDPTableData* pData);
272     void                    BuildAllDimensionMembersFromSource(ScDPObject* pDPObj);
273 
274     /**
275      * Check whether a dimension has one or more invisible members.
276      *
277      * @param rDimName dimension name
278      */
279     SC_DLLPUBLIC bool       HasInvisibleMember(const ::rtl::OUString& rDimName) const;
280 };
281 
282 
283 #endif
284 
285