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 0 : SwUndoFmtCreate::SwUndoFmtCreate
35 : (SwUndoId nUndoId, SwFmt * _pNew, SwFmt * _pDerivedFrom, SwDoc * _pDoc)
36 : : SwUndo(nUndoId), pNew(_pNew),
37 0 : pDoc(_pDoc), pNewSet(NULL), nId(0), bAuto(sal_False)
38 : {
39 0 : if (_pDerivedFrom)
40 0 : sDerivedFrom = _pDerivedFrom->GetName();
41 0 : }
42 :
43 0 : SwUndoFmtCreate::~SwUndoFmtCreate()
44 : {
45 0 : }
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 0 : SwRewriter SwUndoFmtCreate::GetRewriter() const
88 : {
89 0 : if (sNewName.isEmpty() && pNew)
90 0 : sNewName = pNew->GetName();
91 :
92 0 : SwRewriter aRewriter;
93 :
94 0 : aRewriter.AddRule(UndoArg1, sNewName);
95 :
96 0 : return aRewriter;
97 : }
98 :
99 0 : SwUndoFmtDelete::SwUndoFmtDelete
100 : (SwUndoId nUndoId, SwFmt * _pOld, SwDoc * _pDoc)
101 : : SwUndo(nUndoId),
102 : pDoc(_pDoc), sOldName(_pOld->GetName()),
103 0 : aOldSet(_pOld->GetAttrSet())
104 : {
105 0 : sDerivedFrom = _pOld->DerivedFrom()->GetName();
106 0 : nId = _pOld->GetPoolFmtId() & COLL_GET_RANGE_BITS;
107 0 : bAuto = _pOld->IsAuto();
108 0 : }
109 :
110 0 : SwUndoFmtDelete::~SwUndoFmtDelete()
111 : {
112 0 : }
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 0 : SwRewriter SwUndoFmtDelete::GetRewriter() const
141 : {
142 0 : SwRewriter aRewriter;
143 :
144 0 : aRewriter.AddRule(UndoArg1, sOldName);
145 :
146 0 : return aRewriter;
147 : }
148 :
149 0 : SwUndoRenameFmt::SwUndoRenameFmt(SwUndoId nUndoId,
150 : const OUString & _sOldName,
151 : const OUString & _sNewName,
152 : SwDoc * _pDoc)
153 : : SwUndo(nUndoId), sOldName(_sOldName),
154 0 : sNewName(_sNewName), pDoc(_pDoc)
155 : {
156 0 : }
157 :
158 0 : SwUndoRenameFmt::~SwUndoRenameFmt()
159 : {
160 0 : }
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 0 : SwRewriter SwUndoRenameFmt::GetRewriter() const
183 : {
184 0 : SwRewriter aRewriter;
185 :
186 0 : aRewriter.AddRule(UndoArg1, sOldName);
187 0 : aRewriter.AddRule(UndoArg2, SW_RES(STR_YIELDS));
188 0 : aRewriter.AddRule(UndoArg3, sNewName);
189 :
190 0 : return aRewriter;
191 : }
192 :
193 0 : SwUndoTxtFmtCollCreate::SwUndoTxtFmtCollCreate
194 : (SwTxtFmtColl * _pNew, SwTxtFmtColl * _pDerivedFrom, SwDoc * _pDoc)
195 0 : : SwUndoFmtCreate(UNDO_TXTFMTCOL_CREATE, _pNew, _pDerivedFrom, _pDoc)
196 : {
197 0 : }
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 0 : SwUndoRenameFmtColl::SwUndoRenameFmtColl(const OUString & sInitOldName,
236 : const OUString & sInitNewName,
237 : SwDoc * _pDoc)
238 0 : : SwUndoRenameFmt(UNDO_TXTFMTCOL_RENAME, sInitOldName, sInitNewName, _pDoc)
239 : {
240 0 : }
241 :
242 0 : SwFmt * SwUndoRenameFmtColl::Find(const OUString & rName) const
243 : {
244 0 : return pDoc->FindTxtFmtCollByName(rName);
245 : }
246 :
247 0 : SwUndoCharFmtCreate::SwUndoCharFmtCreate(SwCharFmt * pNewFmt,
248 : SwCharFmt * pDerivedFrom,
249 : SwDoc * pDocument)
250 0 : : SwUndoFmtCreate(UNDO_CHARFMT_CREATE, pNewFmt, pDerivedFrom, pDocument)
251 : {
252 0 : }
253 :
254 0 : SwFmt * SwUndoCharFmtCreate::Create(SwFmt * pDerivedFrom)
255 : {
256 0 : return pDoc->MakeCharFmt(sNewName, (SwCharFmt *) pDerivedFrom, true);
257 : }
258 :
259 0 : void SwUndoCharFmtCreate::Delete()
260 : {
261 0 : pDoc->DelCharFmt((SwCharFmt *) pNew, true);
262 0 : }
263 :
264 0 : SwFmt * SwUndoCharFmtCreate::Find(const OUString & rName) const
265 : {
266 0 : return pDoc->FindCharFmtByName(rName);
267 : }
268 :
269 0 : SwUndoCharFmtDelete::SwUndoCharFmtDelete(SwCharFmt * pOld, SwDoc * pDocument)
270 0 : : SwUndoFmtDelete(UNDO_CHARFMT_DELETE, pOld, pDocument)
271 : {
272 0 : }
273 :
274 0 : SwFmt * SwUndoCharFmtDelete::Create(SwFmt * pDerivedFrom)
275 : {
276 0 : return pDoc->MakeCharFmt(sOldName, (SwCharFmt *) pDerivedFrom, true);
277 : }
278 :
279 0 : void SwUndoCharFmtDelete::Delete(SwFmt * pFmt)
280 : {
281 0 : pDoc->DelCharFmt((SwCharFmt *) pFmt, true);
282 0 : }
283 :
284 0 : SwFmt * SwUndoCharFmtDelete::Find(const OUString & rName) const
285 : {
286 0 : return pDoc->FindCharFmtByName(rName);
287 : }
288 :
289 0 : SwUndoRenameCharFmt::SwUndoRenameCharFmt(const OUString & sInitOldName,
290 : const OUString & sInitNewName,
291 : SwDoc * pDocument)
292 0 : : SwUndoRenameFmt(UNDO_CHARFMT_RENAME, sInitOldName, sInitNewName, pDocument)
293 : {
294 0 : }
295 :
296 0 : SwFmt * SwUndoRenameCharFmt::Find(const OUString & rName) const
297 : {
298 0 : return pDoc->FindCharFmtByName(rName);
299 : }
300 :
301 0 : SwUndoFrmFmtCreate::SwUndoFrmFmtCreate(SwFrmFmt * pNewFmt,
302 : SwFrmFmt * pDerivedFrom,
303 : SwDoc * pDocument)
304 : : SwUndoFmtCreate(UNDO_FRMFMT_CREATE, pNewFmt, pDerivedFrom, pDocument),
305 0 : bAuto(pNewFmt->IsAuto())
306 : {
307 0 : }
308 :
309 0 : SwFmt * SwUndoFrmFmtCreate::Create(SwFmt * pDerivedFrom)
310 : {
311 0 : return pDoc->MakeFrmFmt(sNewName, (SwFrmFmt *) pDerivedFrom, true, bAuto);
312 : }
313 :
314 0 : void SwUndoFrmFmtCreate::Delete()
315 : {
316 0 : pDoc->DelFrmFmt((SwFrmFmt *) pNew, true);
317 0 : }
318 :
319 0 : SwFmt * SwUndoFrmFmtCreate::Find(const OUString & rName) const
320 : {
321 0 : return pDoc->FindFrmFmtByName(rName);
322 : }
323 :
324 0 : SwUndoFrmFmtDelete::SwUndoFrmFmtDelete(SwFrmFmt * pOld, SwDoc * pDocument)
325 0 : : SwUndoFmtDelete(UNDO_FRMFMT_DELETE, pOld, pDocument)
326 : {
327 0 : }
328 :
329 0 : SwFmt * SwUndoFrmFmtDelete::Create(SwFmt * pDerivedFrom)
330 : {
331 0 : return pDoc->MakeFrmFmt(sOldName, (SwFrmFmt *) pDerivedFrom, true);
332 : }
333 :
334 0 : void SwUndoFrmFmtDelete::Delete(SwFmt * pFmt)
335 : {
336 0 : pDoc->DelFrmFmt((SwFrmFmt *) pFmt, true);
337 0 : }
338 :
339 0 : SwFmt * SwUndoFrmFmtDelete::Find(const OUString & rName) const
340 : {
341 0 : return pDoc->FindFrmFmtByName(rName);
342 : }
343 :
344 0 : SwUndoRenameFrmFmt::SwUndoRenameFrmFmt(const OUString & sInitOldName,
345 : const OUString & sInitNewName,
346 : SwDoc * pDocument)
347 0 : : SwUndoRenameFmt(UNDO_FRMFMT_RENAME, sInitOldName, sInitNewName, pDocument)
348 : {
349 0 : }
350 :
351 0 : SwFmt * SwUndoRenameFrmFmt::Find(const OUString & rName) const
352 : {
353 0 : return pDoc->FindFrmFmtByName(rName);
354 : }
355 :
356 0 : SwUndoNumruleCreate::SwUndoNumruleCreate(const SwNumRule * _pNew,
357 : SwDoc * _pDoc)
358 : : SwUndo(UNDO_NUMRULE_CREATE), pNew(_pNew), aNew(*_pNew), pDoc(_pDoc),
359 0 : bInitialized(false)
360 : {
361 0 : }
362 :
363 0 : void SwUndoNumruleCreate::UndoImpl(::sw::UndoRedoContext &)
364 : {
365 0 : if (! bInitialized)
366 : {
367 0 : aNew = *pNew;
368 0 : bInitialized = true;
369 : }
370 :
371 0 : pDoc->DelNumRule(aNew.GetName(), true);
372 0 : }
373 :
374 0 : void SwUndoNumruleCreate::RedoImpl(::sw::UndoRedoContext &)
375 : {
376 0 : pDoc->MakeNumRule(aNew.GetName(), &aNew, true);
377 0 : }
378 :
379 0 : SwRewriter SwUndoNumruleCreate::GetRewriter() const
380 : {
381 0 : SwRewriter aResult;
382 :
383 0 : if (! bInitialized)
384 : {
385 0 : aNew = *pNew;
386 0 : bInitialized = true;
387 : }
388 :
389 0 : aResult.AddRule(UndoArg1, aNew.GetName());
390 :
391 0 : return aResult;
392 : }
393 :
394 0 : SwUndoNumruleDelete::SwUndoNumruleDelete(const SwNumRule & rRule,
395 : SwDoc * _pDoc)
396 0 : : SwUndo(UNDO_NUMRULE_DELETE), aOld(rRule), pDoc(_pDoc)
397 : {
398 0 : }
399 :
400 0 : void SwUndoNumruleDelete::UndoImpl(::sw::UndoRedoContext &)
401 : {
402 0 : pDoc->MakeNumRule(aOld.GetName(), &aOld, true);
403 0 : }
404 :
405 0 : void SwUndoNumruleDelete::RedoImpl(::sw::UndoRedoContext &)
406 : {
407 0 : pDoc->DelNumRule(aOld.GetName(), true);
408 0 : }
409 :
410 0 : SwRewriter SwUndoNumruleDelete::GetRewriter() const
411 : {
412 0 : SwRewriter aResult;
413 :
414 0 : aResult.AddRule(UndoArg1, aOld.GetName());
415 :
416 0 : return aResult;
417 : }
418 :
419 0 : SwUndoNumruleRename::SwUndoNumruleRename(const OUString & _aOldName,
420 : const OUString & _aNewName,
421 : SwDoc * _pDoc)
422 : : SwUndo(UNDO_NUMRULE_RENAME), aOldName(_aOldName), aNewName(_aNewName),
423 0 : pDoc(_pDoc)
424 : {
425 0 : }
426 :
427 0 : void SwUndoNumruleRename::UndoImpl(::sw::UndoRedoContext &)
428 : {
429 0 : pDoc->RenameNumRule(aNewName, aOldName, true);
430 0 : }
431 :
432 0 : void SwUndoNumruleRename::RedoImpl(::sw::UndoRedoContext &)
433 : {
434 0 : pDoc->RenameNumRule(aOldName, aNewName, true);
435 0 : }
436 :
437 0 : SwRewriter SwUndoNumruleRename::GetRewriter() const
438 : {
439 0 : SwRewriter aRewriter;
440 :
441 0 : aRewriter.AddRule(UndoArg1, aOldName);
442 0 : aRewriter.AddRule(UndoArg2, SW_RESSTR(STR_YIELDS));
443 0 : aRewriter.AddRule(UndoArg3, aNewName);
444 :
445 0 : return aRewriter;
446 : }
447 :
448 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|