Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <tools/resid.hxx>
21 :
22 : #include <poolfmt.hxx>
23 : #include <charfmt.hxx>
24 : #include <frmfmt.hxx>
25 : #include <SwUndoFmt.hxx>
26 : #include <SwRewriter.hxx>
27 : #include <swundo.hxx>
28 : #include <undobj.hxx>
29 : #include <fmtcol.hxx>
30 : #include <doc.hxx>
31 : #include <IDocumentUndoRedo.hxx>
32 : #include <comcore.hrc>
33 :
34 494 : SwUndoFmtCreate::SwUndoFmtCreate
35 : (SwUndoId nUndoId, SwFmt * _pNew, SwFmt * _pDerivedFrom, SwDoc * _pDoc)
36 : : SwUndo(nUndoId), pNew(_pNew),
37 494 : pDoc(_pDoc), pNewSet(NULL), nId(0), bAuto(false)
38 : {
39 494 : if (_pDerivedFrom)
40 494 : sDerivedFrom = _pDerivedFrom->GetName();
41 494 : }
42 :
43 494 : SwUndoFmtCreate::~SwUndoFmtCreate()
44 : {
45 494 : }
46 :
47 0 : void SwUndoFmtCreate::UndoImpl(::sw::UndoRedoContext &)
48 : {
49 0 : if (pNew)
50 : {
51 0 : if (sNewName.isEmpty() && pNew)
52 0 : sNewName = pNew->GetName();
53 :
54 0 : if (!sNewName.isEmpty())
55 0 : pNew = Find(sNewName);
56 :
57 0 : if (pNew)
58 : {
59 0 : pNewSet = new SfxItemSet(pNew->GetAttrSet());
60 0 : nId = pNew->GetPoolFmtId() & COLL_GET_RANGE_BITS;
61 0 : bAuto = pNew->IsAuto();
62 :
63 0 : Delete();
64 : }
65 : }
66 0 : }
67 :
68 0 : void SwUndoFmtCreate::RedoImpl(::sw::UndoRedoContext &)
69 : {
70 0 : SwFmt * pDerivedFrom = Find(sDerivedFrom);
71 0 : SwFmt * pFmt = Create(pDerivedFrom);
72 :
73 0 : if (pFmt && pNewSet)
74 : {
75 0 : pFmt->SetAuto(bAuto);
76 0 : pDoc->ChgFmt(*pFmt, *pNewSet);
77 0 : pFmt->SetPoolFmtId((pFmt->GetPoolFmtId()
78 : & ~COLL_GET_RANGE_BITS)
79 0 : | nId);
80 :
81 0 : pNew = pFmt;
82 : }
83 : else
84 0 : pNew = NULL;
85 0 : }
86 :
87 494 : SwRewriter SwUndoFmtCreate::GetRewriter() const
88 : {
89 494 : if (sNewName.isEmpty() && pNew)
90 494 : sNewName = pNew->GetName();
91 :
92 494 : SwRewriter aRewriter;
93 :
94 494 : aRewriter.AddRule(UndoArg1, sNewName);
95 :
96 494 : return aRewriter;
97 : }
98 :
99 5072 : SwUndoFmtDelete::SwUndoFmtDelete
100 : (SwUndoId nUndoId, SwFmt * _pOld, SwDoc * _pDoc)
101 : : SwUndo(nUndoId),
102 : pDoc(_pDoc), sOldName(_pOld->GetName()),
103 5072 : aOldSet(_pOld->GetAttrSet())
104 : {
105 5072 : sDerivedFrom = _pOld->DerivedFrom()->GetName();
106 5072 : nId = _pOld->GetPoolFmtId() & COLL_GET_RANGE_BITS;
107 5072 : bAuto = _pOld->IsAuto();
108 5072 : }
109 :
110 5071 : SwUndoFmtDelete::~SwUndoFmtDelete()
111 : {
112 5071 : }
113 :
114 0 : void SwUndoFmtDelete::UndoImpl(::sw::UndoRedoContext &)
115 : {
116 0 : SwFmt * pDerivedFrom = Find(sDerivedFrom);
117 :
118 0 : SwFmt * pFmt = Create(pDerivedFrom);
119 :
120 0 : if (pFmt)
121 : {
122 0 : pDoc->ChgFmt(*pFmt, aOldSet);
123 0 : pFmt->SetAuto(bAuto);
124 0 : pFmt->SetPoolFmtId((pFmt->GetPoolFmtId() &
125 : ~COLL_GET_RANGE_BITS)
126 0 : | nId);
127 : }
128 0 : }
129 :
130 0 : void SwUndoFmtDelete::RedoImpl(::sw::UndoRedoContext &)
131 : {
132 0 : SwFmt * pOld = Find(sOldName);
133 :
134 0 : if (pOld)
135 : {
136 0 : Delete(pOld);
137 : }
138 0 : }
139 :
140 5072 : SwRewriter SwUndoFmtDelete::GetRewriter() const
141 : {
142 5072 : SwRewriter aRewriter;
143 :
144 5072 : aRewriter.AddRule(UndoArg1, sOldName);
145 :
146 5072 : return aRewriter;
147 : }
148 :
149 8 : SwUndoRenameFmt::SwUndoRenameFmt(SwUndoId nUndoId,
150 : const OUString & _sOldName,
151 : const OUString & _sNewName,
152 : SwDoc * _pDoc)
153 : : SwUndo(nUndoId), sOldName(_sOldName),
154 8 : sNewName(_sNewName), pDoc(_pDoc)
155 : {
156 8 : }
157 :
158 8 : SwUndoRenameFmt::~SwUndoRenameFmt()
159 : {
160 8 : }
161 :
162 0 : void SwUndoRenameFmt::UndoImpl(::sw::UndoRedoContext &)
163 : {
164 0 : SwFmt * pFmt = Find(sNewName);
165 :
166 0 : if (pFmt)
167 : {
168 0 : pDoc->RenameFmt(*pFmt, sOldName, true);
169 : }
170 0 : }
171 :
172 0 : void SwUndoRenameFmt::RedoImpl(::sw::UndoRedoContext &)
173 : {
174 0 : SwFmt * pFmt = Find(sOldName);
175 :
176 0 : if (pFmt)
177 : {
178 0 : pDoc->RenameFmt(*pFmt, sNewName, true);
179 : }
180 0 : }
181 :
182 8 : SwRewriter SwUndoRenameFmt::GetRewriter() const
183 : {
184 8 : SwRewriter aRewriter;
185 :
186 8 : aRewriter.AddRule(UndoArg1, sOldName);
187 8 : aRewriter.AddRule(UndoArg2, SW_RES(STR_YIELDS));
188 8 : aRewriter.AddRule(UndoArg3, sNewName);
189 :
190 8 : return aRewriter;
191 : }
192 :
193 20 : SwUndoTxtFmtCollCreate::SwUndoTxtFmtCollCreate
194 : (SwTxtFmtColl * _pNew, SwTxtFmtColl * _pDerivedFrom, SwDoc * _pDoc)
195 20 : : SwUndoFmtCreate(UNDO_TXTFMTCOL_CREATE, _pNew, _pDerivedFrom, _pDoc)
196 : {
197 20 : }
198 :
199 0 : SwFmt * SwUndoTxtFmtCollCreate::Create(SwFmt * pDerivedFrom)
200 : {
201 0 : return pDoc->MakeTxtFmtColl(sNewName, (SwTxtFmtColl *)pDerivedFrom, true);
202 : }
203 :
204 0 : void SwUndoTxtFmtCollCreate::Delete()
205 : {
206 0 : pDoc->DelTxtFmtColl((SwTxtFmtColl *) pNew, true);
207 0 : }
208 :
209 0 : SwFmt * SwUndoTxtFmtCollCreate::Find(const OUString & rName) const
210 : {
211 0 : return pDoc->FindTxtFmtCollByName(rName);
212 : }
213 :
214 0 : SwUndoTxtFmtCollDelete::SwUndoTxtFmtCollDelete(SwTxtFmtColl * _pOld,
215 : SwDoc * _pDoc)
216 0 : : SwUndoFmtDelete(UNDO_TXTFMTCOL_DELETE, _pOld, _pDoc)
217 : {
218 0 : }
219 :
220 0 : SwFmt * SwUndoTxtFmtCollDelete::Create(SwFmt * pDerivedFrom)
221 : {
222 0 : return pDoc->MakeTxtFmtColl(sOldName, (SwTxtFmtColl *) pDerivedFrom, true);
223 : }
224 :
225 0 : void SwUndoTxtFmtCollDelete::Delete(SwFmt * pOld)
226 : {
227 0 : pDoc->DelTxtFmtColl((SwTxtFmtColl *) pOld, true);
228 0 : }
229 :
230 0 : SwFmt * SwUndoTxtFmtCollDelete::Find(const OUString & rName) const
231 : {
232 0 : return pDoc->FindTxtFmtCollByName(rName);
233 : }
234 :
235 4 : SwUndoCondTxtFmtCollCreate::SwUndoCondTxtFmtCollCreate(SwConditionTxtFmtColl *_pNew,
236 : SwTxtFmtColl *_pDerivedFrom, SwDoc *_pDoc)
237 4 : : SwUndoTxtFmtCollCreate(_pNew, _pDerivedFrom, _pDoc)
238 : {
239 4 : }
240 :
241 0 : SwFmt * SwUndoCondTxtFmtCollCreate::Create(SwFmt * pDerivedFrom)
242 : {
243 0 : return pDoc->MakeCondTxtFmtColl(sNewName, (SwTxtFmtColl *)pDerivedFrom, true);
244 : }
245 :
246 0 : SwUndoCondTxtFmtCollDelete::SwUndoCondTxtFmtCollDelete(SwTxtFmtColl * _pOld,
247 : SwDoc * _pDoc)
248 0 : : SwUndoTxtFmtCollDelete(_pOld, _pDoc)
249 : {
250 0 : }
251 :
252 0 : SwFmt * SwUndoCondTxtFmtCollDelete::Create(SwFmt * pDerivedFrom)
253 : {
254 0 : return pDoc->MakeCondTxtFmtColl(sOldName, (SwTxtFmtColl *) pDerivedFrom, true);
255 : }
256 :
257 4 : SwUndoRenameFmtColl::SwUndoRenameFmtColl(const OUString & sInitOldName,
258 : const OUString & sInitNewName,
259 : SwDoc * _pDoc)
260 4 : : SwUndoRenameFmt(UNDO_TXTFMTCOL_RENAME, sInitOldName, sInitNewName, _pDoc)
261 : {
262 4 : }
263 :
264 0 : SwFmt * SwUndoRenameFmtColl::Find(const OUString & rName) const
265 : {
266 0 : return pDoc->FindTxtFmtCollByName(rName);
267 : }
268 :
269 430 : SwUndoCharFmtCreate::SwUndoCharFmtCreate(SwCharFmt * pNewFmt,
270 : SwCharFmt * pDerivedFrom,
271 : SwDoc * pDocument)
272 430 : : SwUndoFmtCreate(UNDO_CHARFMT_CREATE, pNewFmt, pDerivedFrom, pDocument)
273 : {
274 430 : }
275 :
276 0 : SwFmt * SwUndoCharFmtCreate::Create(SwFmt * pDerivedFrom)
277 : {
278 0 : return pDoc->MakeCharFmt(sNewName, (SwCharFmt *) pDerivedFrom, true);
279 : }
280 :
281 0 : void SwUndoCharFmtCreate::Delete()
282 : {
283 0 : pDoc->DelCharFmt((SwCharFmt *) pNew, true);
284 0 : }
285 :
286 0 : SwFmt * SwUndoCharFmtCreate::Find(const OUString & rName) const
287 : {
288 0 : return pDoc->FindCharFmtByName(rName);
289 : }
290 :
291 2 : SwUndoCharFmtDelete::SwUndoCharFmtDelete(SwCharFmt * pOld, SwDoc * pDocument)
292 2 : : SwUndoFmtDelete(UNDO_CHARFMT_DELETE, pOld, pDocument)
293 : {
294 2 : }
295 :
296 0 : SwFmt * SwUndoCharFmtDelete::Create(SwFmt * pDerivedFrom)
297 : {
298 0 : return pDoc->MakeCharFmt(sOldName, (SwCharFmt *) pDerivedFrom, true);
299 : }
300 :
301 0 : void SwUndoCharFmtDelete::Delete(SwFmt * pFmt)
302 : {
303 0 : pDoc->DelCharFmt((SwCharFmt *) pFmt, true);
304 0 : }
305 :
306 0 : SwFmt * SwUndoCharFmtDelete::Find(const OUString & rName) const
307 : {
308 0 : return pDoc->FindCharFmtByName(rName);
309 : }
310 :
311 4 : SwUndoRenameCharFmt::SwUndoRenameCharFmt(const OUString & sInitOldName,
312 : const OUString & sInitNewName,
313 : SwDoc * pDocument)
314 4 : : SwUndoRenameFmt(UNDO_CHARFMT_RENAME, sInitOldName, sInitNewName, pDocument)
315 : {
316 4 : }
317 :
318 0 : SwFmt * SwUndoRenameCharFmt::Find(const OUString & rName) const
319 : {
320 0 : return pDoc->FindCharFmtByName(rName);
321 : }
322 :
323 44 : SwUndoFrmFmtCreate::SwUndoFrmFmtCreate(SwFrmFmt * pNewFmt,
324 : SwFrmFmt * pDerivedFrom,
325 : SwDoc * pDocument)
326 : : SwUndoFmtCreate(UNDO_FRMFMT_CREATE, pNewFmt, pDerivedFrom, pDocument),
327 44 : bAuto(pNewFmt->IsAuto())
328 : {
329 44 : }
330 :
331 0 : SwFmt * SwUndoFrmFmtCreate::Create(SwFmt * pDerivedFrom)
332 : {
333 0 : return pDoc->MakeFrmFmt(sNewName, (SwFrmFmt *) pDerivedFrom, true, bAuto);
334 : }
335 :
336 0 : void SwUndoFrmFmtCreate::Delete()
337 : {
338 0 : pDoc->DelFrmFmt((SwFrmFmt *) pNew, true);
339 0 : }
340 :
341 0 : SwFmt * SwUndoFrmFmtCreate::Find(const OUString & rName) const
342 : {
343 0 : return pDoc->FindFrmFmtByName(rName);
344 : }
345 :
346 5070 : SwUndoFrmFmtDelete::SwUndoFrmFmtDelete(SwFrmFmt * pOld, SwDoc * pDocument)
347 5070 : : SwUndoFmtDelete(UNDO_FRMFMT_DELETE, pOld, pDocument)
348 : {
349 5070 : }
350 :
351 0 : SwFmt * SwUndoFrmFmtDelete::Create(SwFmt * pDerivedFrom)
352 : {
353 0 : return pDoc->MakeFrmFmt(sOldName, (SwFrmFmt *) pDerivedFrom, true);
354 : }
355 :
356 0 : void SwUndoFrmFmtDelete::Delete(SwFmt * pFmt)
357 : {
358 0 : pDoc->DelFrmFmt((SwFrmFmt *) pFmt, true);
359 0 : }
360 :
361 0 : SwFmt * SwUndoFrmFmtDelete::Find(const OUString & rName) const
362 : {
363 0 : return pDoc->FindFrmFmtByName(rName);
364 : }
365 :
366 0 : SwUndoRenameFrmFmt::SwUndoRenameFrmFmt(const OUString & sInitOldName,
367 : const OUString & sInitNewName,
368 : SwDoc * pDocument)
369 0 : : SwUndoRenameFmt(UNDO_FRMFMT_RENAME, sInitOldName, sInitNewName, pDocument)
370 : {
371 0 : }
372 :
373 0 : SwFmt * SwUndoRenameFrmFmt::Find(const OUString & rName) const
374 : {
375 0 : return pDoc->FindFrmFmtByName(rName);
376 : }
377 :
378 22 : SwUndoNumruleCreate::SwUndoNumruleCreate(const SwNumRule * _pNew,
379 : SwDoc * _pDoc)
380 : : SwUndo(UNDO_NUMRULE_CREATE), pNew(_pNew), aNew(*_pNew), pDoc(_pDoc),
381 22 : bInitialized(false)
382 : {
383 22 : }
384 :
385 0 : void SwUndoNumruleCreate::UndoImpl(::sw::UndoRedoContext &)
386 : {
387 0 : if (! bInitialized)
388 : {
389 0 : aNew = *pNew;
390 0 : bInitialized = true;
391 : }
392 :
393 0 : pDoc->DelNumRule(aNew.GetName(), true);
394 0 : }
395 :
396 0 : void SwUndoNumruleCreate::RedoImpl(::sw::UndoRedoContext &)
397 : {
398 0 : pDoc->MakeNumRule(aNew.GetName(), &aNew, true);
399 0 : }
400 :
401 22 : SwRewriter SwUndoNumruleCreate::GetRewriter() const
402 : {
403 22 : SwRewriter aResult;
404 :
405 22 : if (! bInitialized)
406 : {
407 22 : aNew = *pNew;
408 22 : bInitialized = true;
409 : }
410 :
411 22 : aResult.AddRule(UndoArg1, aNew.GetName());
412 :
413 22 : return aResult;
414 : }
415 :
416 0 : SwUndoNumruleDelete::SwUndoNumruleDelete(const SwNumRule & rRule,
417 : SwDoc * _pDoc)
418 0 : : SwUndo(UNDO_NUMRULE_DELETE), aOld(rRule), pDoc(_pDoc)
419 : {
420 0 : }
421 :
422 0 : void SwUndoNumruleDelete::UndoImpl(::sw::UndoRedoContext &)
423 : {
424 0 : pDoc->MakeNumRule(aOld.GetName(), &aOld, true);
425 0 : }
426 :
427 0 : void SwUndoNumruleDelete::RedoImpl(::sw::UndoRedoContext &)
428 : {
429 0 : pDoc->DelNumRule(aOld.GetName(), true);
430 0 : }
431 :
432 0 : SwRewriter SwUndoNumruleDelete::GetRewriter() const
433 : {
434 0 : SwRewriter aResult;
435 :
436 0 : aResult.AddRule(UndoArg1, aOld.GetName());
437 :
438 0 : return aResult;
439 : }
440 :
441 0 : SwUndoNumruleRename::SwUndoNumruleRename(const OUString & _aOldName,
442 : const OUString & _aNewName,
443 : SwDoc * _pDoc)
444 : : SwUndo(UNDO_NUMRULE_RENAME), aOldName(_aOldName), aNewName(_aNewName),
445 0 : pDoc(_pDoc)
446 : {
447 0 : }
448 :
449 0 : void SwUndoNumruleRename::UndoImpl(::sw::UndoRedoContext &)
450 : {
451 0 : pDoc->RenameNumRule(aNewName, aOldName, true);
452 0 : }
453 :
454 0 : void SwUndoNumruleRename::RedoImpl(::sw::UndoRedoContext &)
455 : {
456 0 : pDoc->RenameNumRule(aOldName, aNewName, true);
457 0 : }
458 :
459 0 : SwRewriter SwUndoNumruleRename::GetRewriter() const
460 : {
461 0 : SwRewriter aRewriter;
462 :
463 0 : aRewriter.AddRule(UndoArg1, aOldName);
464 0 : aRewriter.AddRule(UndoArg2, SW_RESSTR(STR_YIELDS));
465 0 : aRewriter.AddRule(UndoArg3, aNewName);
466 :
467 0 : return aRewriter;
468 270 : }
469 :
470 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|