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