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