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