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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26
27 #include <tools/resid.hxx>
28 #include <tools/string.hxx>
29
30 #include <poolfmt.hxx>
31 #include <charfmt.hxx>
32 #include <frmfmt.hxx>
33 #include <SwUndoFmt.hxx>
34 #include <SwRewriter.hxx>
35 #include <swundo.hxx>
36 #include <undobj.hxx>
37 #include <fmtcol.hxx>
38 #include <doc.hxx>
39 #include <IDocumentUndoRedo.hxx>
40 #include <comcore.hrc>
41
SwUndoFmtCreate(SwUndoId nUndoId,SwFmt * _pNew,SwFmt * _pDerivedFrom,SwDoc * _pDoc)42 SwUndoFmtCreate::SwUndoFmtCreate
43 (SwUndoId nUndoId, SwFmt * _pNew, SwFmt * _pDerivedFrom, SwDoc * _pDoc)
44 : SwUndo(nUndoId), pNew(_pNew),
45 pDoc(_pDoc), pNewSet(NULL), nId(0), bAuto(sal_False)
46 {
47 if (_pDerivedFrom)
48 sDerivedFrom = _pDerivedFrom->GetName();
49 }
50
~SwUndoFmtCreate()51 SwUndoFmtCreate::~SwUndoFmtCreate()
52 {
53 }
54
UndoImpl(::sw::UndoRedoContext &)55 void SwUndoFmtCreate::UndoImpl(::sw::UndoRedoContext &)
56 {
57 if (pNew)
58 {
59 if (sNewName.Len() == 0 && pNew)
60 sNewName = pNew->GetName();
61
62 if (sNewName.Len() > 0)
63 pNew = Find(sNewName);
64
65 if (pNew)
66 {
67 pNewSet = new SfxItemSet(pNew->GetAttrSet());
68 nId = pNew->GetPoolFmtId() & COLL_GET_RANGE_BITS;
69 bAuto = pNew->IsAuto();
70
71 Delete();
72 }
73 }
74 }
75
RedoImpl(::sw::UndoRedoContext &)76 void SwUndoFmtCreate::RedoImpl(::sw::UndoRedoContext &)
77 {
78 SwFmt * pDerivedFrom = Find(sDerivedFrom);
79 SwFmt * pFmt = Create(pDerivedFrom);
80
81 if (pFmt && pNewSet)
82 {
83 pFmt->SetAuto(bAuto);
84 pDoc->ChgFmt(*pFmt, *pNewSet);
85 pFmt->SetPoolFmtId((pFmt->GetPoolFmtId()
86 & ~COLL_GET_RANGE_BITS)
87 | nId);
88
89 pNew = pFmt;
90 }
91 else
92 pNew = NULL;
93 }
94
GetRewriter() const95 SwRewriter SwUndoFmtCreate::GetRewriter() const
96 {
97 if (sNewName.Len() == 0 && pNew)
98 sNewName = pNew->GetName();
99
100 SwRewriter aRewriter;
101
102 aRewriter.AddRule(UNDO_ARG1, sNewName);
103
104 return aRewriter;
105 }
106
SwUndoFmtDelete(SwUndoId nUndoId,SwFmt * _pOld,SwDoc * _pDoc)107 SwUndoFmtDelete::SwUndoFmtDelete
108 (SwUndoId nUndoId, SwFmt * _pOld, SwDoc * _pDoc)
109 : SwUndo(nUndoId),
110 pDoc(_pDoc), sOldName(_pOld->GetName()),
111 aOldSet(_pOld->GetAttrSet())
112 {
113 sDerivedFrom = _pOld->DerivedFrom()->GetName();
114 nId = _pOld->GetPoolFmtId() & COLL_GET_RANGE_BITS;
115 bAuto = _pOld->IsAuto();
116 }
117
~SwUndoFmtDelete()118 SwUndoFmtDelete::~SwUndoFmtDelete()
119 {
120 }
121
UndoImpl(::sw::UndoRedoContext &)122 void SwUndoFmtDelete::UndoImpl(::sw::UndoRedoContext &)
123 {
124 SwFmt * pDerivedFrom = Find(sDerivedFrom);
125
126 SwFmt * pFmt = Create(pDerivedFrom);
127
128 if (pFmt)
129 {
130 pDoc->ChgFmt(*pFmt, aOldSet);
131 pFmt->SetAuto(bAuto);
132 pFmt->SetPoolFmtId((pFmt->GetPoolFmtId() &
133 ~COLL_GET_RANGE_BITS)
134 | nId);
135 }
136 }
137
RedoImpl(::sw::UndoRedoContext &)138 void SwUndoFmtDelete::RedoImpl(::sw::UndoRedoContext &)
139 {
140 SwFmt * pOld = Find(sOldName);
141
142 if (pOld)
143 {
144 Delete(pOld);
145 }
146 }
147
GetRewriter() const148 SwRewriter SwUndoFmtDelete::GetRewriter() const
149 {
150 SwRewriter aRewriter;
151
152 aRewriter.AddRule(UNDO_ARG1, sOldName);
153
154 return aRewriter;
155 }
156
SwUndoRenameFmt(SwUndoId nUndoId,const String & _sOldName,const String & _sNewName,SwDoc * _pDoc)157 SwUndoRenameFmt::SwUndoRenameFmt(SwUndoId nUndoId,
158 const String & _sOldName,
159 const String & _sNewName,
160 SwDoc * _pDoc)
161 : SwUndo(nUndoId), sOldName(_sOldName),
162 sNewName(_sNewName), pDoc(_pDoc)
163 {
164 }
165
166
~SwUndoRenameFmt()167 SwUndoRenameFmt::~SwUndoRenameFmt()
168 {
169 }
170
UndoImpl(::sw::UndoRedoContext &)171 void SwUndoRenameFmt::UndoImpl(::sw::UndoRedoContext &)
172 {
173 SwFmt * pFmt = Find(sNewName);
174
175 if (pFmt)
176 {
177 pDoc->RenameFmt(*pFmt, sOldName, sal_True);
178 }
179 }
180
RedoImpl(::sw::UndoRedoContext &)181 void SwUndoRenameFmt::RedoImpl(::sw::UndoRedoContext &)
182 {
183 SwFmt * pFmt = Find(sOldName);
184
185 if (pFmt)
186 {
187 pDoc->RenameFmt(*pFmt, sNewName, sal_True);
188 }
189 }
190
GetRewriter() const191 SwRewriter SwUndoRenameFmt::GetRewriter() const
192 {
193 SwRewriter aRewriter;
194
195 aRewriter.AddRule(UNDO_ARG1, sOldName);
196 aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS));
197 aRewriter.AddRule(UNDO_ARG3, sNewName);
198
199 return aRewriter;
200 }
201
SwUndoTxtFmtCollCreate(SwTxtFmtColl * _pNew,SwTxtFmtColl * _pDerivedFrom,SwDoc * _pDoc)202 SwUndoTxtFmtCollCreate::SwUndoTxtFmtCollCreate
203 (SwTxtFmtColl * _pNew, SwTxtFmtColl * _pDerivedFrom, SwDoc * _pDoc)
204 : SwUndoFmtCreate(UNDO_TXTFMTCOL_CREATE, _pNew, _pDerivedFrom, _pDoc)
205 {
206 }
207
Create(SwFmt * pDerivedFrom)208 SwFmt * SwUndoTxtFmtCollCreate::Create(SwFmt * pDerivedFrom)
209 {
210 return pDoc->MakeTxtFmtColl(sNewName, (SwTxtFmtColl *)pDerivedFrom, sal_True);
211 }
212
Delete()213 void SwUndoTxtFmtCollCreate::Delete()
214 {
215 pDoc->DelTxtFmtColl((SwTxtFmtColl *) pNew, sal_True);
216 }
217
Find(const String & rName) const218 SwFmt * SwUndoTxtFmtCollCreate::Find(const String & rName) const
219 {
220 return pDoc->FindTxtFmtCollByName(rName);
221 }
222
SwUndoTxtFmtCollDelete(SwTxtFmtColl * _pOld,SwDoc * _pDoc)223 SwUndoTxtFmtCollDelete::SwUndoTxtFmtCollDelete(SwTxtFmtColl * _pOld,
224 SwDoc * _pDoc)
225 : SwUndoFmtDelete(UNDO_TXTFMTCOL_DELETE, _pOld, _pDoc)
226 {
227 }
228
Create(SwFmt * pDerivedFrom)229 SwFmt * SwUndoTxtFmtCollDelete::Create(SwFmt * pDerivedFrom)
230 {
231 return pDoc->MakeTxtFmtColl(sOldName, (SwTxtFmtColl *) pDerivedFrom, sal_True);
232 }
233
Delete(SwFmt * pOld)234 void SwUndoTxtFmtCollDelete::Delete(SwFmt * pOld)
235 {
236 pDoc->DelTxtFmtColl((SwTxtFmtColl *) pOld, sal_True);
237 }
238
Find(const String & rName) const239 SwFmt * SwUndoTxtFmtCollDelete::Find(const String & rName) const
240 {
241 return pDoc->FindTxtFmtCollByName(rName);
242 }
243
SwUndoRenameFmtColl(const String & sInitOldName,const String & sInitNewName,SwDoc * _pDoc)244 SwUndoRenameFmtColl::SwUndoRenameFmtColl(const String & sInitOldName,
245 const String & sInitNewName,
246 SwDoc * _pDoc)
247 : SwUndoRenameFmt(UNDO_TXTFMTCOL_RENAME, sInitOldName, sInitNewName, _pDoc)
248 {
249 }
250
Find(const String & rName) const251 SwFmt * SwUndoRenameFmtColl::Find(const String & rName) const
252 {
253 return pDoc->FindTxtFmtCollByName(rName);
254 }
255
SwUndoCharFmtCreate(SwCharFmt * pNewFmt,SwCharFmt * pDerivedFrom,SwDoc * pDocument)256 SwUndoCharFmtCreate::SwUndoCharFmtCreate(SwCharFmt * pNewFmt,
257 SwCharFmt * pDerivedFrom,
258 SwDoc * pDocument)
259 : SwUndoFmtCreate(UNDO_CHARFMT_CREATE, pNewFmt, pDerivedFrom, pDocument)
260 {
261 }
262
Create(SwFmt * pDerivedFrom)263 SwFmt * SwUndoCharFmtCreate::Create(SwFmt * pDerivedFrom)
264 {
265 return pDoc->MakeCharFmt(sNewName, (SwCharFmt *) pDerivedFrom, sal_True);
266 }
267
Delete()268 void SwUndoCharFmtCreate::Delete()
269 {
270 pDoc->DelCharFmt((SwCharFmt *) pNew, sal_True);
271 }
272
Find(const String & rName) const273 SwFmt * SwUndoCharFmtCreate::Find(const String & rName) const
274 {
275 return pDoc->FindCharFmtByName(rName);
276 }
277
SwUndoCharFmtDelete(SwCharFmt * pOld,SwDoc * pDocument)278 SwUndoCharFmtDelete::SwUndoCharFmtDelete(SwCharFmt * pOld, SwDoc * pDocument)
279 : SwUndoFmtDelete(UNDO_CHARFMT_DELETE, pOld, pDocument)
280 {
281 }
282
Create(SwFmt * pDerivedFrom)283 SwFmt * SwUndoCharFmtDelete::Create(SwFmt * pDerivedFrom)
284 {
285 return pDoc->MakeCharFmt(sOldName, (SwCharFmt *) pDerivedFrom, sal_True);
286 }
287
Delete(SwFmt * pFmt)288 void SwUndoCharFmtDelete::Delete(SwFmt * pFmt)
289 {
290 pDoc->DelCharFmt((SwCharFmt *) pFmt, sal_True);
291 }
292
Find(const String & rName) const293 SwFmt * SwUndoCharFmtDelete::Find(const String & rName) const
294 {
295 return pDoc->FindCharFmtByName(rName);
296 }
297
SwUndoRenameCharFmt(const String & sInitOldName,const String & sInitNewName,SwDoc * pDocument)298 SwUndoRenameCharFmt::SwUndoRenameCharFmt(const String & sInitOldName,
299 const String & sInitNewName,
300 SwDoc * pDocument)
301 : SwUndoRenameFmt(UNDO_CHARFMT_RENAME, sInitOldName, sInitNewName, pDocument)
302 {
303 }
304
Find(const String & rName) const305 SwFmt * SwUndoRenameCharFmt::Find(const String & rName) const
306 {
307 return pDoc->FindCharFmtByName(rName);
308 }
309
SwUndoFrmFmtCreate(SwFrmFmt * pNewFmt,SwFrmFmt * pDerivedFrom,SwDoc * pDocument)310 SwUndoFrmFmtCreate::SwUndoFrmFmtCreate(SwFrmFmt * pNewFmt,
311 SwFrmFmt * pDerivedFrom,
312 SwDoc * pDocument)
313 : SwUndoFmtCreate(UNDO_FRMFMT_CREATE, pNewFmt, pDerivedFrom, pDocument),
314 bAuto(pNewFmt->IsAuto())
315 {
316 }
317
Create(SwFmt * pDerivedFrom)318 SwFmt * SwUndoFrmFmtCreate::Create(SwFmt * pDerivedFrom)
319 {
320 return pDoc->MakeFrmFmt(sNewName, (SwFrmFmt *) pDerivedFrom, sal_True, bAuto);
321 }
322
Delete()323 void SwUndoFrmFmtCreate::Delete()
324 {
325 pDoc->DelFrmFmt((SwFrmFmt *) pNew, sal_True);
326 }
327
Find(const String & rName) const328 SwFmt * SwUndoFrmFmtCreate::Find(const String & rName) const
329 {
330 return pDoc->FindFrmFmtByName(rName);
331 }
332
SwUndoFrmFmtDelete(SwFrmFmt * pOld,SwDoc * pDocument)333 SwUndoFrmFmtDelete::SwUndoFrmFmtDelete(SwFrmFmt * pOld, SwDoc * pDocument)
334 : SwUndoFmtDelete(UNDO_FRMFMT_DELETE, pOld, pDocument)
335 {
336 }
337
Create(SwFmt * pDerivedFrom)338 SwFmt * SwUndoFrmFmtDelete::Create(SwFmt * pDerivedFrom)
339 {
340 return pDoc->MakeFrmFmt(sOldName, (SwFrmFmt *) pDerivedFrom, sal_True);
341 }
342
Delete(SwFmt * pFmt)343 void SwUndoFrmFmtDelete::Delete(SwFmt * pFmt)
344 {
345 pDoc->DelFrmFmt((SwFrmFmt *) pFmt, sal_True);
346 }
347
Find(const String & rName) const348 SwFmt * SwUndoFrmFmtDelete::Find(const String & rName) const
349 {
350 return pDoc->FindFrmFmtByName(rName);
351 }
352
SwUndoRenameFrmFmt(const String & sInitOldName,const String & sInitNewName,SwDoc * pDocument)353 SwUndoRenameFrmFmt::SwUndoRenameFrmFmt(const String & sInitOldName,
354 const String & sInitNewName,
355 SwDoc * pDocument)
356 : SwUndoRenameFmt(UNDO_FRMFMT_RENAME, sInitOldName, sInitNewName, pDocument)
357 {
358 }
359
Find(const String & rName) const360 SwFmt * SwUndoRenameFrmFmt::Find(const String & rName) const
361 {
362 return pDoc->FindFrmFmtByName(rName);
363 }
364
SwUndoNumruleCreate(const SwNumRule * _pNew,SwDoc * _pDoc)365 SwUndoNumruleCreate::SwUndoNumruleCreate(const SwNumRule * _pNew,
366 SwDoc * _pDoc)
367 : SwUndo(UNDO_NUMRULE_CREATE), pNew(_pNew), aNew(*_pNew), pDoc(_pDoc),
368 bInitialized(false)
369 {
370 }
371
UndoImpl(::sw::UndoRedoContext &)372 void SwUndoNumruleCreate::UndoImpl(::sw::UndoRedoContext &)
373 {
374 if (! bInitialized)
375 {
376 aNew = *pNew;
377 bInitialized = true;
378 }
379
380 pDoc->DelNumRule(aNew.GetName(), sal_True);
381 }
382
RedoImpl(::sw::UndoRedoContext &)383 void SwUndoNumruleCreate::RedoImpl(::sw::UndoRedoContext &)
384 {
385 pDoc->MakeNumRule(aNew.GetName(), &aNew, sal_True);
386 }
387
GetRewriter() const388 SwRewriter SwUndoNumruleCreate::GetRewriter() const
389 {
390 SwRewriter aResult;
391
392 if (! bInitialized)
393 {
394 aNew = *pNew;
395 bInitialized = true;
396 }
397
398 aResult.AddRule(UNDO_ARG1, aNew.GetName());
399
400 return aResult;
401 }
402
SwUndoNumruleDelete(const SwNumRule & rRule,SwDoc * _pDoc)403 SwUndoNumruleDelete::SwUndoNumruleDelete(const SwNumRule & rRule,
404 SwDoc * _pDoc)
405 : SwUndo(UNDO_NUMRULE_DELETE), aOld(rRule), pDoc(_pDoc)
406 {
407 }
408
UndoImpl(::sw::UndoRedoContext &)409 void SwUndoNumruleDelete::UndoImpl(::sw::UndoRedoContext &)
410 {
411 pDoc->MakeNumRule(aOld.GetName(), &aOld, sal_True);
412 }
413
RedoImpl(::sw::UndoRedoContext &)414 void SwUndoNumruleDelete::RedoImpl(::sw::UndoRedoContext &)
415 {
416 pDoc->DelNumRule(aOld.GetName(), sal_True);
417 }
418
GetRewriter() const419 SwRewriter SwUndoNumruleDelete::GetRewriter() const
420 {
421 SwRewriter aResult;
422
423 aResult.AddRule(UNDO_ARG1, aOld.GetName());
424
425 return aResult;
426 }
427
SwUndoNumruleRename(const String & _aOldName,const String & _aNewName,SwDoc * _pDoc)428 SwUndoNumruleRename::SwUndoNumruleRename(const String & _aOldName,
429 const String & _aNewName,
430 SwDoc * _pDoc)
431 : SwUndo(UNDO_NUMRULE_RENAME), aOldName(_aOldName), aNewName(_aNewName),
432 pDoc(_pDoc)
433 {
434 }
435
UndoImpl(::sw::UndoRedoContext &)436 void SwUndoNumruleRename::UndoImpl(::sw::UndoRedoContext &)
437 {
438 pDoc->RenameNumRule(aNewName, aOldName, sal_True);
439 }
440
RedoImpl(::sw::UndoRedoContext &)441 void SwUndoNumruleRename::RedoImpl(::sw::UndoRedoContext &)
442 {
443 pDoc->RenameNumRule(aOldName, aNewName, sal_True);
444 }
445
GetRewriter() const446 SwRewriter SwUndoNumruleRename::GetRewriter() const
447 {
448 SwRewriter aRewriter;
449
450 aRewriter.AddRule(UNDO_ARG1, aOldName);
451 aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS));
452 aRewriter.AddRule(UNDO_ARG3, aNewName);
453
454 return aRewriter;
455 }
456