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 <com/sun/star/style/XStyleFamiliesSupplier.hpp>
28 #include <com/sun/star/beans/XPropertySet.hpp>
29 #include <com/sun/star/container/XNameAccess.hpp>
30
31 #include <hintids.hxx>
32 #include <sfx2/app.hxx>
33 #include <svl/whiter.hxx>
34 #include <sfx2/templdlg.hxx>
35 #include <sfx2/tplpitem.hxx>
36 #include <sfx2/request.hxx>
37 #include <sfx2/dispatch.hxx>
38 #include <sfx2/newstyle.hxx>
39 #include <sfx2/printer.hxx>
40 #include <svl/macitem.hxx>
41 #include <editeng/brshitem.hxx>
42 #include <svl/stritem.hxx>
43 #include <svl/languageoptions.hxx>
44 #include <editeng/eeitem.hxx>
45 #include <svx/htmlmode.hxx>
46 #include <swmodule.hxx>
47 #include <wdocsh.hxx>
48 #include <fmtfsize.hxx>
49 #include <fchrfmt.hxx>
50 #include <svtools/htmlcfg.hxx>
51 #include <SwStyleNameMapper.hxx>
52 #include <SwRewriter.hxx>
53 #include <numrule.hxx>
54 #include <swundo.hxx>
55
56 #include "view.hxx"
57 #include "wrtsh.hxx"
58 #include "docsh.hxx"
59 #include "uitool.hxx"
60 #include "cmdid.h"
61 #include "globals.hrc"
62 #include "viewopt.hxx"
63 #include <doc.hxx>
64 #include <IDocumentUndoRedo.hxx>
65 #include "swstyle.h"
66 #include "frmfmt.hxx"
67 #include "charfmt.hxx"
68 #include "poolfmt.hxx"
69 #include "pagedesc.hxx"
70 #include "docstyle.hxx"
71 #include "uiitems.hxx"
72 #include "fmtcol.hxx"
73 #include "frmmgr.hxx" //SwFrmValid
74 #include "swevent.hxx"
75 #include "edtwin.hxx"
76 #include "unochart.hxx"
77
78 #include "app.hrc"
79 #include <fmtui.hrc>
80 #include "swabstdlg.hxx"
81 // --> OD 2008-03-27 #refactorlists#
82 #include <list.hxx>
83 // <--
84
85 #include <paratr.hxx> //#outline level,add by zhaojianwei
86
87 using namespace ::com::sun::star;
88
89 /*--------------------------------------------------------------------
90 Beschreibung:
91 --------------------------------------------------------------------*/
92
93
StateStyleSheet(SfxItemSet & rSet,SwWrtShell * pSh)94 void SwDocShell::StateStyleSheet(SfxItemSet& rSet, SwWrtShell* pSh)
95 {
96 SfxWhichIter aIter(rSet);
97 sal_uInt16 nWhich = aIter.FirstWhich();
98 sal_uInt16 nActualFamily = USHRT_MAX;
99
100 SwWrtShell* pShell = pSh ? pSh : GetWrtShell();
101 if(!pShell)
102 {
103 while (nWhich)
104 {
105 rSet.DisableItem(nWhich);
106 nWhich = aIter.NextWhich();
107 }
108 return;
109 }
110 else
111 {
112 SfxViewFrame* pFrame = pShell->GetView().GetViewFrame();
113 const ISfxTemplateCommon* pCommon = SFX_APP()->GetCurrentTemplateCommon(pFrame->GetBindings());
114 if( pCommon )
115 nActualFamily = static_cast< sal_uInt16 >(pCommon->GetActualFamily());
116 }
117
118 while (nWhich)
119 {
120 // aktuelle Vorlage zu jeder Familie ermitteln
121 //
122 String aName;
123 switch (nWhich)
124 {
125 case SID_STYLE_APPLY:
126 {//hier wird die Vorlage und ihre Familie an die StyleBox
127 //uebergeben, damit diese Familie angezeigt wird
128 if(pShell->IsFrmSelected())
129 {
130 SwFrmFmt* pFmt = pShell->GetCurFrmFmt();
131 if( pFmt )
132 aName = pFmt->GetName();
133 }
134 else
135 {
136 SwTxtFmtColl* pColl = pShell->GetCurTxtFmtColl();
137 if(pColl)
138 aName = pColl->GetName();
139 }
140 rSet.Put(SfxTemplateItem(nWhich, aName));
141 }
142 break;
143 case SID_STYLE_FAMILY1:
144 if( !pShell->IsFrmSelected() )
145 {
146 SwCharFmt* pFmt = pShell->GetCurCharFmt();
147 if(pFmt)
148 aName = pFmt->GetName();
149 else
150 aName = *SwStyleNameMapper::GetTextUINameArray()[
151 RES_POOLCOLL_STANDARD - RES_POOLCOLL_TEXT_BEGIN ];
152 rSet.Put(SfxTemplateItem(nWhich, aName));
153 }
154 break;
155
156 case SID_STYLE_FAMILY2:
157 if(!pShell->IsFrmSelected())
158 {
159 SwTxtFmtColl* pColl = pShell->GetCurTxtFmtColl();
160 if(pColl)
161 aName = pColl->GetName();
162
163 SfxTemplateItem aItem(nWhich, aName);
164
165 sal_uInt16 nMask = 0;
166 if( mpDoc->get(IDocumentSettingAccess::HTML_MODE) )
167 nMask = SWSTYLEBIT_HTML;
168 else
169 {
170 const int nSelection = pShell->GetFrmType(0,sal_True);
171 if(pShell->GetCurTOX())
172 nMask = SWSTYLEBIT_IDX ;
173 else if(nSelection & FRMTYPE_HEADER ||
174 nSelection & FRMTYPE_FOOTER ||
175 nSelection & FRMTYPE_TABLE ||
176 nSelection & FRMTYPE_FLY_ANY ||
177 nSelection & FRMTYPE_FOOTNOTE ||
178 nSelection & FRMTYPE_FTNPAGE)
179 nMask = SWSTYLEBIT_EXTRA;
180 else
181 nMask = SWSTYLEBIT_TEXT;
182 }
183
184 aItem.SetValue(nMask);
185 rSet.Put(aItem);
186 }
187
188 break;
189
190 case SID_STYLE_FAMILY3:
191
192 if( mpDoc->get(IDocumentSettingAccess::HTML_MODE) )
193 rSet.DisableItem( nWhich );
194 else
195 {
196 SwFrmFmt* pFmt = pShell->GetCurFrmFmt();
197 if(pFmt && pShell->IsFrmSelected())
198 {
199 aName = pFmt->GetName();
200 rSet.Put(SfxTemplateItem(nWhich, aName));
201 }
202 }
203 break;
204
205 case SID_STYLE_FAMILY4:
206 {
207 SvxHtmlOptions* pHtmlOpt = SvxHtmlOptions::Get();
208 if( mpDoc->get(IDocumentSettingAccess::HTML_MODE) && !pHtmlOpt->IsPrintLayoutExtension())
209 rSet.DisableItem( nWhich );
210 else
211 {
212 sal_uInt16 n = pShell->GetCurPageDesc( sal_False );
213 if( n < pShell->GetPageDescCnt() )
214 aName = pShell->GetPageDesc( n ).GetName();
215
216 rSet.Put(SfxTemplateItem(nWhich, aName));
217 }
218 }
219 break;
220 case SID_STYLE_FAMILY5:
221 {
222 const SwNumRule* pRule = pShell->GetCurNumRule();
223 if( pRule )
224 aName = pRule->GetName();
225
226 rSet.Put(SfxTemplateItem(nWhich, aName));
227 }
228 break;
229
230 case SID_STYLE_WATERCAN:
231 {
232 SwEditWin& rEdtWin = pShell->GetView().GetEditWin();
233 SwApplyTemplate* pApply = rEdtWin.GetApplyTemplate();
234 rSet.Put(SfxBoolItem(nWhich, pApply && pApply->eType != 0));
235 }
236 break;
237 case SID_STYLE_UPDATE_BY_EXAMPLE:
238 if( pShell->IsFrmSelected()
239 ? SFX_STYLE_FAMILY_FRAME != nActualFamily
240 : ( SFX_STYLE_FAMILY_FRAME == nActualFamily ||
241 SFX_STYLE_FAMILY_PAGE == nActualFamily ||
242 (SFX_STYLE_FAMILY_PSEUDO == nActualFamily && !pShell->GetCurNumRule())) )
243 {
244 rSet.DisableItem( nWhich );
245 }
246 break;
247
248 case SID_STYLE_NEW_BY_EXAMPLE:
249 if( (pShell->IsFrmSelected()
250 ? SFX_STYLE_FAMILY_FRAME != nActualFamily
251 : SFX_STYLE_FAMILY_FRAME == nActualFamily) ||
252 (SFX_STYLE_FAMILY_PSEUDO == nActualFamily && !pShell->GetCurNumRule()) )
253 {
254 rSet.DisableItem( nWhich );
255 }
256 break;
257
258 default:
259 DBG_ERROR( "Invalid SlotId");
260 }
261 nWhich = aIter.NextWhich();
262 }
263 }
264
265
266 /*--------------------------------------------------------------------
267 Beschreibung: StyleSheet-Requeste auswerten
268 --------------------------------------------------------------------*/
269
270
ExecStyleSheet(SfxRequest & rReq)271 void SwDocShell::ExecStyleSheet( SfxRequest& rReq )
272 {
273 sal_uInt16 nSlot = rReq.GetSlot();
274 sal_uInt16 nRet = 0xffff;
275
276 const SfxItemSet* pArgs = rReq.GetArgs();
277 const SfxPoolItem* pItem;
278 SwWrtShell* pActShell = 0;
279 sal_Bool bSetReturn = sal_True;
280 switch (nSlot)
281 {
282 case SID_STYLE_NEW:
283 if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILY,
284 sal_False, &pItem ))
285 {
286 const sal_uInt16 nFamily = ((const SfxUInt16Item*)pItem)->GetValue();
287
288 String sName;
289 sal_uInt16 nMask = 0;
290 if( SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_NEW,
291 sal_False, &pItem ))
292 sName = ((const SfxStringItem*)pItem)->GetValue();
293 if( SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_MASK,
294 sal_False, &pItem ))
295 nMask = ((const SfxUInt16Item*)pItem)->GetValue();
296 String sParent;
297 if( SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_REFERENCE,
298 sal_False, &pItem ))
299 sParent = ((const SfxStringItem*)pItem)->GetValue();
300
301 nRet = Edit( sName, sParent, nFamily, nMask, sal_True, 0, 0, rReq.IsAPI() );
302 }
303 break;
304
305 case SID_STYLE_APPLY:
306 if( !pArgs )
307 {
308 GetView()->GetViewFrame()->GetDispatcher()->Execute(SID_STYLE_DESIGNER, sal_False);
309 break;
310 }
311 else
312 {
313 // convert internal StyleName to DisplayName (slot implementation uses the latter)
314 SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_APPLY_STYLE, sal_False );
315 SFX_REQUEST_ARG( rReq, pFamilyItem, SfxStringItem, SID_STYLE_FAMILYNAME, sal_False );
316 if ( pFamilyItem && pNameItem )
317 {
318 uno::Reference< style::XStyleFamiliesSupplier > xModel(GetModel(), uno::UNO_QUERY);
319 try
320 {
321 uno::Reference< container::XNameAccess > xStyles;
322 uno::Reference< container::XNameAccess > xCont = xModel->getStyleFamilies();
323 xCont->getByName(pFamilyItem->GetValue()) >>= xStyles;
324 uno::Reference< beans::XPropertySet > xInfo;
325 xStyles->getByName( pNameItem->GetValue() ) >>= xInfo;
326 ::rtl::OUString aUIName;
327 xInfo->getPropertyValue( ::rtl::OUString::createFromAscii("DisplayName") ) >>= aUIName;
328 if ( aUIName.getLength() )
329 rReq.AppendItem( SfxStringItem( SID_STYLE_APPLY, aUIName ) );
330 }
331 catch( uno::Exception& )
332 {
333 }
334 }
335 }
336
337 // intentionally no break
338
339 case SID_STYLE_EDIT:
340 case SID_STYLE_DELETE:
341 case SID_STYLE_WATERCAN:
342 case SID_STYLE_FAMILY:
343 case SID_STYLE_UPDATE_BY_EXAMPLE:
344 case SID_STYLE_NEW_BY_EXAMPLE:
345 {
346 String aParam;
347 sal_uInt16 nFamily = SFX_STYLE_FAMILY_PARA;
348 sal_uInt16 nMask = 0;
349
350 if( !pArgs )
351 {
352 nFamily = SFX_STYLE_FAMILY_PARA;
353
354 switch (nSlot)
355 {
356 case SID_STYLE_NEW_BY_EXAMPLE:
357 {
358 SfxNewStyleDlg *pDlg = new SfxNewStyleDlg( 0,
359 *GetStyleSheetPool());
360 if(RET_OK == pDlg->Execute())
361 {
362 aParam = pDlg->GetName();
363 rReq.AppendItem(SfxStringItem(nSlot, aParam));
364 }
365
366 delete pDlg;
367 }
368 break;
369
370 case SID_STYLE_UPDATE_BY_EXAMPLE:
371 case SID_STYLE_EDIT:
372 {
373 SwTxtFmtColl* pColl = GetWrtShell()->GetCurTxtFmtColl();
374 if(pColl)
375 {
376 aParam = pColl->GetName();
377 rReq.AppendItem(SfxStringItem(nSlot, aParam));
378 }
379 }
380 break;
381 }
382 }
383 else
384 {
385 ASSERT( pArgs->Count(), "SfxBug ItemSet ist leer");
386
387 SwWrtShell* pShell = GetWrtShell();
388 if( SFX_ITEM_SET == pArgs->GetItemState(nSlot, sal_False, &pItem ))
389 aParam = ((const SfxStringItem*)pItem)->GetValue();
390
391 if( SFX_ITEM_SET == pArgs->GetItemState(SID_STYLE_FAMILY,
392 sal_False, &pItem ))
393 nFamily = ((const SfxUInt16Item*)pItem)->GetValue();
394
395 if( SFX_ITEM_SET == pArgs->GetItemState(SID_STYLE_FAMILYNAME, sal_False, &pItem ))
396 {
397 String aFamily = ((const SfxStringItem*)pItem)->GetValue();
398 if(aFamily.CompareToAscii("CharacterStyles") == COMPARE_EQUAL)
399 nFamily = SFX_STYLE_FAMILY_CHAR;
400 else
401 if(aFamily.CompareToAscii("ParagraphStyles") == COMPARE_EQUAL)
402 nFamily = SFX_STYLE_FAMILY_PARA;
403 else
404 if(aFamily.CompareToAscii("PageStyles") == COMPARE_EQUAL)
405 nFamily = SFX_STYLE_FAMILY_PAGE;
406 else
407 if(aFamily.CompareToAscii("FrameStyles") == COMPARE_EQUAL)
408 nFamily = SFX_STYLE_FAMILY_FRAME;
409 else
410 if(aFamily.CompareToAscii("NumberingStyles") == COMPARE_EQUAL)
411 nFamily = SFX_STYLE_FAMILY_PSEUDO;
412 }
413
414 if( SFX_ITEM_SET == pArgs->GetItemState(SID_STYLE_MASK,
415 sal_False, &pItem ))
416 nMask = ((const SfxUInt16Item*)pItem)->GetValue();
417 if( SFX_ITEM_SET == pArgs->GetItemState(FN_PARAM_WRTSHELL,
418 sal_False, &pItem ))
419 pActShell = pShell = (SwWrtShell*)((SwPtrItem*)pItem)->GetValue();
420
421 if( nSlot == SID_STYLE_UPDATE_BY_EXAMPLE )
422 {
423 switch( nFamily )
424 {
425 case SFX_STYLE_FAMILY_PARA:
426 {
427 SwTxtFmtColl* pColl = pShell->GetCurTxtFmtColl();
428 if(pColl)
429 aParam = pColl->GetName();
430 }
431 break;
432 case SFX_STYLE_FAMILY_FRAME:
433 {
434 SwFrmFmt* pFrm = mpWrtShell->GetCurFrmFmt();
435 if( pFrm )
436 aParam = pFrm->GetName();
437 }
438 break;
439 case SFX_STYLE_FAMILY_CHAR:
440 {
441 SwCharFmt* pChar = mpWrtShell->GetCurCharFmt();
442 if( pChar )
443 aParam = pChar->GetName();
444 }
445 break;
446 case SFX_STYLE_FAMILY_PSEUDO:
447 if(SFX_ITEM_SET == pArgs->GetItemState(SID_STYLE_UPD_BY_EX_NAME, sal_False, &pItem))
448 {
449 aParam = ((const SfxStringItem*)pItem)->GetValue();
450 }
451 break;
452 }
453 rReq.AppendItem(SfxStringItem(nSlot, aParam));
454 }
455 }
456 if (aParam.Len() || nSlot == SID_STYLE_WATERCAN )
457 {
458 switch(nSlot)
459 {
460 case SID_STYLE_EDIT:
461 nRet = Edit(aParam, aEmptyStr, nFamily, nMask, sal_False, 0, pActShell );
462 break;
463 case SID_STYLE_DELETE:
464 nRet = Delete(aParam, nFamily);
465 break;
466 case SID_STYLE_APPLY:
467 // Shellwechsel in ApplyStyles
468 nRet = ApplyStyles(aParam, nFamily, pActShell, rReq.GetModifier() );
469 break;
470 case SID_STYLE_WATERCAN:
471 nRet = DoWaterCan(aParam, nFamily);
472 break;
473 case SID_STYLE_UPDATE_BY_EXAMPLE:
474 nRet = UpdateStyle(aParam, nFamily, pActShell);
475 break;
476 case SID_STYLE_NEW_BY_EXAMPLE:
477 {
478 nRet = MakeByExample(aParam, nFamily, nMask, pActShell );
479 SfxTemplateDialog* pDlg = SFX_APP()->GetTemplateDialog();
480
481 if(pDlg && pDlg->IsVisible())
482 pDlg->Update();
483 }
484 break;
485
486 default:
487 DBG_ERROR( "Falsche Slot-Id");
488 }
489
490 rReq.Done();
491 }
492
493 break;
494 }
495 }
496
497 if(bSetReturn)
498 {
499 if(rReq.IsAPI()) // Basic bekommt nur sal_True oder sal_False
500 rReq.SetReturnValue(SfxUInt16Item(nSlot, nRet !=0));
501 else
502 rReq.SetReturnValue(SfxUInt16Item(nSlot, nRet));
503 }
504
505 }
506
507 /*--------------------------------------------------------------------
508 Beschreibung: Edit
509 --------------------------------------------------------------------*/
510
511
Edit(const String & rName,const String & rParent,const sal_uInt16 nFamily,sal_uInt16 nMask,const sal_Bool bNew,const sal_uInt16 nSlot,SwWrtShell * pActShell,const sal_Bool bBasic)512 sal_uInt16 SwDocShell::Edit(
513 const String &rName,
514 const String &rParent,
515 const sal_uInt16 nFamily,
516 sal_uInt16 nMask,
517 const sal_Bool bNew,
518 const sal_uInt16 nSlot,
519 SwWrtShell* pActShell,
520 const sal_Bool bBasic )
521 {
522 ASSERT(GetWrtShell(), "Keine Shell, keine Styles");
523 SfxStyleSheetBase *pStyle = 0;
524
525 sal_uInt16 nRet = nMask;
526 sal_Bool bModified = mpDoc->IsModified();
527
528 if( bNew )
529 {
530 if( SFXSTYLEBIT_ALL != nMask && SFXSTYLEBIT_USED != nMask )
531 nMask |= SFXSTYLEBIT_USERDEF;
532 else
533 nMask = SFXSTYLEBIT_USERDEF;
534
535 pStyle = &mxBasePool->Make( rName, (SfxStyleFamily)nFamily, nMask );
536
537 // die aktuellen als Parent setzen
538 SwDocStyleSheet* pDStyle = (SwDocStyleSheet*)pStyle;
539 switch( nFamily )
540 {
541 case SFX_STYLE_FAMILY_PARA:
542 {
543 if(rParent.Len())
544 {
545 SwTxtFmtColl* pColl = mpWrtShell->FindTxtFmtCollByName( rParent );
546 if(!pColl)
547 {
548 sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rParent, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL);
549 if(USHRT_MAX != nId)
550 pColl = mpWrtShell->GetTxtCollFromPool( nId );
551 }
552 pDStyle->GetCollection()->SetDerivedFrom( pColl );
553 pDStyle->PresetParent( rParent );
554
555 /*When a new paragraph style is created based on a "to outline style
556 assigned" paragraph style, the outline level attribute and the list
557 style attribute of the new paragraph style have to be set to 0
558 respectively "".*/
559 if( pColl->IsAssignedToListLevelOfOutlineStyle())
560 {
561 SwNumRuleItem aItem(aEmptyStr);
562 pDStyle->GetCollection()->SetFmtAttr( aItem );
563 pDStyle->GetCollection()->SetAttrOutlineLevel( 0 );
564 }
565
566 }
567 else
568 {
569 SwTxtFmtColl* pColl = mpWrtShell->GetCurTxtFmtColl();
570 pDStyle->GetCollection()->SetDerivedFrom( pColl );
571 if( pColl )
572 pDStyle->PresetParent( pColl->GetName() );
573 }
574 }
575 break;
576 case SFX_STYLE_FAMILY_CHAR:
577 {
578 if(rParent.Len())
579 {
580 SwCharFmt* pCFmt = mpWrtShell->FindCharFmtByName( rParent );
581 if(!pCFmt)
582 {
583 sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rParent, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT);
584 if(USHRT_MAX != nId)
585 pCFmt = mpWrtShell->GetCharFmtFromPool( nId );
586 }
587
588 pDStyle->GetCharFmt()->SetDerivedFrom( pCFmt );
589 pDStyle->PresetParent( rParent );
590 }
591 else
592 {
593 SwCharFmt* pCFmt = mpWrtShell->GetCurCharFmt();
594 pDStyle->GetCharFmt()->SetDerivedFrom( pCFmt );
595 if( pCFmt )
596 pDStyle->PresetParent( pCFmt->GetName() );
597 }
598 }
599 break;
600 case SFX_STYLE_FAMILY_FRAME :
601 {
602 if(rParent.Len())
603 {
604 SwFrmFmt* pFFmt = mpWrtShell->GetDoc()->FindFrmFmtByName( rParent );
605 if(!pFFmt)
606 {
607 sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rParent, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT);
608 if(USHRT_MAX != nId)
609 pFFmt = mpWrtShell->GetFrmFmtFromPool( nId );
610 }
611 pDStyle->GetFrmFmt()->SetDerivedFrom( pFFmt );
612 pDStyle->PresetParent( rParent );
613 }
614 }
615 break;
616 }
617 }
618 else
619 {
620 pStyle = mxBasePool->Find( rName, (SfxStyleFamily)nFamily );
621 ASSERT(pStyle, "Vorlage nicht gefunden");
622 }
623
624 if(!pStyle)
625 return sal_False;
626
627 // Dialoge zusammenstoepseln
628 //
629 rtl::Reference< SwDocStyleSheet > xTmp( new SwDocStyleSheet( *(SwDocStyleSheet*)pStyle ) );
630 if( SFX_STYLE_FAMILY_PARA == nFamily )
631 {
632 SfxItemSet& rSet = xTmp->GetItemSet();
633 ::SwToSfxPageDescAttr( rSet );
634 // erstmal nur eine Null
635 rSet.Put(SwBackgroundDestinationItem(SID_PARA_BACKGRND_DESTINATION, 0));
636 // --> OD 2008-02-13 #newlistlevelattrs#
637 // merge list level indent attributes into the item set if needed
638 xTmp->MergeIndentAttrsOfListStyle( rSet );
639 // <--
640 }
641 /* else if( SFX_STYLE_FAMILY_FRAME == nFamily )
642 {
643 // Auskommentiert wegen Bug #45776 (per default keine Breite&Groesse in Rahmenvorlagen)
644 SfxItemSet& rSet = aTmp.GetItemSet();
645 if( SFX_ITEM_SET != rSet.GetItemState( RES_FRM_SIZE ))
646 {
647 // dann sollten wir spaetesten hier eines anlegen
648 SwFrmValid aFrmDefValues;
649 rSet.Put( SwFmtFrmSize( ATT_VAR_SIZE, aFrmDefValues.nWidth,
650 aFrmDefValues.nHeight ));
651 }
652 }*/
653 else if( SFX_STYLE_FAMILY_CHAR == nFamily )
654 {
655 SfxItemSet& rSet = xTmp->GetItemSet();
656 const SfxPoolItem *pTmpBrush;
657 if( SFX_ITEM_SET == rSet.GetItemState( RES_CHRATR_BACKGROUND,
658 sal_True, &pTmpBrush ) )
659 {
660 SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
661 aTmpBrush.SetWhich( RES_BACKGROUND );
662 rSet.Put( aTmpBrush );
663 }
664 }
665 if (!bBasic)
666 {
667 // vor dem Dialog wird der HtmlMode an der DocShell versenkt
668 sal_uInt16 nHtmlMode = ::GetHtmlMode(this);
669
670 // In HTML mode, we do not always have a printer. In order to show
671 // the correct page size in the Format - Page dialog, we have to
672 // get one here.
673 SwWrtShell* pCurrShell = ( pActShell ? pActShell : mpWrtShell );
674 if( ( HTMLMODE_ON & nHtmlMode ) &&
675 !pCurrShell->getIDocumentDeviceAccess()->getPrinter( false ) )
676 pCurrShell->InitPrt( pCurrShell->getIDocumentDeviceAccess()->getPrinter( true ) );
677
678 PutItem(SfxUInt16Item(SID_HTML_MODE, nHtmlMode));
679 FieldUnit eMetric = ::GetDfltMetric(0 != (HTMLMODE_ON&nHtmlMode));
680 SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)));
681 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
682 DBG_ASSERT(pFact, "Dialogdiet fail!");
683 SfxAbstractTabDialog* pDlg = pFact->CreateTemplateDialog( DLG_TEMPLATE_BASE,
684 0, *(xTmp.get()), nFamily, nSlot,
685 pActShell ? pActShell : mpWrtShell, bNew);
686 DBG_ASSERT(pDlg, "Dialogdiet fail!");
687 if(RET_OK == pDlg->Execute())
688 {
689 GetWrtShell()->StartAllAction();
690
691 // nur bei Absatz-Vorlagen die Maske neu setzen
692 if( bNew )
693 {
694 nRet = SFX_STYLE_FAMILY_PARA == pStyle->GetFamily()
695 ? xTmp->GetMask()
696 : SFXSTYLEBIT_USERDEF;
697 }
698 else if( pStyle->GetMask() != xTmp->GetMask() )
699 nRet = xTmp->GetMask();
700
701 if( SFX_STYLE_FAMILY_PARA == nFamily )
702 {
703 SfxItemSet aSet( *pDlg->GetOutputItemSet() );
704 ::SfxToSwPageDescAttr( *GetWrtShell(), aSet );
705 // --> OD 2008-02-12 #newlistlevelattrs#
706 // reset indent attributes at paragraph style, if a list style
707 // will be applied and no indent attributes will be applied.
708 xTmp->SetItemSet( aSet, true );
709 // <--
710 }
711 else
712 {
713 if(SFX_STYLE_FAMILY_PAGE == nFamily)
714 {
715 static const sal_uInt16 aInval[] = {
716 SID_IMAGE_ORIENTATION,
717 SID_ATTR_CHAR_FONT,
718 FN_INSERT_CTRL, FN_INSERT_OBJ_CTRL, 0};
719 mpView->GetViewFrame()->GetBindings().Invalidate(aInval);
720 }
721 SfxItemSet aTmpSet( *pDlg->GetOutputItemSet() );
722 if( SFX_STYLE_FAMILY_CHAR == nFamily )
723 {
724 const SfxPoolItem *pTmpBrush;
725 if( SFX_ITEM_SET == aTmpSet.GetItemState( RES_BACKGROUND,
726 sal_False, &pTmpBrush ) )
727 {
728 SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
729 aTmpBrush.SetWhich( RES_CHRATR_BACKGROUND );
730 aTmpSet.Put( aTmpBrush );
731 }
732 aTmpSet.ClearItem( RES_BACKGROUND );
733 }
734 xTmp->SetItemSet( aTmpSet );
735
736 if( SFX_STYLE_FAMILY_PAGE == nFamily && SvtLanguageOptions().IsCTLFontEnabled() )
737 {
738 const SfxPoolItem *pItem = NULL;
739 if( aTmpSet.GetItemState( GetPool().GetTrueWhich( SID_ATTR_FRAMEDIRECTION, sal_False ) , sal_True, &pItem ) == SFX_ITEM_SET )
740 SwChartHelper::DoUpdateAllCharts( mpDoc );
741 }
742 }
743 if(SFX_STYLE_FAMILY_PAGE == nFamily)
744 mpView->InvalidateRulerPos();
745
746 if( bNew )
747 mxBasePool->Broadcast( SfxStyleSheetHint( SFX_STYLESHEET_CREATED, *xTmp.get() ) );
748
749 // JP 19.09.97:
750 // Dialog vorm EndAction zerstoeren - bei Seitenvorlagen kann
751 // muss der ItemSet zerstoert werden, damit die Cursor aus den
752 // Kopf-/Fusszeilen entfernt werden. Sonst kommts zu GPFs!!!
753 delete pDlg;
754
755 mpDoc->SetModified();
756 if( !bModified ) // Bug 57028
757 {
758 mpDoc->GetIDocumentUndoRedo().SetUndoNoResetModified();
759 }
760
761 GetWrtShell()->EndAllAction();
762 }
763 else
764 {
765 if( bNew )
766 {
767 // #116530#
768 //pBasePool->Erase( &aTmp );
769 GetWrtShell()->Undo(1);
770 mpDoc->GetIDocumentUndoRedo().ClearRedo();
771 }
772
773 if( !bModified )
774 mpDoc->ResetModified();
775 delete pDlg;
776 }
777 }
778 else
779 {
780 // vor dem Dialog wird der HtmlMode an der DocShell versenkt
781 PutItem(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(this)));
782
783 GetWrtShell()->StartAllAction();
784
785 // nur bei Absatz-Vorlagen die Maske neu setzen
786 if( bNew )
787 {
788 nRet = SFX_STYLE_FAMILY_PARA == pStyle->GetFamily()
789 ? xTmp->GetMask()
790 : SFXSTYLEBIT_USERDEF;
791 }
792 else if( pStyle->GetMask() != xTmp->GetMask() )
793 nRet = xTmp->GetMask();
794
795 if( SFX_STYLE_FAMILY_PARA == nFamily )
796 ::SfxToSwPageDescAttr( *GetWrtShell(), xTmp->GetItemSet() );
797 else
798 {
799 SfxItemSet aTmpSet( xTmp->GetItemSet() );
800 if( SFX_STYLE_FAMILY_CHAR == nFamily )
801 {
802 const SfxPoolItem *pTmpBrush;
803 if( SFX_ITEM_SET == aTmpSet.GetItemState( RES_BACKGROUND,
804 sal_False, &pTmpBrush ) )
805 {
806 SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
807 aTmpBrush.SetWhich( RES_CHRATR_BACKGROUND );
808 aTmpSet.Put( aTmpBrush );
809 }
810 aTmpSet.ClearItem( RES_BACKGROUND );
811 }
812 xTmp->SetItemSet( aTmpSet );
813 }
814 if(SFX_STYLE_FAMILY_PAGE == nFamily)
815 mpView->InvalidateRulerPos();
816
817 if( bNew )
818 mxBasePool->Broadcast( SfxStyleSheetHint( SFX_STYLESHEET_CREATED, *xTmp.get() ) );
819
820 mpDoc->SetModified();
821 if( !bModified ) // Bug 57028
822 {
823 mpDoc->GetIDocumentUndoRedo().SetUndoNoResetModified();
824 }
825 GetWrtShell()->EndAllAction();
826 }
827
828 return nRet;
829 }
830
831 /*--------------------------------------------------------------------
832 Beschreibung: Delete
833 --------------------------------------------------------------------*/
834
835
Delete(const String & rName,sal_uInt16 nFamily)836 sal_uInt16 SwDocShell::Delete(const String &rName, sal_uInt16 nFamily)
837 {
838 SfxStyleSheetBase *pStyle = mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
839
840 if(pStyle)
841 {
842 ASSERT(GetWrtShell(), "Keine Shell, keine Styles");
843
844 GetWrtShell()->StartAllAction();
845 mxBasePool->Remove(pStyle);
846 GetWrtShell()->EndAllAction();
847
848 return sal_True;
849 }
850 return sal_False;
851 }
852
853 /*--------------------------------------------------------------------
854 Beschreibung: Vorlage anwenden
855 --------------------------------------------------------------------*/
856
857
ApplyStyles(const String & rName,sal_uInt16 nFamily,SwWrtShell * pShell,sal_uInt16 nMode)858 sal_uInt16 SwDocShell::ApplyStyles(const String &rName, sal_uInt16 nFamily,
859 SwWrtShell* pShell, sal_uInt16 nMode )
860 {
861 SwDocStyleSheet* pStyle =
862 (SwDocStyleSheet*)mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
863
864 ASSERT(pStyle, "Wo ist der StyleSheet");
865 if(!pStyle)
866 return sal_False;
867
868 SwWrtShell *pSh = pShell ? pShell : GetWrtShell();
869
870 ASSERT( pSh, "Keine Shell, keine Styles");
871
872 pSh->StartAllAction();
873
874 switch (nFamily)
875 {
876 case SFX_STYLE_FAMILY_CHAR:
877 {
878 SwFmtCharFmt aFmt( pStyle->GetCharFmt() );
879 pSh->SetAttrItem( aFmt, ( nMode & KEY_SHIFT ) ? nsSetAttrMode::SETATTR_DONTREPLACE : nsSetAttrMode::SETATTR_DEFAULT );
880 break;
881 }
882 case SFX_STYLE_FAMILY_PARA:
883 {
884 // clear also list attributes at affected text nodes, if paragraph style has the list style attribute set.
885 pSh->SetTxtFmtColl( pStyle->GetCollection(), true );
886 break;
887 }
888 case SFX_STYLE_FAMILY_FRAME:
889 {
890 if ( pSh->IsFrmSelected() )
891 pSh->SetFrmFmt( pStyle->GetFrmFmt() );
892 break;
893 }
894 case SFX_STYLE_FAMILY_PAGE:
895 {
896 pSh->SetPageStyle( pStyle->GetPageDesc()->GetName() );
897 break;
898 }
899 case SFX_STYLE_FAMILY_PSEUDO:
900 {
901 const SwNumRule* pNumRule = pStyle->GetNumRule();
902 const String sListIdForStyle = pNumRule->GetDefaultListId();
903 pSh->SetCurNumRule( *pNumRule, false, sListIdForStyle, true );
904 break;
905 }
906
907 default:
908 DBG_ERROR( "Unbekannte Familie" );
909 }
910 pSh->EndAllAction();
911
912 return nFamily;
913 }
914
915 /*--------------------------------------------------------------------
916 Beschreibung: Giesskanne starten
917 --------------------------------------------------------------------*/
918
919
920
DoWaterCan(const String & rName,sal_uInt16 nFamily)921 sal_uInt16 SwDocShell::DoWaterCan(const String &rName, sal_uInt16 nFamily)
922 {
923 ASSERT(GetWrtShell(), "Keine Shell, keine Styles");
924
925 SwEditWin& rEdtWin = mpView->GetEditWin();
926 SwApplyTemplate* pApply = rEdtWin.GetApplyTemplate();
927 sal_Bool bWaterCan = !(pApply && pApply->eType != 0);
928 if( !rName.Len() )
929 bWaterCan = sal_False;
930 SwApplyTemplate aTemplate;
931 aTemplate.eType = nFamily;
932
933 if(bWaterCan)
934 {
935 SwDocStyleSheet* pStyle =
936 (SwDocStyleSheet*)mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
937
938 ASSERT(pStyle, "Wo ist der StyleSheet");
939 if(!pStyle) return nFamily;
940
941 switch(nFamily)
942 {
943 case SFX_STYLE_FAMILY_CHAR:
944 aTemplate.aColl.pCharFmt = pStyle->GetCharFmt();
945 break;
946 case SFX_STYLE_FAMILY_PARA:
947 aTemplate.aColl.pTxtColl = pStyle->GetCollection();
948 break;
949 case SFX_STYLE_FAMILY_FRAME:
950 aTemplate.aColl.pFrmFmt = pStyle->GetFrmFmt();
951 break;
952 case SFX_STYLE_FAMILY_PAGE:
953 aTemplate.aColl.pPageDesc = (SwPageDesc*)pStyle->GetPageDesc();
954 break;
955 case SFX_STYLE_FAMILY_PSEUDO:
956 aTemplate.aColl.pNumRule = (SwNumRule*)pStyle->GetNumRule();
957 break;
958
959 default:
960 DBG_ERROR( "Unbekannte Familie");
961 }
962 }
963 else
964 aTemplate.eType = 0;
965
966 // Template anwenden
967 mpView->GetEditWin().SetApplyTemplate(aTemplate);
968
969 return nFamily;
970 }
971
972 /*--------------------------------------------------------------------
973 Beschreibung: Vorlage Updaten
974 --------------------------------------------------------------------*/
975
976
UpdateStyle(const String & rName,sal_uInt16 nFamily,SwWrtShell * pShell)977 sal_uInt16 SwDocShell::UpdateStyle(const String &rName, sal_uInt16 nFamily, SwWrtShell* pShell)
978 {
979 SwWrtShell* pCurrWrtShell = pShell ? pShell : GetWrtShell();
980 ASSERT(GetWrtShell(), "Keine Shell, keine Styles");
981
982 SwDocStyleSheet* pStyle =
983 (SwDocStyleSheet*)mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
984
985 if(!pStyle)
986 return nFamily;
987
988 switch(nFamily)
989 {
990 case SFX_STYLE_FAMILY_PARA:
991 {
992 SwTxtFmtColl* pColl = pStyle->GetCollection();
993 if(pColl && !pColl->IsDefault())
994 {
995 GetWrtShell()->StartAllAction();
996
997 SwRewriter aRewriter;
998 aRewriter.AddRule(UNDO_ARG1, pColl->GetName());
999
1000 GetWrtShell()->StartUndo(UNDO_INSFMTATTR, &aRewriter);
1001 GetWrtShell()->FillByEx(pColl);
1002 // Vorlage auch anwenden, um harte Attributierung
1003 // zu entfernen
1004 GetWrtShell()->SetTxtFmtColl( pColl );
1005 GetWrtShell()->EndUndo();
1006 GetWrtShell()->EndAllAction();
1007 }
1008 break;
1009 }
1010 case SFX_STYLE_FAMILY_FRAME:
1011 {
1012 SwFrmFmt* pFrm = pStyle->GetFrmFmt();
1013 if( pCurrWrtShell->IsFrmSelected() && pFrm && !pFrm->IsDefault() )
1014 {
1015 SfxItemSet aSet( GetPool(), aFrmFmtSetRange );
1016 pCurrWrtShell->StartAllAction();
1017 pCurrWrtShell->GetFlyFrmAttr( aSet );
1018
1019 // --> OD 2009-12-28 #i105535#
1020 // no update of anchor attribute
1021 aSet.ClearItem( RES_ANCHOR );
1022 // <--
1023
1024 pFrm->SetFmtAttr( aSet );
1025
1026 // Vorlage auch anwenden, um harte Attributierung
1027 // zu entfernen
1028 pCurrWrtShell->SetFrmFmt( pFrm, sal_True );
1029 pCurrWrtShell->EndAllAction();
1030 }
1031 }
1032 break;
1033 case SFX_STYLE_FAMILY_CHAR:
1034 {
1035 SwCharFmt* pChar = pStyle->GetCharFmt();
1036 if( pChar && !pChar->IsDefault() )
1037 {
1038 pCurrWrtShell->StartAllAction();
1039 pCurrWrtShell->FillByEx(pChar);
1040 // Vorlage auch anwenden, um harte Attributierung
1041 // zu entfernen
1042 pCurrWrtShell->EndAllAction();
1043 }
1044
1045 }
1046 break;
1047 case SFX_STYLE_FAMILY_PSEUDO:
1048 {
1049 const SwNumRule* pCurRule;
1050 if( pStyle->GetNumRule() &&
1051 0 != ( pCurRule = pCurrWrtShell->GetCurNumRule() ))
1052 {
1053 SwNumRule aRule( *pCurRule );
1054 // --> OD 2008-07-08 #i91400#
1055 aRule.SetName( pStyle->GetNumRule()->GetName(),
1056 *(pCurrWrtShell->GetDoc()) );
1057 // <--
1058 pCurrWrtShell->ChgNumRuleFmts( aRule );
1059 }
1060 }
1061 break;
1062 }
1063 return nFamily;
1064 }
1065
1066 /*--------------------------------------------------------------------
1067 Beschreibung: NewByExample
1068 --------------------------------------------------------------------*/
1069
1070
MakeByExample(const String & rName,sal_uInt16 nFamily,sal_uInt16 nMask,SwWrtShell * pShell)1071 sal_uInt16 SwDocShell::MakeByExample( const String &rName, sal_uInt16 nFamily,
1072 sal_uInt16 nMask, SwWrtShell* pShell )
1073 {
1074 SwWrtShell* pCurrWrtShell = pShell ? pShell : GetWrtShell();
1075 SwDocStyleSheet* pStyle = (SwDocStyleSheet*)mxBasePool->Find(
1076 rName, (SfxStyleFamily)nFamily );
1077 if(!pStyle)
1078 {
1079 // JP 07.07.95: behalte die akt. Maske vom PI bei, dadurch werden
1080 // neue sofort in den sichtbaren Bereich einsortiert
1081 if( SFXSTYLEBIT_ALL == nMask || SFXSTYLEBIT_USED == nMask )
1082 nMask = SFXSTYLEBIT_USERDEF;
1083 else
1084 nMask |= SFXSTYLEBIT_USERDEF;
1085
1086 pStyle = (SwDocStyleSheet*)&mxBasePool->Make(rName,
1087 (SfxStyleFamily)nFamily, nMask );
1088 }
1089
1090 switch(nFamily)
1091 {
1092 case SFX_STYLE_FAMILY_PARA:
1093 {
1094 SwTxtFmtColl* pColl = pStyle->GetCollection();
1095 if(pColl && !pColl->IsDefault())
1096 {
1097 pCurrWrtShell->StartAllAction();
1098 pCurrWrtShell->FillByEx(pColl);
1099 // Vorlage auch anwenden, um harte Attributierung
1100 // zu entfernen
1101 pColl->SetDerivedFrom(pCurrWrtShell->GetCurTxtFmtColl());
1102
1103 // setze die Maske noch an der Collection:
1104 sal_uInt16 nId = pColl->GetPoolFmtId() & 0x87ff;
1105 switch( nMask & 0x0fff )
1106 {
1107 case SWSTYLEBIT_TEXT:
1108 nId |= COLL_TEXT_BITS;
1109 break;
1110 case SWSTYLEBIT_CHAPTER:
1111 nId |= COLL_DOC_BITS;
1112 break;
1113 case SWSTYLEBIT_LIST:
1114 nId |= COLL_LISTS_BITS;
1115 break;
1116 case SWSTYLEBIT_IDX:
1117 nId |= COLL_REGISTER_BITS;
1118 break;
1119 case SWSTYLEBIT_EXTRA:
1120 nId |= COLL_EXTRA_BITS;
1121 break;
1122 case SWSTYLEBIT_HTML:
1123 nId |= COLL_HTML_BITS;
1124 break;
1125 }
1126 pColl->SetPoolFmtId(nId);
1127
1128 pCurrWrtShell->SetTxtFmtColl(pColl);
1129 pCurrWrtShell->EndAllAction();
1130 }
1131 }
1132 break;
1133 case SFX_STYLE_FAMILY_FRAME:
1134 {
1135 SwFrmFmt* pFrm = pStyle->GetFrmFmt();
1136 if(pCurrWrtShell->IsFrmSelected() && pFrm && !pFrm->IsDefault())
1137 {
1138 pCurrWrtShell->StartAllAction();
1139
1140 SfxItemSet aSet(GetPool(), aFrmFmtSetRange );
1141 pCurrWrtShell->GetFlyFrmAttr( aSet );
1142
1143 SwFrmFmt* pFFmt = pCurrWrtShell->GetCurFrmFmt();
1144 pFrm->SetDerivedFrom( pFFmt );
1145
1146 // JP 10.06.98: nur automatische Orientierungen uebernehmen
1147 /* #61359# jetzt auch wieder alle Orientierungen
1148 const SfxPoolItem* pItem;
1149 if( SFX_ITEM_SET == aSet.GetItemState( RES_VERT_ORIENT,
1150 sal_False, &pItem ) &&
1151 text::VertOrientation::NONE == ((SwFmtVertOrient*)pItem)->GetVertOrient())
1152 aSet.ClearItem( RES_VERT_ORIENT );
1153
1154 if( SFX_ITEM_SET == aSet.GetItemState( RES_HORI_ORIENT,
1155 sal_False, &pItem ) &&
1156 text::HoriOrientation::NONE == ((SwFmtHoriOrient*)pItem)->GetHoriOrient())
1157 aSet.ClearItem( RES_HORI_ORIENT );
1158 */
1159
1160 pFrm->SetFmtAttr( aSet );
1161 // Vorlage auch anwenden, um harte Attributierung
1162 // zu entfernen
1163 pCurrWrtShell->SetFrmFmt( pFrm );
1164 pCurrWrtShell->EndAllAction();
1165 }
1166 }
1167 break;
1168 case SFX_STYLE_FAMILY_CHAR:
1169 {
1170 SwCharFmt* pChar = pStyle->GetCharFmt();
1171 if(pChar && !pChar->IsDefault())
1172 {
1173 pCurrWrtShell->StartAllAction();
1174 pCurrWrtShell->FillByEx( pChar );
1175 pChar->SetDerivedFrom( pCurrWrtShell->GetCurCharFmt() );
1176 SwFmtCharFmt aFmt( pChar );
1177 pCurrWrtShell->SetAttrItem( aFmt );
1178 pCurrWrtShell->EndAllAction();
1179 }
1180 }
1181 break;
1182
1183 case SFX_STYLE_FAMILY_PAGE:
1184 {
1185 pCurrWrtShell->StartAllAction();
1186 sal_uInt16 nPgDsc = pCurrWrtShell->GetCurPageDesc();
1187 SwPageDesc& rSrc = (SwPageDesc&)pCurrWrtShell->GetPageDesc( nPgDsc );
1188 SwPageDesc& rDest = *(SwPageDesc*)pStyle->GetPageDesc();
1189
1190 sal_uInt16 nPoolId = rDest.GetPoolFmtId();
1191 sal_uInt16 nHId = rDest.GetPoolHelpId();
1192 sal_uInt8 nHFId = rDest.GetPoolHlpFileId();
1193
1194 pCurrWrtShell->GetDoc()->CopyPageDesc( rSrc, rDest );
1195
1196 // PoolId darf NIE kopiert werden!
1197 rDest.SetPoolFmtId( nPoolId );
1198 rDest.SetPoolHelpId( nHId );
1199 rDest.SetPoolHlpFileId( nHFId );
1200
1201 // werden Kopf-/Fusszeilen angelegt, so gibt es kein Undo mehr!
1202 pCurrWrtShell->GetDoc()->GetIDocumentUndoRedo().DelAllUndoObj();
1203
1204 pCurrWrtShell->EndAllAction();
1205 }
1206 break;
1207
1208 case SFX_STYLE_FAMILY_PSEUDO:
1209 {
1210 pCurrWrtShell->StartAllAction();
1211
1212 SwNumRule aRule( *pCurrWrtShell->GetCurNumRule() );
1213 String sOrigRule( aRule.GetName() );
1214 // --> OD 2008-07-08 #i91400#
1215 aRule.SetName( pStyle->GetNumRule()->GetName(),
1216 *(pCurrWrtShell->GetDoc()) );
1217 // <--
1218 pCurrWrtShell->ChgNumRuleFmts( aRule );
1219
1220 pCurrWrtShell->ReplaceNumRule( sOrigRule, aRule.GetName() );
1221
1222
1223 pCurrWrtShell->EndAllAction();
1224 }
1225 break;
1226 }
1227 return nFamily;
1228 }
1229
LoadStyles(SfxObjectShell & rSource)1230 void SwDocShell::LoadStyles( SfxObjectShell& rSource )
1231 {
1232 _LoadStyles(rSource, sal_False);
1233 }
1234 /* -----------------16.05.2003 15:45-----------------
1235 bPreserveCurrentDocument determines whether SetFixFields() is called
1236 This call modifies the source document. This mustn't happen when the source
1237 is a document the user is working on.
1238 Calls of ::LoadStyles() normally use files especially loaded for the purpose
1239 of importing styles.
1240 --------------------------------------------------*/
_LoadStyles(SfxObjectShell & rSource,sal_Bool bPreserveCurrentDocument)1241 void SwDocShell::_LoadStyles( SfxObjectShell& rSource, sal_Bool bPreserveCurrentDocument )
1242 {
1243 /* [Beschreibung]
1244
1245 Diese Methode wird vom SFx gerufen, wenn aus einer Dokument-Vorlage
1246 Styles nachgeladen werden sollen. Bestehende Styles soll dabei
1247 "uberschrieben werden. Das Dokument mu"s daher neu formatiert werden.
1248 Daher werden die Applikationen in der Regel diese Methode "uberladen
1249 und in ihrer Implementierung die Implementierung der Basisklasse
1250 rufen.
1251 */
1252 // ist die Source unser Document, dann uebernehmen wir das
1253 // abpruefen selbst (wesentlich schneller und laeuft nicht ueber
1254 // die Kruecke SfxStylePool
1255 if( rSource.ISA( SwDocShell ))
1256 {
1257 //JP 28.05.99: damit die Kopf-/Fusszeilen nicht den fixen Inhalt
1258 // der Vorlage erhalten, einmal alle FixFelder der
1259 // Source aktualisieren
1260 if(!bPreserveCurrentDocument)
1261 ((SwDocShell&)rSource).mpDoc->SetFixFields(false, NULL);
1262 if( mpWrtShell )
1263 {
1264 mpWrtShell->StartAllAction();
1265 mpDoc->ReplaceStyles( *((SwDocShell&)rSource).mpDoc );
1266 mpWrtShell->EndAllAction();
1267 }
1268 else
1269 {
1270 sal_Bool bModified = mpDoc->IsModified();
1271 mpDoc->ReplaceStyles( *((SwDocShell&)rSource).mpDoc );
1272 if( !bModified && mpDoc->IsModified() && !mpView )
1273 {
1274 // die View wird spaeter angelegt, ueberschreibt aber das
1275 // Modify-Flag. Per Undo ist sowieso nichts mehr zu machen
1276 mpDoc->GetIDocumentUndoRedo().SetUndoNoResetModified();
1277 }
1278 }
1279 }
1280 else
1281 SfxObjectShell::LoadStyles( rSource );
1282 }
1283
1284
FormatPage(const String & rPage,const sal_uInt16 nSlot,SwWrtShell & rActShell)1285 void SwDocShell::FormatPage(
1286 const String& rPage,
1287 const sal_uInt16 nSlot,
1288 SwWrtShell& rActShell )
1289 {
1290 Edit( rPage, aEmptyStr, SFX_STYLE_FAMILY_PAGE, 0, sal_False, nSlot, &rActShell);
1291 }
1292
GetStyleFamilyBitmap(SfxStyleFamily eFamily,BmpColorMode eColorMode)1293 Bitmap SwDocShell::GetStyleFamilyBitmap( SfxStyleFamily eFamily, BmpColorMode eColorMode )
1294 {
1295 if( SFX_STYLE_FAMILY_PSEUDO == eFamily )
1296 {
1297 if ( eColorMode == BMP_COLOR_NORMAL )
1298 return Bitmap( SW_RES( BMP_STYLES_FAMILY_NUM ));
1299 else
1300 return Bitmap( SW_RES( BMP_STYLES_FAMILY_NUM_HC ));
1301 }
1302
1303 return SfxObjectShell::GetStyleFamilyBitmap( eFamily, eColorMode );
1304 }
1305
1306
1307
1308