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