xref: /trunk/main/sw/source/ui/app/docst.cxx (revision 69a74367)
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 
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( pDoc->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( pDoc->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( pDoc->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 
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 = pWrtShell->GetCurFrmFmt();
435 							if( pFrm )
436 								aParam = pFrm->GetName();
437 						}
438 						break;
439 						case SFX_STYLE_FAMILY_CHAR:
440 						{
441 							SwCharFmt* pChar = pWrtShell->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 
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 = pDoc->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 = pWrtShell->FindTxtFmtCollByName( rParent );
546                     if(!pColl)
547                     {
548                         sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rParent, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL);
549                         if(USHRT_MAX != nId)
550                             pColl =  pWrtShell->GetTxtCollFromPool( nId );
551                     }
552 					pDStyle->GetCollection()->SetDerivedFrom( pColl );
553 					pDStyle->PresetParent( rParent );
554 
555 					//#outline level,add by zhaojianwei
556 					 /*When a new paragraph style is created based on a "to outline style
557 						assigned" paragraph style, the outline level attribute and the list
558 						style attribute of the new paragraph style have to be set to 0
559 						respectively "".*/
560 					if( pColl->IsAssignedToListLevelOfOutlineStyle())
561 					{
562 						SwNumRuleItem aItem(aEmptyStr);
563 						pDStyle->GetCollection()->SetFmtAttr( aItem );
564 						pDStyle->GetCollection()->SetAttrOutlineLevel( 0 );
565 					}
566 					//<-end,zhaojianwei
567 
568 				}
569 				else
570 				{
571 					SwTxtFmtColl* pColl = pWrtShell->GetCurTxtFmtColl();
572 					pDStyle->GetCollection()->SetDerivedFrom( pColl );
573 					if( pColl )
574 						pDStyle->PresetParent( pColl->GetName() );
575 				}
576 			}
577 			break;
578 			case SFX_STYLE_FAMILY_CHAR:
579 			{
580 				if(rParent.Len())
581 				{
582 					SwCharFmt* pCFmt = pWrtShell->FindCharFmtByName( rParent );
583                     if(!pCFmt)
584                     {
585                         sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rParent, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT);
586                         if(USHRT_MAX != nId)
587                             pCFmt =  pWrtShell->GetCharFmtFromPool( nId );
588                     }
589 
590 					pDStyle->GetCharFmt()->SetDerivedFrom( pCFmt );
591 					pDStyle->PresetParent( rParent );
592 				}
593 				else
594 				{
595 					SwCharFmt* pCFmt = pWrtShell->GetCurCharFmt();
596 					pDStyle->GetCharFmt()->SetDerivedFrom( pCFmt );
597 						if( pCFmt )
598 							pDStyle->PresetParent( pCFmt->GetName() );
599 				}
600 			}
601 			break;
602 			case SFX_STYLE_FAMILY_FRAME :
603 			{
604 				if(rParent.Len())
605 				{
606 					SwFrmFmt* pFFmt = pWrtShell->GetDoc()->FindFrmFmtByName( rParent );
607                     if(!pFFmt)
608                     {
609                         sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rParent, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT);
610                         if(USHRT_MAX != nId)
611                             pFFmt =  pWrtShell->GetFrmFmtFromPool( nId );
612                     }
613                     pDStyle->GetFrmFmt()->SetDerivedFrom( pFFmt );
614 					pDStyle->PresetParent( rParent );
615 				}
616 			}
617 			break;
618 		}
619 	}
620 	else
621 	{
622 		pStyle = mxBasePool->Find( rName, (SfxStyleFamily)nFamily );
623 		ASSERT(pStyle, "Vorlage nicht gefunden");
624 	}
625 
626 	if(!pStyle)
627 		return sal_False;
628 
629 	// Dialoge zusammenstoepseln
630 	//
631 	rtl::Reference< SwDocStyleSheet > xTmp( new SwDocStyleSheet( *(SwDocStyleSheet*)pStyle ) );
632 	if( SFX_STYLE_FAMILY_PARA == nFamily )
633 	{
634 		SfxItemSet& rSet = xTmp->GetItemSet();
635 		::SwToSfxPageDescAttr( rSet );
636 		// erstmal nur eine Null
637 		rSet.Put(SwBackgroundDestinationItem(SID_PARA_BACKGRND_DESTINATION, 0));
638         // --> OD 2008-02-13 #newlistlevelattrs#
639         // merge list level indent attributes into the item set if needed
640         xTmp->MergeIndentAttrsOfListStyle( rSet );
641         // <--
642 	}
643 /*	else if( SFX_STYLE_FAMILY_FRAME == nFamily )
644 	{
645 		// Auskommentiert wegen Bug #45776 (per default keine Breite&Groesse in Rahmenvorlagen)
646 		SfxItemSet& rSet = aTmp.GetItemSet();
647 		if( SFX_ITEM_SET != rSet.GetItemState( RES_FRM_SIZE ))
648 		{
649 			// dann sollten wir spaetesten hier eines anlegen
650 			SwFrmValid aFrmDefValues;
651 			rSet.Put( SwFmtFrmSize( ATT_VAR_SIZE, aFrmDefValues.nWidth,
652 									aFrmDefValues.nHeight ));
653 		}
654 	}*/
655 	else if( SFX_STYLE_FAMILY_CHAR == nFamily )
656 	{
657 		SfxItemSet& rSet = xTmp->GetItemSet();
658 		const SfxPoolItem *pTmpBrush;
659 		if( SFX_ITEM_SET == rSet.GetItemState( RES_CHRATR_BACKGROUND,
660 			sal_True, &pTmpBrush ) )
661 		{
662 			SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
663 			aTmpBrush.SetWhich( RES_BACKGROUND );
664 			rSet.Put( aTmpBrush );
665 		}
666 	}
667 	if (!bBasic)
668 	{
669 		// vor dem Dialog wird der HtmlMode an der DocShell versenkt
670 		sal_uInt16 nHtmlMode = ::GetHtmlMode(this);
671 
672         // In HTML mode, we do not always have a printer. In order to show
673         // the correct page size in the Format - Page dialog, we have to
674         // get one here.
675         SwWrtShell* pCurrShell = ( pActShell ? pActShell : pWrtShell );
676         if( ( HTMLMODE_ON & nHtmlMode ) &&
677             !pCurrShell->getIDocumentDeviceAccess()->getPrinter( false ) )
678             pCurrShell->InitPrt( pCurrShell->getIDocumentDeviceAccess()->getPrinter( true ) );
679 
680         PutItem(SfxUInt16Item(SID_HTML_MODE, nHtmlMode));
681         FieldUnit eMetric = ::GetDfltMetric(0 != (HTMLMODE_ON&nHtmlMode));
682         SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)));
683         SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
684         DBG_ASSERT(pFact, "Dialogdiet fail!");
685         SfxAbstractTabDialog* pDlg = pFact->CreateTemplateDialog( DLG_TEMPLATE_BASE,
686                                                     0, *(xTmp.get()), nFamily, nSlot,
687                                                     pActShell ? pActShell : pWrtShell, bNew);
688         DBG_ASSERT(pDlg, "Dialogdiet fail!");
689 		if(RET_OK == pDlg->Execute())
690 		{
691 			GetWrtShell()->StartAllAction();
692 
693 			// nur bei Absatz-Vorlagen die Maske neu setzen
694 			if( bNew )
695 			{
696 				nRet = SFX_STYLE_FAMILY_PARA == pStyle->GetFamily()
697 						? xTmp->GetMask()
698 						: SFXSTYLEBIT_USERDEF;
699 			}
700 			else if( pStyle->GetMask() != xTmp->GetMask() )
701 				nRet = xTmp->GetMask();
702 
703 			if( SFX_STYLE_FAMILY_PARA == nFamily )
704 			{
705 				SfxItemSet aSet( *pDlg->GetOutputItemSet() );
706 				::SfxToSwPageDescAttr( *GetWrtShell(), aSet  );
707                 // --> OD 2008-02-12 #newlistlevelattrs#
708                 // reset indent attributes at paragraph style, if a list style
709                 // will be applied and no indent attributes will be applied.
710 				xTmp->SetItemSet( aSet, true );
711                 // <--
712 			}
713 			else
714 			{
715                 if(SFX_STYLE_FAMILY_PAGE == nFamily)
716                 {
717                     static const sal_uInt16 aInval[] = {
718                         SID_IMAGE_ORIENTATION,
719 						SID_ATTR_CHAR_FONT,
720 						FN_INSERT_CTRL, FN_INSERT_OBJ_CTRL, 0};
721                     pView->GetViewFrame()->GetBindings().Invalidate(aInval);
722                 }
723                 SfxItemSet aTmpSet( *pDlg->GetOutputItemSet() );
724 				if( SFX_STYLE_FAMILY_CHAR == nFamily )
725 				{
726 					const SfxPoolItem *pTmpBrush;
727 					if( SFX_ITEM_SET == aTmpSet.GetItemState( RES_BACKGROUND,
728 						sal_False, &pTmpBrush ) )
729 					{
730 						SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
731 						aTmpBrush.SetWhich( RES_CHRATR_BACKGROUND );
732 						aTmpSet.Put( aTmpBrush );
733 					}
734 					aTmpSet.ClearItem( RES_BACKGROUND );
735 				}
736 				xTmp->SetItemSet( aTmpSet );
737 
738                 if( SFX_STYLE_FAMILY_PAGE == nFamily && SvtLanguageOptions().IsCTLFontEnabled() )
739                 {
740                     const SfxPoolItem *pItem = NULL;
741                     if( aTmpSet.GetItemState( GetPool().GetTrueWhich( SID_ATTR_FRAMEDIRECTION, sal_False ) , sal_True, &pItem ) == SFX_ITEM_SET )
742                         SwChartHelper::DoUpdateAllCharts( pDoc );
743                 }
744 			}
745 			if(SFX_STYLE_FAMILY_PAGE == nFamily)
746 				pView->InvalidateRulerPos();
747 
748 			if( bNew )
749 				mxBasePool->Broadcast( SfxStyleSheetHint( SFX_STYLESHEET_CREATED, *xTmp.get() ) );
750 
751 			// JP 19.09.97:
752 			// Dialog vorm EndAction zerstoeren - bei Seitenvorlagen kann
753 			// muss der ItemSet zerstoert werden, damit die Cursor aus den
754 			// Kopf-/Fusszeilen entfernt werden. Sonst kommts zu GPFs!!!
755 			delete pDlg;
756 
757 			pDoc->SetModified();
758 			if( !bModified )	// Bug 57028
759             {
760                 pDoc->GetIDocumentUndoRedo().SetUndoNoResetModified();
761             }
762 
763 			GetWrtShell()->EndAllAction();
764 		}
765 		else
766 		{
767 			if( bNew )
768             {
769                 // #116530#
770 				//pBasePool->Erase( &aTmp );
771                 GetWrtShell()->Undo(1);
772                 pDoc->GetIDocumentUndoRedo().ClearRedo();
773             }
774 
775 			if( !bModified )
776 				pDoc->ResetModified();
777 			delete pDlg;
778 		}
779 	}
780 	else
781 	{
782 		// vor dem Dialog wird der HtmlMode an der DocShell versenkt
783 		PutItem(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(this)));
784 
785 		GetWrtShell()->StartAllAction();
786 
787 		// nur bei Absatz-Vorlagen die Maske neu setzen
788 		if( bNew )
789 		{
790 			nRet = SFX_STYLE_FAMILY_PARA == pStyle->GetFamily()
791 					? xTmp->GetMask()
792 					: SFXSTYLEBIT_USERDEF;
793 		}
794 		else if( pStyle->GetMask() != xTmp->GetMask() )
795 			nRet = xTmp->GetMask();
796 
797 		if( SFX_STYLE_FAMILY_PARA == nFamily )
798 			::SfxToSwPageDescAttr( *GetWrtShell(), xTmp->GetItemSet() );
799 		else
800 		{
801 			SfxItemSet aTmpSet( xTmp->GetItemSet() );
802 			if( SFX_STYLE_FAMILY_CHAR == nFamily )
803 			{
804 				const SfxPoolItem *pTmpBrush;
805 				if( SFX_ITEM_SET == aTmpSet.GetItemState( RES_BACKGROUND,
806 					sal_False, &pTmpBrush ) )
807 				{
808 					SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
809 					aTmpBrush.SetWhich( RES_CHRATR_BACKGROUND );
810 					aTmpSet.Put( aTmpBrush );
811 				}
812 				aTmpSet.ClearItem( RES_BACKGROUND );
813 			}
814 			xTmp->SetItemSet( aTmpSet );
815 		}
816 		if(SFX_STYLE_FAMILY_PAGE == nFamily)
817 			pView->InvalidateRulerPos();
818 
819 		if( bNew )
820 			mxBasePool->Broadcast( SfxStyleSheetHint( SFX_STYLESHEET_CREATED, *xTmp.get() ) );
821 
822 		pDoc->SetModified();
823 		if( !bModified )		// Bug 57028
824         {
825             pDoc->GetIDocumentUndoRedo().SetUndoNoResetModified();
826         }
827 		GetWrtShell()->EndAllAction();
828 	}
829 
830 	return nRet;
831 }
832 
833 /*--------------------------------------------------------------------
834 	Beschreibung:	Delete
835  --------------------------------------------------------------------*/
836 
837 
838 sal_uInt16 SwDocShell::Delete(const String &rName, sal_uInt16 nFamily)
839 {
840 	SfxStyleSheetBase *pStyle = mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
841 
842 	if(pStyle)
843 	{
844 		ASSERT(GetWrtShell(), "Keine Shell, keine Styles");
845 
846 		GetWrtShell()->StartAllAction();
847 		mxBasePool->Remove(pStyle);
848 		GetWrtShell()->EndAllAction();
849 
850 		return sal_True;
851 	}
852 	return sal_False;
853 }
854 
855 /*--------------------------------------------------------------------
856 	Beschreibung:	Vorlage anwenden
857  --------------------------------------------------------------------*/
858 
859 
860 sal_uInt16 SwDocShell::ApplyStyles(const String &rName, sal_uInt16 nFamily,
861 							   SwWrtShell* pShell, sal_uInt16 nMode )
862 {
863 	SwDocStyleSheet* pStyle =
864 		(SwDocStyleSheet*)mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
865 
866 	ASSERT(pStyle, "Wo ist der StyleSheet");
867 	if(!pStyle)
868 		return sal_False;
869 
870 	SwWrtShell *pSh = pShell ? pShell : GetWrtShell();
871 
872 	ASSERT( pSh, "Keine Shell, keine Styles");
873 
874 	pSh->StartAllAction();
875 
876 	switch(nFamily)
877 	{
878 		case SFX_STYLE_FAMILY_CHAR:
879 		{
880 			SwFmtCharFmt aFmt(pStyle->GetCharFmt());
881 			pSh->SetAttrItem( aFmt, (nMode & KEY_SHIFT) ?
882                 nsSetAttrMode::SETATTR_DONTREPLACE : nsSetAttrMode::SETATTR_DEFAULT );
883 			break;
884 		}
885 		case SFX_STYLE_FAMILY_PARA:
886 		{
887             // --> OD 2007-11-06 #i62675#
888             // clear also list attributes at affected text nodes, if paragraph
889             // style has the list style attribute set.
890             pSh->SetTxtFmtColl( pStyle->GetCollection(), true );
891             // <--
892 			break;
893 		}
894 		case SFX_STYLE_FAMILY_FRAME:
895 		{
896 			if ( pSh->IsFrmSelected() )
897 				pSh->SetFrmFmt( pStyle->GetFrmFmt() );
898 			break;
899 		}
900 		case SFX_STYLE_FAMILY_PAGE:
901 		{
902 			pSh->SetPageStyle(pStyle->GetPageDesc()->GetName());
903 			break;
904 		}
905 		case SFX_STYLE_FAMILY_PSEUDO:
906 		{
907             // --> OD 2008-02-08 #newlistlevelattrs#
908             // reset indent attribute on applying list style
909             // --> OD 2008-03-17 #refactorlists#
910             // continue list of list style
911             const SwNumRule* pNumRule = pStyle->GetNumRule();
912             const String sListIdForStyle =pNumRule->GetDefaultListId();
913             pSh->SetCurNumRule( *pNumRule, false, sListIdForStyle, true );
914             // <--
915 			break;
916 		}
917 		default:
918 			DBG_ERROR("Unbekannte Familie");
919 	}
920 	pSh->EndAllAction();
921 
922 	return nFamily;
923 }
924 
925 /*--------------------------------------------------------------------
926 	Beschreibung:	Giesskanne starten
927  --------------------------------------------------------------------*/
928 
929 
930 
931 sal_uInt16 SwDocShell::DoWaterCan(const String &rName, sal_uInt16 nFamily)
932 {
933 	ASSERT(GetWrtShell(), "Keine Shell, keine Styles");
934 
935 	SwEditWin& rEdtWin = pView->GetEditWin();
936 	SwApplyTemplate* pApply = rEdtWin.GetApplyTemplate();
937 	sal_Bool bWaterCan = !(pApply && pApply->eType != 0);
938 	if( !rName.Len() )
939 		bWaterCan = sal_False;
940 	SwApplyTemplate aTemplate;
941 	aTemplate.eType = nFamily;
942 
943 	if(bWaterCan)
944 	{
945 		SwDocStyleSheet* pStyle =
946 			(SwDocStyleSheet*)mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
947 
948 		ASSERT(pStyle, "Wo ist der StyleSheet");
949 		if(!pStyle) return nFamily;
950 
951 		switch(nFamily)
952 		{
953 			case SFX_STYLE_FAMILY_CHAR:
954 				aTemplate.aColl.pCharFmt = pStyle->GetCharFmt();
955 				break;
956 			case SFX_STYLE_FAMILY_PARA:
957 				aTemplate.aColl.pTxtColl = pStyle->GetCollection();
958 				break;
959 			case SFX_STYLE_FAMILY_FRAME:
960 				aTemplate.aColl.pFrmFmt = pStyle->GetFrmFmt();
961 				break;
962 			case SFX_STYLE_FAMILY_PAGE:
963 				aTemplate.aColl.pPageDesc = (SwPageDesc*)pStyle->GetPageDesc();
964 				break;
965 			case SFX_STYLE_FAMILY_PSEUDO:
966 				aTemplate.aColl.pNumRule = (SwNumRule*)pStyle->GetNumRule();
967 				break;
968 
969 			default:
970 				DBG_ERROR( "Unbekannte Familie");
971 		}
972 	}
973 	else
974 		aTemplate.eType = 0;
975 
976 	// Template anwenden
977 	pView->GetEditWin().SetApplyTemplate(aTemplate);
978 
979 	return nFamily;
980 }
981 
982 /*--------------------------------------------------------------------
983 	Beschreibung:	Vorlage Updaten
984  --------------------------------------------------------------------*/
985 
986 
987 sal_uInt16 SwDocShell::UpdateStyle(const String &rName, sal_uInt16 nFamily, SwWrtShell* pShell)
988 {
989     SwWrtShell* pCurrWrtShell = pShell ? pShell : GetWrtShell();
990 	ASSERT(GetWrtShell(), "Keine Shell, keine Styles");
991 
992 	SwDocStyleSheet* pStyle =
993 		(SwDocStyleSheet*)mxBasePool->Find(rName, (SfxStyleFamily)nFamily);
994 
995 	if(!pStyle)
996 		return nFamily;
997 
998 	switch(nFamily)
999 	{
1000 		case SFX_STYLE_FAMILY_PARA:
1001 		{
1002 			SwTxtFmtColl* pColl = pStyle->GetCollection();
1003 			if(pColl && !pColl->IsDefault())
1004 			{
1005 				GetWrtShell()->StartAllAction();
1006 
1007                 SwRewriter aRewriter;
1008                 aRewriter.AddRule(UNDO_ARG1, pColl->GetName());
1009 
1010                 GetWrtShell()->StartUndo(UNDO_INSFMTATTR, &aRewriter);
1011 				GetWrtShell()->FillByEx(pColl);
1012 					// Vorlage auch anwenden, um harte Attributierung
1013 					// zu entfernen
1014 				GetWrtShell()->SetTxtFmtColl( pColl );
1015                 GetWrtShell()->EndUndo();
1016 				GetWrtShell()->EndAllAction();
1017 			}
1018 			break;
1019 		}
1020 		case SFX_STYLE_FAMILY_FRAME:
1021 		{
1022 			SwFrmFmt* pFrm = pStyle->GetFrmFmt();
1023             if( pCurrWrtShell->IsFrmSelected() && pFrm && !pFrm->IsDefault() )
1024 			{
1025 				SfxItemSet aSet( GetPool(), aFrmFmtSetRange );
1026                 pCurrWrtShell->StartAllAction();
1027                 pCurrWrtShell->GetFlyFrmAttr( aSet );
1028 
1029                 // --> OD 2009-12-28 #i105535#
1030                 // no update of anchor attribute
1031                 aSet.ClearItem( RES_ANCHOR );
1032                 // <--
1033 
1034                 pFrm->SetFmtAttr( aSet );
1035 
1036 					// Vorlage auch anwenden, um harte Attributierung
1037 					// zu entfernen
1038                 pCurrWrtShell->SetFrmFmt( pFrm, sal_True );
1039                 pCurrWrtShell->EndAllAction();
1040 			}
1041 		}
1042 		break;
1043 		case SFX_STYLE_FAMILY_CHAR:
1044 		{
1045 			SwCharFmt* pChar = pStyle->GetCharFmt();
1046 			if( pChar && !pChar->IsDefault() )
1047 			{
1048                 pCurrWrtShell->StartAllAction();
1049                 pCurrWrtShell->FillByEx(pChar);
1050 					// Vorlage auch anwenden, um harte Attributierung
1051 					// zu entfernen
1052                 pCurrWrtShell->EndAllAction();
1053 			}
1054 
1055 		}
1056 		break;
1057 		case SFX_STYLE_FAMILY_PSEUDO:
1058 		{
1059 			const SwNumRule* pCurRule;
1060 			if( pStyle->GetNumRule() &&
1061                 0 != ( pCurRule = pCurrWrtShell->GetCurNumRule() ))
1062 			{
1063 				SwNumRule aRule( *pCurRule );
1064                 // --> OD 2008-07-08 #i91400#
1065                 aRule.SetName( pStyle->GetNumRule()->GetName(),
1066                                *(pCurrWrtShell->GetDoc()) );
1067                 // <--
1068                 pCurrWrtShell->ChgNumRuleFmts( aRule );
1069 			}
1070 		}
1071 		break;
1072 	}
1073 	return nFamily;
1074 }
1075 
1076 /*--------------------------------------------------------------------
1077 	Beschreibung:	NewByExample
1078  --------------------------------------------------------------------*/
1079 
1080 
1081 sal_uInt16 SwDocShell::MakeByExample( const String &rName, sal_uInt16 nFamily,
1082 									sal_uInt16 nMask, SwWrtShell* pShell )
1083 {
1084     SwWrtShell* pCurrWrtShell = pShell ? pShell : GetWrtShell();
1085 	SwDocStyleSheet* pStyle = (SwDocStyleSheet*)mxBasePool->Find(
1086 											rName, (SfxStyleFamily)nFamily );
1087 	if(!pStyle)
1088 	{
1089 		// JP 07.07.95: behalte die akt. Maske vom PI bei, dadurch werden
1090 		//				neue sofort in den sichtbaren Bereich einsortiert
1091 		if( SFXSTYLEBIT_ALL == nMask || SFXSTYLEBIT_USED == nMask )
1092 			nMask = SFXSTYLEBIT_USERDEF;
1093 		else
1094 			nMask |= SFXSTYLEBIT_USERDEF;
1095 
1096 		pStyle = (SwDocStyleSheet*)&mxBasePool->Make(rName,
1097 								(SfxStyleFamily)nFamily, nMask );
1098 	}
1099 
1100 	switch(nFamily)
1101 	{
1102 		case  SFX_STYLE_FAMILY_PARA:
1103 		{
1104 			SwTxtFmtColl* pColl = pStyle->GetCollection();
1105 			if(pColl && !pColl->IsDefault())
1106 			{
1107                 pCurrWrtShell->StartAllAction();
1108                 pCurrWrtShell->FillByEx(pColl);
1109 					// Vorlage auch anwenden, um harte Attributierung
1110 					// zu entfernen
1111                 pColl->SetDerivedFrom(pCurrWrtShell->GetCurTxtFmtColl());
1112 
1113 					// setze die Maske noch an der Collection:
1114 				sal_uInt16 nId = pColl->GetPoolFmtId() & 0x87ff;
1115 				switch( nMask & 0x0fff )
1116 				{
1117 				case SWSTYLEBIT_TEXT:
1118 					nId |= COLL_TEXT_BITS;
1119 					break;
1120 				case SWSTYLEBIT_CHAPTER:
1121 					nId |= COLL_DOC_BITS;
1122 					break;
1123 				case SWSTYLEBIT_LIST:
1124 					nId |= COLL_LISTS_BITS;
1125 					break;
1126 				case SWSTYLEBIT_IDX:
1127 					nId |= COLL_REGISTER_BITS;
1128 					break;
1129 				case SWSTYLEBIT_EXTRA:
1130 					nId |= COLL_EXTRA_BITS;
1131 					break;
1132 				case SWSTYLEBIT_HTML:
1133 					nId |= COLL_HTML_BITS;
1134 					break;
1135 				}
1136 				pColl->SetPoolFmtId(nId);
1137 
1138                 pCurrWrtShell->SetTxtFmtColl(pColl);
1139                 pCurrWrtShell->EndAllAction();
1140 			}
1141 		}
1142 		break;
1143 		case SFX_STYLE_FAMILY_FRAME:
1144 		{
1145 			SwFrmFmt* pFrm = pStyle->GetFrmFmt();
1146             if(pCurrWrtShell->IsFrmSelected() && pFrm && !pFrm->IsDefault())
1147 			{
1148                 pCurrWrtShell->StartAllAction();
1149 
1150 				SfxItemSet aSet(GetPool(), aFrmFmtSetRange );
1151                 pCurrWrtShell->GetFlyFrmAttr( aSet );
1152 
1153                 SwFrmFmt* pFFmt = pCurrWrtShell->GetCurFrmFmt();
1154                 pFrm->SetDerivedFrom( pFFmt );
1155 
1156 				// JP 10.06.98: nur automatische Orientierungen uebernehmen
1157 /*				#61359# jetzt auch wieder alle Orientierungen
1158 				const SfxPoolItem* pItem;
1159 				if( SFX_ITEM_SET == aSet.GetItemState( RES_VERT_ORIENT,
1160 					sal_False, &pItem ) &&
1161                     text::VertOrientation::NONE == ((SwFmtVertOrient*)pItem)->GetVertOrient())
1162 					aSet.ClearItem( RES_VERT_ORIENT );
1163 
1164 				if( SFX_ITEM_SET == aSet.GetItemState( RES_HORI_ORIENT,
1165 					sal_False, &pItem ) &&
1166                     text::HoriOrientation::NONE == ((SwFmtHoriOrient*)pItem)->GetHoriOrient())
1167 					aSet.ClearItem( RES_HORI_ORIENT );
1168  */
1169 
1170                 pFrm->SetFmtAttr( aSet );
1171 					// Vorlage auch anwenden, um harte Attributierung
1172 					// zu entfernen
1173                 pCurrWrtShell->SetFrmFmt( pFrm );
1174                 pCurrWrtShell->EndAllAction();
1175 			}
1176 		}
1177 		break;
1178 		case SFX_STYLE_FAMILY_CHAR:
1179 		{
1180 			SwCharFmt* pChar = pStyle->GetCharFmt();
1181 			if(pChar && !pChar->IsDefault())
1182 			{
1183                 pCurrWrtShell->StartAllAction();
1184                 pCurrWrtShell->FillByEx( pChar );
1185                 pChar->SetDerivedFrom( pCurrWrtShell->GetCurCharFmt() );
1186 				SwFmtCharFmt aFmt( pChar );
1187                 pCurrWrtShell->SetAttrItem( aFmt );
1188                 pCurrWrtShell->EndAllAction();
1189 			}
1190 		}
1191 		break;
1192 
1193 		case SFX_STYLE_FAMILY_PAGE:
1194 		{
1195             pCurrWrtShell->StartAllAction();
1196             sal_uInt16 nPgDsc = pCurrWrtShell->GetCurPageDesc();
1197             SwPageDesc& rSrc = (SwPageDesc&)pCurrWrtShell->GetPageDesc( nPgDsc );
1198 			SwPageDesc& rDest = *(SwPageDesc*)pStyle->GetPageDesc();
1199 
1200 			sal_uInt16 nPoolId = rDest.GetPoolFmtId();
1201 			sal_uInt16 nHId = rDest.GetPoolHelpId();
1202 			sal_uInt8 nHFId = rDest.GetPoolHlpFileId();
1203 
1204             pCurrWrtShell->GetDoc()->CopyPageDesc( rSrc, rDest );
1205 
1206 			// PoolId darf NIE kopiert werden!
1207 			rDest.SetPoolFmtId( nPoolId );
1208 			rDest.SetPoolHelpId( nHId );
1209 			rDest.SetPoolHlpFileId( nHFId );
1210 
1211 			// werden Kopf-/Fusszeilen angelegt, so gibt es kein Undo mehr!
1212             pCurrWrtShell->GetDoc()->GetIDocumentUndoRedo().DelAllUndoObj();
1213 
1214             pCurrWrtShell->EndAllAction();
1215 		}
1216 		break;
1217 
1218 		case SFX_STYLE_FAMILY_PSEUDO:
1219 		{
1220             pCurrWrtShell->StartAllAction();
1221 
1222             SwNumRule aRule( *pCurrWrtShell->GetCurNumRule() );
1223 			String sOrigRule( aRule.GetName() );
1224             // --> OD 2008-07-08 #i91400#
1225             aRule.SetName( pStyle->GetNumRule()->GetName(),
1226                            *(pCurrWrtShell->GetDoc()) );
1227             // <--
1228             pCurrWrtShell->ChgNumRuleFmts( aRule );
1229 
1230             pCurrWrtShell->ReplaceNumRule( sOrigRule, aRule.GetName() );
1231 
1232 
1233             pCurrWrtShell->EndAllAction();
1234 		}
1235 		break;
1236 	}
1237 	return nFamily;
1238 }
1239 
1240 void  SwDocShell::LoadStyles( SfxObjectShell& rSource )
1241 {
1242     _LoadStyles(rSource, sal_False);
1243 }
1244 /* -----------------16.05.2003 15:45-----------------
1245     bPreserveCurrentDocument determines whether SetFixFields() is called
1246     This call modifies the source document. This mustn't happen when the source
1247     is a document the user is working on.
1248     Calls of ::LoadStyles() normally use files especially loaded for the purpose
1249     of importing styles.
1250  --------------------------------------------------*/
1251 void SwDocShell::_LoadStyles( SfxObjectShell& rSource, sal_Bool bPreserveCurrentDocument )
1252 {
1253 /*	[Beschreibung]
1254 
1255 	Diese Methode wird vom SFx gerufen, wenn aus einer Dokument-Vorlage
1256 	Styles nachgeladen werden sollen. Bestehende Styles soll dabei
1257 	"uberschrieben werden. Das Dokument mu"s daher neu formatiert werden.
1258 	Daher werden die Applikationen in der Regel diese Methode "uberladen
1259 	und in ihrer Implementierung die Implementierung der Basisklasse
1260 	rufen.
1261 */
1262 	// ist die Source unser Document, dann uebernehmen wir das
1263 	// abpruefen selbst (wesentlich schneller und laeuft nicht ueber
1264 	// die Kruecke SfxStylePool
1265 	if( rSource.ISA( SwDocShell ))
1266 	{
1267 		//JP 28.05.99: damit die Kopf-/Fusszeilen nicht den fixen Inhalt
1268 		// 				der Vorlage erhalten, einmal alle FixFelder der
1269 		//				Source aktualisieren
1270         if(!bPreserveCurrentDocument)
1271             ((SwDocShell&)rSource).pDoc->SetFixFields(false, NULL);
1272 		if( pWrtShell )
1273 		{
1274 			pWrtShell->StartAllAction();
1275 			pDoc->ReplaceStyles( *((SwDocShell&)rSource).pDoc );
1276 			pWrtShell->EndAllAction();
1277 		}
1278 		else
1279 		{
1280 			sal_Bool bModified = pDoc->IsModified();
1281 			pDoc->ReplaceStyles( *((SwDocShell&)rSource).pDoc );
1282 			if( !bModified && pDoc->IsModified() && !pView )
1283 			{
1284 				// die View wird spaeter angelegt, ueberschreibt aber das
1285 				// Modify-Flag. Per Undo ist sowieso nichts mehr zu machen
1286                 pDoc->GetIDocumentUndoRedo().SetUndoNoResetModified();
1287             }
1288         }
1289     }
1290 	else
1291 		SfxObjectShell::LoadStyles( rSource );
1292 }
1293 
1294 
1295 void SwDocShell::FormatPage(
1296     const String& rPage,
1297     const sal_uInt16 nSlot,
1298     SwWrtShell& rActShell )
1299 {
1300     Edit( rPage, aEmptyStr, SFX_STYLE_FAMILY_PAGE, 0, sal_False, nSlot, &rActShell);
1301 }
1302 
1303 Bitmap SwDocShell::GetStyleFamilyBitmap( SfxStyleFamily eFamily, BmpColorMode eColorMode )
1304 {
1305 	if( SFX_STYLE_FAMILY_PSEUDO == eFamily )
1306 	{
1307 		if ( eColorMode == BMP_COLOR_NORMAL )
1308 			return Bitmap( SW_RES( BMP_STYLES_FAMILY_NUM ));
1309 		else
1310 			return Bitmap( SW_RES( BMP_STYLES_FAMILY_NUM_HC ));
1311 	}
1312 
1313 	return SfxObjectShell::GetStyleFamilyBitmap( eFamily, eColorMode );
1314 }
1315 
1316 
1317 
1318