xref: /AOO41X/main/sc/source/filter/xml/XMLChangeTrackingImportHelper.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_XMLCHANGETRACKINGIMPORTHELPER_HXX
25 #define SC_XMLCHANGETRACKINGIMPORTHELPER_HXX
26 
27 #include "chgtrack.hxx"
28 #include <list>
29 #include <com/sun/star/util/DateTime.hpp>
30 
31 class ScBaseCell;
32 class ScDocument;
33 class DateTime;
34 
35 struct ScMyActionInfo
36 {
37     rtl::OUString sUser;
38     rtl::OUString sComment;
39     com::sun::star::util::DateTime aDateTime;
40 };
41 
42 struct ScMyCellInfo
43 {
44     ScBaseCell*        pCell;
45     rtl::OUString      sFormulaAddress;
46     rtl::OUString      sFormula;
47     String             sInputString;
48     double             fValue;
49     sal_Int32          nMatrixCols;
50     sal_Int32          nMatrixRows;
51     formula::FormulaGrammar::Grammar eGrammar;
52     sal_uInt16         nType;
53     sal_uInt8          nMatrixFlag;
54 
55     ScMyCellInfo(ScBaseCell* pCell, const rtl::OUString& sFormulaAddress, const rtl::OUString& sFormula,
56                 const formula::FormulaGrammar::Grammar eGrammar, const rtl::OUString& sInputString,
57                 const double& fValue, const sal_uInt16 nType, const sal_uInt8 nMatrixFlag, const sal_Int32 nMatrixCols,
58                 const sal_Int32 nMatrixRows);
59     ~ScMyCellInfo();
60 
61     ScBaseCell* CreateCell(ScDocument* pDoc);
62 
63 private:
64     ScMyCellInfo(); // disabled
65 };
66 
67 struct ScMyDeleted
68 {
69     sal_uInt32 nID;
70     ScMyCellInfo* pCellInfo;
71 
72     ScMyDeleted();
73     ~ScMyDeleted();
74 };
75 
76 typedef std::list<ScMyDeleted*> ScMyDeletedList;
77 
78 struct ScMyGenerated
79 {
80     ScBigRange      aBigRange;
81     sal_uInt32      nID;
82     ScMyCellInfo*   pCellInfo;
83 
84     ScMyGenerated(ScMyCellInfo* pCellInfo, const ScBigRange& aBigRange);
85     ~ScMyGenerated();
86 };
87 
88 typedef std::list<ScMyGenerated*> ScMyGeneratedList;
89 
90 struct ScMyInsertionCutOff
91 {
92     sal_uInt32 nID;
93     sal_Int32 nPosition;
94 
ScMyInsertionCutOffScMyInsertionCutOff95     ScMyInsertionCutOff(const sal_uInt32 nTempID, const sal_Int32 nTempPosition) :
96             nID(nTempID), nPosition(nTempPosition) {}
97 };
98 
99 struct ScMyMoveCutOff
100 {
101     sal_uInt32 nID;
102     sal_Int32 nStartPosition;
103     sal_Int32 nEndPosition;
104 
ScMyMoveCutOffScMyMoveCutOff105     ScMyMoveCutOff(const sal_uInt32 nTempID, const sal_Int32 nStartPos, const sal_Int32 nEndPos) :
106             nID(nTempID), nStartPosition(nStartPos), nEndPosition(nEndPos) {}
107 };
108 
109 typedef std::list<ScMyMoveCutOff> ScMyMoveCutOffs;
110 
111 struct ScMyMoveRanges
112 {
113     ScBigRange aSourceRange;
114     ScBigRange aTargetRange;
115 
ScMyMoveRangesScMyMoveRanges116     ScMyMoveRanges(const ScBigRange& aSource, const ScBigRange aTarget) :
117             aSourceRange(aSource), aTargetRange(aTarget) {}
118 };
119 
120 typedef std::list<sal_uInt32> ScMyDependencies;
121 
122 struct ScMyBaseAction
123 {
124     ScMyActionInfo aInfo;
125     ScBigRange aBigRange;
126     ScMyDependencies aDependencies;
127     ScMyDeletedList aDeletedList;
128     sal_uInt32 nActionNumber;
129     sal_uInt32 nRejectingNumber;
130     sal_uInt32 nPreviousAction;
131     ScChangeActionType nActionType;
132     ScChangeActionState nActionState;
133 
134     ScMyBaseAction(const ScChangeActionType nActionType);
135     virtual ~ScMyBaseAction();
136 };
137 
138 struct ScMyInsAction : public ScMyBaseAction
139 {
140     ScMyInsAction(const ScChangeActionType nActionType);
141     ~ScMyInsAction();
142 };
143 
144 struct ScMyDelAction : public ScMyBaseAction
145 {
146     ScMyGeneratedList aGeneratedList;
147     ScMyInsertionCutOff* pInsCutOff;
148     ScMyMoveCutOffs aMoveCutOffs;
149     sal_Int32 nD;
150 
151     ScMyDelAction(const ScChangeActionType nActionType);
152     ~ScMyDelAction();
153 };
154 
155 struct ScMyMoveAction : public ScMyBaseAction
156 {
157     ScMyGeneratedList aGeneratedList;
158     ScMyMoveRanges* pMoveRanges;
159 
160     ScMyMoveAction();
161     ~ScMyMoveAction();
162 };
163 
164 struct ScMyContentAction : public ScMyBaseAction
165 {
166     ScMyCellInfo*   pCellInfo;
167 
168     ScMyContentAction();
169     ~ScMyContentAction();
170 };
171 
172 struct ScMyRejAction : public ScMyBaseAction
173 {
174     ScMyRejAction();
175     ~ScMyRejAction();
176 };
177 
178 typedef std::list<ScMyBaseAction*> ScMyActions;
179 
180 class ScChangeViewSettings;
181 
182 class ScXMLChangeTrackingImportHelper
183 {
184     ScStrCollection     aUsers;
185     ScMyActions         aActions;
186     com::sun::star::uno::Sequence<sal_Int8> aProtect;
187     ScDocument*         pDoc;
188     ScChangeTrack*      pTrack;
189     ScMyBaseAction*     pCurrentAction;
190     rtl::OUString       sIDPrefix;
191     sal_uInt32          nPrefixLength;
192     sal_Int16           nMultiSpanned;
193     sal_Int16           nMultiSpannedSlaveCount;
194     sal_Bool            bChangeTrack;
195 
196 private:
197     void ConvertInfo(const ScMyActionInfo& aInfo, String& rUser, DateTime& aDateTime);
198     ScChangeAction* CreateInsertAction(ScMyInsAction* pAction);
199     ScChangeAction* CreateDeleteAction(ScMyDelAction* pAction);
200     ScChangeAction* CreateMoveAction(ScMyMoveAction* pAction);
201     ScChangeAction* CreateRejectionAction(ScMyRejAction* pAction);
202     ScChangeAction* CreateContentAction(ScMyContentAction* pAction);
203 
204     void CreateGeneratedActions(ScMyGeneratedList& rList);
205 
206 public:
207     ScXMLChangeTrackingImportHelper();
208     ~ScXMLChangeTrackingImportHelper();
209 
SetChangeTrack(sal_Bool bValue)210     void SetChangeTrack(sal_Bool bValue) { bChangeTrack = bValue; }
SetProtection(const com::sun::star::uno::Sequence<sal_Int8> & rProtect)211     void SetProtection(const com::sun::star::uno::Sequence<sal_Int8>& rProtect) { aProtect = rProtect; }
212     void StartChangeAction(const ScChangeActionType nActionType);
213 
214     sal_uInt32 GetIDFromString(const rtl::OUString& sID);
215 
SetActionNumber(const sal_uInt32 nActionNumber)216     void SetActionNumber(const sal_uInt32 nActionNumber) { pCurrentAction->nActionNumber = nActionNumber; }
SetActionState(const ScChangeActionState nActionState)217     void SetActionState(const ScChangeActionState nActionState) { pCurrentAction->nActionState = nActionState; }
SetRejectingNumber(const sal_uInt32 nRejectingNumber)218     void SetRejectingNumber(const sal_uInt32 nRejectingNumber) { pCurrentAction->nRejectingNumber = nRejectingNumber; }
219     void SetActionInfo(const ScMyActionInfo& aInfo);
SetBigRange(const ScBigRange & aBigRange)220     void SetBigRange(const ScBigRange& aBigRange) { pCurrentAction->aBigRange = aBigRange; }
221     void SetPreviousChange(const sal_uInt32 nPreviousAction, ScMyCellInfo* pCellInfo);
222     void SetPosition(const sal_Int32 nPosition, const sal_Int32 nCount, const sal_Int32 nTable);
AddDependence(const sal_uInt32 nID)223     void AddDependence(const sal_uInt32 nID) { pCurrentAction->aDependencies.push_front(nID); }
224     void AddDeleted(const sal_uInt32 nID);
225     void AddDeleted(const sal_uInt32 nID, ScMyCellInfo* pCellInfo);
226     void SetMultiSpanned(const sal_Int16 nMultiSpanned);
227     void SetInsertionCutOff(const sal_uInt32 nID, const sal_Int32 nPosition);
228     void AddMoveCutOff(const sal_uInt32 nID, const sal_Int32 nStartPosition, const sal_Int32 nEndPosition);
229     void SetMoveRanges(const ScBigRange& aSourceRange, const ScBigRange& aTargetRange);
230     void GetMultiSpannedRange();
231     void AddGenerated(ScMyCellInfo* pCellInfo, const ScBigRange& aBigRange);
232 
233     void EndChangeAction();
234 
235     void SetDeletionDependencies(ScMyDelAction* pAction, ScChangeActionDel* pDelAct);
236     void SetMovementDependencies(ScMyMoveAction* pAction, ScChangeActionMove* pMoveAct);
237     void SetContentDependencies(ScMyContentAction* pAction, ScChangeActionContent* pActContent);
238     void SetDependencies(ScMyBaseAction* pAction);
239 
240     void SetNewCell(ScMyContentAction* pAction);
241 
242     void CreateChangeTrack(ScDocument* pDoc);
243 };
244 
245 #endif
246