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