Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <hintids.hxx>
21 :
22 : #include <osl/diagnose.h>
23 : #include <tools/datetime.hxx>
24 : #include <vcl/svapp.hxx>
25 : #include <unotools/collatorwrapper.hxx>
26 : #include <svl/urihelper.hxx>
27 : #include <svl/stritem.hxx>
28 : #include <unotools/syslocale.hxx>
29 : #include <sfx2/app.hxx>
30 : #include <sfx2/docfile.hxx>
31 : #include <sfx2/docfilt.hxx>
32 : #include <editeng/pmdlitem.hxx>
33 : #include <editeng/tstpitem.hxx>
34 : #include <editeng/boxitem.hxx>
35 : #include <editeng/sizeitem.hxx>
36 : #include <svx/pageitem.hxx>
37 : #include <editeng/lrspitem.hxx>
38 : #include <svl/style.hxx>
39 : #include <vcl/lstbox.hxx>
40 : #include <unotools/localedatawrapper.hxx>
41 : #include <com/sun/star/frame/XDispatch.hpp>
42 : #include <com/sun/star/frame/XDispatchProvider.hpp>
43 : #include <com/sun/star/util/URLTransformer.hpp>
44 : #include <com/sun/star/util/XURLTransformer.hpp>
45 : #include <comphelper/processfactory.hxx>
46 : #include <sfx2/viewfrm.hxx>
47 : #include <fmtornt.hxx>
48 : #include <tabcol.hxx>
49 : #include <edtwin.hxx>
50 : #include <fmtfsize.hxx>
51 : #include <fmthdft.hxx>
52 : #include <fmtpdsc.hxx>
53 : #include <wview.hxx>
54 : #include <uiitems.hxx>
55 : #include <docsh.hxx>
56 : #include <wrtsh.hxx>
57 : #include <swmodule.hxx>
58 : #include <view.hxx>
59 : #include <uitool.hxx>
60 : #include <frmatr.hxx>
61 : #include <paratr.hxx>
62 : #include <fmtcol.hxx>
63 : #include <poolfmt.hxx>
64 : #include "usrpref.hxx"
65 :
66 : #include <cmdid.h>
67 : #include <globals.hrc>
68 : #include <utlui.hrc>
69 : #include <doc.hxx>
70 : #include <docary.hxx>
71 : #include <charfmt.hxx>
72 : #include <SwStyleNameMapper.hxx>
73 : // 50 cm 28350
74 : //
75 : #define MAXHEIGHT 28350
76 : #define MAXWIDTH 28350
77 :
78 : using namespace ::com::sun::star;
79 : /*--------------------------------------------------------------------
80 : Beschreibung: Allgemeine List von StringPointern
81 : --------------------------------------------------------------------*/
82 :
83 :
84 : /*--------------------------------------------------------------------
85 : Beschreibung: Metric umschalten
86 : --------------------------------------------------------------------*/
87 :
88 :
89 0 : void SetMetric(MetricFormatter& rCtrl, FieldUnit eUnit)
90 : {
91 0 : SwTwips nMin = static_cast< SwTwips >(rCtrl.GetMin(FUNIT_TWIP));
92 0 : SwTwips nMax = static_cast< SwTwips >(rCtrl.GetMax(FUNIT_TWIP));
93 :
94 0 : rCtrl.SetUnit(eUnit);
95 :
96 0 : rCtrl.SetMin(nMin, FUNIT_TWIP);
97 0 : rCtrl.SetMax(nMax, FUNIT_TWIP);
98 0 : }
99 :
100 : /*--------------------------------------------------------------------
101 : Beschreibung: Boxinfo-Attribut setzen
102 : --------------------------------------------------------------------*/
103 :
104 :
105 0 : void PrepareBoxInfo(SfxItemSet& rSet, const SwWrtShell& rSh)
106 : {
107 0 : SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
108 : const SfxPoolItem *pBoxInfo;
109 0 : if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_BORDER_INNER,
110 0 : sal_True, &pBoxInfo))
111 0 : aBoxInfo = *(SvxBoxInfoItem*)pBoxInfo;
112 :
113 : // Tabellenvariante, wenn mehrere Tabellenzellen selektiert
114 0 : rSh.GetCrsr(); //Damit GetCrsrCnt() auch das Richtige liefert
115 0 : aBoxInfo.SetTable (rSh.IsTableMode() && rSh.GetCrsrCnt() > 1);
116 : // Abstandsfeld immer anzeigen
117 0 : aBoxInfo.SetDist ((sal_Bool) sal_True);
118 : // Minimalgroesse in Tabellen und Absaetzen setzen
119 0 : aBoxInfo.SetMinDist (rSh.IsTableMode() || rSh.GetSelectionType() & (nsSelectionType::SEL_TXT | nsSelectionType::SEL_TBL));
120 : // Default-Abstand immer setzen
121 0 : aBoxInfo.SetDefDist (MIN_BORDER_DIST);
122 : // Einzelne Linien koennen nur in Tabellen DontCare-Status haben
123 0 : aBoxInfo.SetValid(VALID_DISABLE, !rSh.IsTableMode());
124 :
125 0 : rSet.Put(aBoxInfo);
126 0 : }
127 :
128 : /*--------------------------------------------------------------------
129 : Beschreibung: Header Footer fuellen
130 : --------------------------------------------------------------------*/
131 :
132 :
133 146 : void FillHdFt(SwFrmFmt* pFmt, const SfxItemSet& rSet)
134 : {
135 146 : SwAttrSet aSet(pFmt->GetAttrSet());
136 146 : aSet.Put(rSet);
137 :
138 146 : const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(SID_ATTR_PAGE_SIZE);
139 146 : const SfxBoolItem& rDynamic = (const SfxBoolItem&)rSet.Get(SID_ATTR_PAGE_DYNAMIC);
140 :
141 : // Groesse umsetzen
142 : //
143 146 : SwFmtFrmSize aFrmSize(rDynamic.GetValue() ? ATT_MIN_SIZE : ATT_FIX_SIZE,
144 146 : rSize.GetSize().Width(),
145 438 : rSize.GetSize().Height());
146 146 : aSet.Put(aFrmSize);
147 146 : pFmt->SetFmtAttr(aSet);
148 146 : }
149 :
150 : /// Convert from UseOnPage to SvxPageUsage.
151 1123 : UseOnPage lcl_convertUseToSvx(UseOnPage nUse)
152 : {
153 1123 : UseOnPage nRet = nsUseOnPage::PD_NONE;
154 1123 : if ((nUse & nsUseOnPage::PD_LEFT) == nsUseOnPage::PD_LEFT)
155 1123 : nRet |= SVX_PAGE_LEFT;
156 1123 : if ((nUse & nsUseOnPage::PD_RIGHT) == nsUseOnPage::PD_RIGHT)
157 1121 : nRet |= SVX_PAGE_RIGHT;
158 1123 : if ((nUse & nsUseOnPage::PD_ALL) == nsUseOnPage::PD_ALL)
159 1121 : nRet |= SVX_PAGE_ALL;
160 1123 : if ((nUse & nsUseOnPage::PD_MIRROR) == nsUseOnPage::PD_MIRROR)
161 102 : nRet |= SVX_PAGE_MIRROR;
162 1123 : return nRet;
163 : }
164 :
165 : /// Convert from SvxPageUsage to UseOnPage.
166 411 : UseOnPage lcl_convertUseFromSvx(UseOnPage nUse)
167 : {
168 411 : UseOnPage nRet = nsUseOnPage::PD_NONE;
169 411 : if ((nUse & SVX_PAGE_LEFT) == SVX_PAGE_LEFT)
170 409 : nRet |= nsUseOnPage::PD_LEFT;
171 411 : if ((nUse & SVX_PAGE_RIGHT) == SVX_PAGE_RIGHT)
172 410 : nRet |= nsUseOnPage::PD_RIGHT;
173 411 : if ((nUse & SVX_PAGE_ALL) == SVX_PAGE_ALL)
174 408 : nRet |= nsUseOnPage::PD_ALL;
175 411 : if ((nUse & SVX_PAGE_MIRROR) == SVX_PAGE_MIRROR)
176 26 : nRet |= nsUseOnPage::PD_MIRROR;
177 411 : return nRet;
178 : }
179 :
180 : /*--------------------------------------------------------------------
181 : Beschreibung: PageDesc <-> in Sets wandeln und zurueck
182 : --------------------------------------------------------------------*/
183 :
184 :
185 411 : void ItemSetToPageDesc( const SfxItemSet& rSet, SwPageDesc& rPageDesc )
186 : {
187 411 : SwFrmFmt& rMaster = rPageDesc.GetMaster();
188 411 : int nFirstShare = -1;
189 :
190 : // alle allgemeinen Rahmen-Attribute uebertragen
191 : //
192 411 : rMaster.SetFmtAttr(rSet);
193 :
194 : // PageData
195 : //
196 411 : if(rSet.GetItemState(SID_ATTR_PAGE) == SFX_ITEM_SET)
197 : {
198 411 : const SvxPageItem& rPageItem = (const SvxPageItem&)rSet.Get(SID_ATTR_PAGE);
199 :
200 411 : sal_uInt16 nUse = (sal_uInt16)rPageItem.GetPageUsage();
201 411 : if(nUse & 0x04)
202 26 : nUse |= 0x03;
203 411 : if(nUse)
204 411 : rPageDesc.SetUseOn( lcl_convertUseFromSvx((UseOnPage) nUse) );
205 411 : rPageDesc.SetLandscape(rPageItem.IsLandscape());
206 411 : SvxNumberType aNumType;
207 411 : aNumType.SetNumberingType( static_cast< sal_Int16 >(rPageItem.GetNumType()) );
208 411 : rPageDesc.SetNumType(aNumType);
209 : }
210 : // Groesse
211 : //
212 411 : if(rSet.GetItemState(SID_ATTR_PAGE_SIZE) == SFX_ITEM_SET)
213 : {
214 411 : const SvxSizeItem& rSizeItem = (const SvxSizeItem&)rSet.Get(SID_ATTR_PAGE_SIZE);
215 411 : SwFmtFrmSize aSize(ATT_FIX_SIZE);
216 411 : aSize.SetSize(rSizeItem.GetSize());
217 411 : rMaster.SetFmtAttr(aSize);
218 : }
219 : // Kopzeilen-Attribute auswerten
220 : //
221 : const SfxPoolItem* pItem;
222 411 : if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_HEADERSET,
223 411 : sal_False, &pItem ) )
224 : {
225 90 : const SfxItemSet& rHeaderSet = ((SvxSetItem*)pItem)->GetItemSet();
226 90 : const SfxBoolItem& rHeaderOn = (const SfxBoolItem&)rHeaderSet.Get(SID_ATTR_PAGE_ON);
227 :
228 90 : if(rHeaderOn.GetValue())
229 : {
230 : // Werte uebernehmen
231 90 : if(!rMaster.GetHeader().IsActive())
232 23 : rMaster.SetFmtAttr(SwFmtHeader(sal_True));
233 :
234 : // Das Headerformat rausholen und anpassen
235 : //
236 90 : SwFmtHeader aHeaderFmt(rMaster.GetHeader());
237 90 : SwFrmFmt *pHeaderFmt = aHeaderFmt.GetHeaderFmt();
238 : OSL_ENSURE(pHeaderFmt != 0, "no header format");
239 :
240 90 : ::FillHdFt(pHeaderFmt, rHeaderSet);
241 :
242 : rPageDesc.ChgHeaderShare(((const SfxBoolItem&)
243 90 : rHeaderSet.Get(SID_ATTR_PAGE_SHARED)).GetValue());
244 90 : if (nFirstShare < 0)
245 : {
246 : rPageDesc.ChgFirstShare(((const SfxBoolItem&)
247 90 : rHeaderSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
248 90 : nFirstShare = rPageDesc.IsFirstShared();
249 90 : }
250 : }
251 : else
252 : { // Header ausschalten
253 : //
254 0 : if(rMaster.GetHeader().IsActive())
255 : {
256 0 : rMaster.SetFmtAttr(SwFmtHeader(sal_Bool(sal_False)));
257 0 : rPageDesc.ChgHeaderShare(sal_False);
258 : }
259 : }
260 : }
261 :
262 : // Fusszeilen-Attribute auswerten
263 : //
264 411 : if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_FOOTERSET,
265 411 : sal_False, &pItem ) )
266 : {
267 56 : const SfxItemSet& rFooterSet = ((SvxSetItem*)pItem)->GetItemSet();
268 56 : const SfxBoolItem& rFooterOn = (const SfxBoolItem&)rFooterSet.Get(SID_ATTR_PAGE_ON);
269 :
270 56 : if(rFooterOn.GetValue())
271 : {
272 : // Werte uebernehmen
273 56 : if(!rMaster.GetFooter().IsActive())
274 19 : rMaster.SetFmtAttr(SwFmtFooter(sal_True));
275 :
276 : // Das Footerformat rausholen und anpassen
277 : //
278 56 : SwFmtFooter aFooterFmt(rMaster.GetFooter());
279 56 : SwFrmFmt *pFooterFmt = aFooterFmt.GetFooterFmt();
280 : OSL_ENSURE(pFooterFmt != 0, "no footer format");
281 :
282 56 : ::FillHdFt(pFooterFmt, rFooterSet);
283 :
284 : rPageDesc.ChgFooterShare(((const SfxBoolItem&)
285 56 : rFooterSet.Get(SID_ATTR_PAGE_SHARED)).GetValue());
286 56 : if (nFirstShare < 0)
287 : {
288 : rPageDesc.ChgFirstShare(((const SfxBoolItem&)
289 6 : rFooterSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
290 6 : nFirstShare = rPageDesc.IsFirstShared();
291 56 : }
292 : }
293 : else
294 : { // Footer ausschalten
295 : //
296 0 : if(rMaster.GetFooter().IsActive())
297 : {
298 0 : rMaster.SetFmtAttr(SwFmtFooter(sal_Bool(sal_False)));
299 0 : rPageDesc.ChgFooterShare(sal_False);
300 : }
301 : }
302 : }
303 :
304 : // Fussnoten
305 : //
306 411 : if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_FTN_INFO,
307 411 : sal_False, &pItem ) )
308 411 : rPageDesc.SetFtnInfo( ((SwPageFtnInfoItem*)pItem)->GetPageFtnInfo() );
309 :
310 :
311 : //
312 : // Columns
313 : //
314 :
315 : // Registerhaltigkeit
316 :
317 411 : if(SFX_ITEM_SET == rSet.GetItemState(
318 411 : SID_SWREGISTER_MODE, sal_False, &pItem))
319 : {
320 411 : sal_Bool bSet = ((const SfxBoolItem*)pItem)->GetValue();
321 411 : if(!bSet)
322 411 : rPageDesc.SetRegisterFmtColl(0);
323 0 : else if(SFX_ITEM_SET == rSet.GetItemState(
324 0 : SID_SWREGISTER_COLLECTION, sal_False, &pItem))
325 : {
326 0 : const String& rColl = ((const SfxStringItem*)pItem)->GetValue();
327 0 : SwDoc& rDoc = *rMaster.GetDoc();
328 0 : SwTxtFmtColl* pColl = rDoc.FindTxtFmtCollByName( rColl );
329 0 : if( !pColl )
330 : {
331 0 : sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( rColl, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
332 0 : if( USHRT_MAX != nId )
333 0 : pColl = rDoc.GetTxtCollFromPool( nId );
334 : else
335 : pColl = rDoc.MakeTxtFmtColl( rColl,
336 0 : (SwTxtFmtColl*)rDoc.GetDfltTxtFmtColl() );
337 : }
338 0 : if( pColl )
339 0 : pColl->SetFmtAttr( SwRegisterItem ( sal_True ));
340 0 : rPageDesc.SetRegisterFmtColl( pColl );
341 : }
342 : }
343 411 : }
344 :
345 1123 : void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet)
346 : {
347 1123 : const SwFrmFmt& rMaster = rPageDesc.GetMaster();
348 :
349 : // Seitendaten
350 : //
351 1123 : SvxPageItem aPageItem(SID_ATTR_PAGE);
352 1123 : aPageItem.SetDescName(rPageDesc.GetName());
353 1123 : aPageItem.SetPageUsage(lcl_convertUseToSvx(rPageDesc.GetUseOn()));
354 1123 : aPageItem.SetLandscape(rPageDesc.GetLandscape());
355 1123 : aPageItem.SetNumType((SvxNumType)rPageDesc.GetNumType().GetNumberingType());
356 1123 : rSet.Put(aPageItem);
357 :
358 : // Groesse
359 1123 : SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, rMaster.GetFrmSize().GetSize());
360 1123 : rSet.Put(aSizeItem);
361 :
362 : // Maximale Groesse
363 1123 : SvxSizeItem aMaxSizeItem(SID_ATTR_PAGE_MAXSIZE, Size(MAXWIDTH, MAXHEIGHT));
364 1123 : rSet.Put(aMaxSizeItem);
365 :
366 : // Raender, Umrandung und das andere Zeug
367 : //
368 1123 : rSet.Put(rMaster.GetAttrSet());
369 :
370 1123 : SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
371 : const SfxPoolItem *pBoxInfo;
372 1123 : if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_BORDER_INNER,
373 1123 : sal_True, &pBoxInfo) )
374 28 : aBoxInfo = *(SvxBoxInfoItem*)pBoxInfo;
375 :
376 1123 : aBoxInfo.SetTable( sal_False );
377 : // Abstandsfeld immer anzeigen
378 1123 : aBoxInfo.SetDist( sal_True);
379 : // Minimalgroesse in Tabellen und Absaetzen setzen
380 1123 : aBoxInfo.SetMinDist( sal_False );
381 : // Default-Abstand immer setzen
382 1123 : aBoxInfo.SetDefDist( MIN_BORDER_DIST );
383 : // Einzelne Linien koennen nur in Tabellen DontCare-Status haben
384 1123 : aBoxInfo.SetValid( VALID_DISABLE );
385 1123 : rSet.Put( aBoxInfo );
386 :
387 :
388 1123 : SfxStringItem aFollow(SID_ATTR_PAGE_EXT1, aEmptyStr);
389 1123 : if(rPageDesc.GetFollow())
390 1123 : aFollow.SetValue(rPageDesc.GetFollow()->GetName());
391 1123 : rSet.Put(aFollow);
392 :
393 : // Header
394 : //
395 1123 : if(rMaster.GetHeader().IsActive())
396 : {
397 226 : const SwFmtHeader &rHeaderFmt = rMaster.GetHeader();
398 226 : const SwFrmFmt *pHeaderFmt = rHeaderFmt.GetHeaderFmt();
399 : OSL_ENSURE(pHeaderFmt != 0, "no header format");
400 :
401 : // HeaderInfo, Raender, Hintergrund, Umrandung
402 : //
403 226 : SfxItemSet aHeaderSet( *rSet.GetPool(),
404 : SID_ATTR_PAGE_ON, SID_ATTR_PAGE_SHARED,
405 : SID_ATTR_PAGE_SHARED_FIRST, SID_ATTR_PAGE_SHARED_FIRST,
406 : SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
407 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
408 : RES_FRMATR_BEGIN, RES_FRMATR_END-1,
409 226 : 0);
410 :
411 : // dynamische oder feste Hoehe
412 : //
413 226 : SfxBoolItem aOn(SID_ATTR_PAGE_ON, sal_True);
414 226 : aHeaderSet.Put(aOn);
415 :
416 226 : const SwFmtFrmSize &rFrmSize = pHeaderFmt->GetFrmSize();
417 226 : const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType();
418 226 : SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE);
419 226 : aHeaderSet.Put(aDynamic);
420 :
421 : // Links gleich rechts
422 : //
423 226 : SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsHeaderShared());
424 226 : aHeaderSet.Put(aShared);
425 226 : SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
426 226 : aHeaderSet.Put(aFirstShared);
427 :
428 : // Groesse
429 226 : SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize()));
430 226 : aHeaderSet.Put(aSize);
431 :
432 : // Rahmen-Attribute umschaufeln
433 : //
434 226 : aHeaderSet.Put(pHeaderFmt->GetAttrSet());
435 226 : aHeaderSet.Put( aBoxInfo );
436 :
437 : // SetItem erzeugen
438 : //
439 226 : SvxSetItem aSetItem(SID_ATTR_PAGE_HEADERSET, aHeaderSet);
440 226 : rSet.Put(aSetItem);
441 : }
442 :
443 : // Footer
444 1123 : if(rMaster.GetFooter().IsActive())
445 : {
446 153 : const SwFmtFooter &rFooterFmt = rMaster.GetFooter();
447 153 : const SwFrmFmt *pFooterFmt = rFooterFmt.GetFooterFmt();
448 : OSL_ENSURE(pFooterFmt != 0, "no footer format");
449 :
450 : // FooterInfo, Raender, Hintergrund, Umrandung
451 : //
452 153 : SfxItemSet aFooterSet( *rSet.GetPool(),
453 : SID_ATTR_PAGE_ON, SID_ATTR_PAGE_SHARED,
454 : SID_ATTR_PAGE_SHARED_FIRST, SID_ATTR_PAGE_SHARED_FIRST,
455 : SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
456 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
457 : RES_FRMATR_BEGIN, RES_FRMATR_END-1,
458 153 : 0);
459 :
460 : // dynamische oder feste Hoehe
461 : //
462 153 : SfxBoolItem aOn(SID_ATTR_PAGE_ON, sal_True);
463 153 : aFooterSet.Put(aOn);
464 :
465 153 : const SwFmtFrmSize &rFrmSize = pFooterFmt->GetFrmSize();
466 153 : const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType();
467 153 : SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE);
468 153 : aFooterSet.Put(aDynamic);
469 :
470 : // Links gleich rechts
471 : //
472 153 : SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsFooterShared());
473 153 : aFooterSet.Put(aShared);
474 153 : SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
475 153 : aFooterSet.Put(aFirstShared);
476 :
477 : // Groesse
478 153 : SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize()));
479 153 : aFooterSet.Put(aSize);
480 :
481 : // Rahmen-Attribute umschaufeln
482 : //
483 153 : aFooterSet.Put(pFooterFmt->GetAttrSet());
484 153 : aFooterSet.Put( aBoxInfo );
485 :
486 : // SetItem erzeugen
487 : //
488 153 : SvxSetItem aSetItem(SID_ATTR_PAGE_FOOTERSET, aFooterSet);
489 153 : rSet.Put(aSetItem);
490 : }
491 :
492 : // Fussnoten einbauen
493 : //
494 1123 : SwPageFtnInfo& rInfo = (SwPageFtnInfo&)rPageDesc.GetFtnInfo();
495 1123 : SwPageFtnInfoItem aFtnItem(FN_PARAM_FTN_INFO, rInfo);
496 1123 : rSet.Put(aFtnItem);
497 :
498 : // Registerhaltigkeit
499 :
500 1123 : const SwTxtFmtColl* pCol = rPageDesc.GetRegisterFmtColl();
501 1123 : SwRegisterItem aReg(pCol != 0);
502 1123 : aReg.SetWhich(SID_SWREGISTER_MODE);
503 1123 : rSet.Put(aReg);
504 1123 : if(pCol)
505 0 : rSet.Put(SfxStringItem(SID_SWREGISTER_COLLECTION, pCol->GetName()));
506 :
507 1123 : }
508 :
509 :
510 : /*--------------------------------------------------------------------
511 : Beschreibung: DefaultTabs setzen
512 : --------------------------------------------------------------------*/
513 :
514 :
515 0 : void MakeDefTabs(SwTwips nDefDist, SvxTabStopItem& rTabs)
516 : {
517 0 : if( rTabs.Count() )
518 0 : return;
519 : {
520 0 : SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT );
521 0 : rTabs.Insert( aSwTabStop );
522 : }
523 : }
524 :
525 : /*--------------------------------------------------------------------
526 : Beschreibung: Abstand zwischen zwei Tabs
527 : --------------------------------------------------------------------*/
528 :
529 :
530 104 : sal_uInt16 GetTabDist(const SvxTabStopItem& rTabs)
531 : {
532 : sal_uInt16 nDefDist;
533 104 : if( rTabs.Count() )
534 104 : nDefDist = (sal_uInt16)( rTabs[0].GetTabPos() );
535 : else
536 0 : nDefDist = 1134; // 2cm
537 104 : return nDefDist;
538 : }
539 :
540 :
541 : // erfrage ob im Set eine Sfx-PageDesc-Kombination vorliegt und returne diese
542 0 : void SfxToSwPageDescAttr( const SwWrtShell& rShell, SfxItemSet& rSet )
543 : {
544 : const SfxPoolItem* pItem;
545 0 : SwFmtPageDesc aPgDesc;
546 :
547 0 : sal_Bool bChanged = sal_False;
548 : // Seitennummer
549 0 : if(SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_PARA_PAGENUM, sal_False, &pItem))
550 : {
551 0 : aPgDesc.SetNumOffset(((SfxUInt16Item*)pItem)->GetValue());
552 0 : bChanged = sal_True;
553 : }
554 0 : if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PARA_MODEL, sal_False, &pItem ))
555 : {
556 0 : const String& rDescName = ((SvxPageModelItem*)pItem)->GetValue();
557 0 : if( rDescName.Len() ) // kein Name -> PageDesc ausschalten!
558 : {
559 : // nur loeschen, wenn PageDesc eingschaltet wird!
560 0 : rSet.ClearItem( RES_BREAK );
561 : SwPageDesc* pDesc = ((SwWrtShell&)rShell).FindPageDescByName(
562 0 : rDescName, sal_True );
563 0 : if( pDesc )
564 0 : aPgDesc.RegisterToPageDesc( *pDesc );
565 : }
566 0 : rSet.ClearItem( SID_ATTR_PARA_MODEL );
567 0 : bChanged = sal_True;
568 : }
569 : else
570 : {
571 0 : SfxItemSet aCoreSet(rShell.GetView().GetPool(), RES_PAGEDESC, RES_PAGEDESC );
572 0 : rShell.GetCurAttr( aCoreSet );
573 0 : if(SFX_ITEM_SET == aCoreSet.GetItemState( RES_PAGEDESC, sal_True, &pItem ) )
574 : {
575 0 : if( ((SwFmtPageDesc*)pItem)->GetPageDesc() )
576 : {
577 0 : aPgDesc.RegisterToPageDesc( *((SwFmtPageDesc*)pItem)->GetPageDesc() );
578 : }
579 0 : }
580 : }
581 :
582 :
583 0 : if(bChanged)
584 0 : rSet.Put( aPgDesc );
585 0 : }
586 :
587 :
588 : // erfrage ob im Set eine Sfx-PageDesc-Kombination vorliegt und returne diese
589 0 : void SwToSfxPageDescAttr( SfxItemSet& rCoreSet )
590 : {
591 0 : const SfxPoolItem* pItem = 0;
592 0 : String aName;
593 0 : sal_uInt16 nPageNum = 0;
594 0 : sal_Bool bPut = sal_True;
595 0 : switch( rCoreSet.GetItemState( RES_PAGEDESC, sal_True, &pItem ) )
596 : {
597 : case SFX_ITEM_SET:
598 : {
599 0 : if( ((SwFmtPageDesc*)pItem)->GetPageDesc() )
600 : {
601 0 : aName = ((SwFmtPageDesc*)pItem)->GetPageDesc()->GetName();
602 0 : nPageNum = ((SwFmtPageDesc*)pItem)->GetNumOffset();
603 : }
604 0 : rCoreSet.ClearItem( RES_PAGEDESC );
605 : // Seitennummer
606 : }
607 0 : break;
608 :
609 : case SFX_ITEM_AVAILABLE:
610 0 : break;
611 :
612 : default:
613 0 : bPut = sal_False;
614 : }
615 0 : SfxUInt16Item aPageNum( SID_ATTR_PARA_PAGENUM, nPageNum );
616 0 : rCoreSet.Put( aPageNum );
617 :
618 0 : if(bPut)
619 0 : rCoreSet.Put( SvxPageModelItem( aName, sal_True, SID_ATTR_PARA_MODEL ) );
620 0 : }
621 :
622 : /*--------------------------------------------------------------------
623 : Beschreibung: Metric ermitteln
624 : --------------------------------------------------------------------*/
625 :
626 :
627 0 : FieldUnit GetDfltMetric(sal_Bool bWeb)
628 : {
629 0 : return SW_MOD()->GetUsrPref(bWeb)->GetMetric();
630 : }
631 :
632 : /*--------------------------------------------------------------------
633 : Beschreibung: Metric ermitteln
634 : --------------------------------------------------------------------*/
635 :
636 :
637 0 : void SetDfltMetric( FieldUnit eMetric, sal_Bool bWeb )
638 : {
639 0 : SW_MOD()->ApplyUserMetric(eMetric, bWeb);
640 0 : }
641 :
642 0 : sal_uInt16 InsertStringSorted(const String& rEntry, ListBox& rToFill, sal_uInt16 nOffset )
643 : {
644 0 : sal_uInt16 i = nOffset;
645 0 : CollatorWrapper& rCaseColl = ::GetAppCaseCollator();
646 :
647 0 : for( ; i < rToFill.GetEntryCount(); i++ )
648 : {
649 0 : if( 0 < rCaseColl.compareString( rToFill.GetEntry(i), rEntry ))
650 0 : break;
651 : }
652 0 : return rToFill.InsertEntry(rEntry, i);
653 : }
654 0 : void FillCharStyleListBox(ListBox& rToFill, SwDocShell* pDocSh, sal_Bool bSorted, sal_Bool bWithDefault)
655 : {
656 0 : sal_Bool bHasOffset = rToFill.GetEntryCount() > 0;
657 0 : SfxStyleSheetBasePool* pPool = pDocSh->GetStyleSheetPool();
658 0 : pPool->SetSearchMask(SFX_STYLE_FAMILY_CHAR, SFXSTYLEBIT_ALL);
659 0 : SwDoc* pDoc = pDocSh->GetDoc();
660 0 : const SfxStyleSheetBase* pBase = pPool->First();
661 0 : String sStandard;
662 0 : SwStyleNameMapper::FillUIName( RES_POOLCOLL_STANDARD, sStandard );
663 0 : while(pBase)
664 : {
665 0 : if(bWithDefault || pBase->GetName() != sStandard)
666 : {
667 : sal_uInt16 nPos;
668 0 : if(bSorted)
669 0 : nPos = InsertStringSorted(pBase->GetName(), rToFill, bHasOffset );
670 : else
671 0 : nPos = rToFill.InsertEntry(pBase->GetName());
672 0 : long nPoolId = SwStyleNameMapper::GetPoolIdFromUIName( pBase->GetName(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT );
673 0 : rToFill.SetEntryData( nPos, (void*) (nPoolId));
674 : }
675 0 : pBase = pPool->Next();
676 : }
677 : // non-pool styles
678 0 : const SwCharFmts* pFmts = pDoc->GetCharFmts();
679 0 : for(sal_uInt16 i = 0; i < pFmts->size(); i++)
680 : {
681 0 : const SwCharFmt* pFmt = (*pFmts)[i];
682 0 : if(pFmt->IsDefault())
683 0 : continue;
684 0 : const String& rName = pFmt->GetName();
685 0 : if(rToFill.GetEntryPos(rName) == LISTBOX_ENTRY_NOTFOUND)
686 : {
687 : sal_uInt16 nPos;
688 0 : if(bSorted)
689 0 : nPos = InsertStringSorted(rName, rToFill, bHasOffset );
690 : else
691 0 : nPos = rToFill.InsertEntry(rName);
692 0 : long nPoolId = USHRT_MAX;
693 0 : rToFill.SetEntryData( nPos, (void*) (nPoolId));
694 : }
695 0 : }
696 0 : };
697 :
698 0 : SwTwips GetTableWidth( SwFrmFmt* pFmt, SwTabCols& rCols, sal_uInt16 *pPercent,
699 : SwWrtShell* pSh )
700 : {
701 : //Die Breite zu besorgen ist etwas komplizierter.
702 0 : SwTwips nWidth = 0;
703 0 : const sal_Int16 eOri = pFmt->GetHoriOrient().GetHoriOrient();
704 0 : switch(eOri)
705 : {
706 0 : case text::HoriOrientation::FULL: nWidth = rCols.GetRight(); break;
707 : case text::HoriOrientation::LEFT_AND_WIDTH:
708 : case text::HoriOrientation::LEFT:
709 : case text::HoriOrientation::RIGHT:
710 : case text::HoriOrientation::CENTER:
711 0 : nWidth = pFmt->GetFrmSize().GetWidth();
712 0 : break;
713 : default:
714 : {
715 0 : if(pSh)
716 : {
717 0 : if ( 0 == pSh->GetFlyFrmFmt() )
718 : {
719 0 : nWidth = pSh->GetAnyCurRect(RECT_PAGE_PRT).Width();
720 : }
721 : else
722 : {
723 0 : nWidth = pSh->GetAnyCurRect(RECT_FLY_PRT_EMBEDDED).Width();
724 : }
725 : }
726 : else
727 : {
728 : OSL_FAIL("where to get the actual width from?");
729 : }
730 0 : const SvxLRSpaceItem& rLRSpace = pFmt->GetLRSpace();
731 0 : nWidth -= (rLRSpace.GetRight() + rLRSpace.GetLeft());
732 : }
733 : }
734 0 : if (pPercent)
735 0 : *pPercent = pFmt->GetFrmSize().GetWidthPercent();
736 0 : return nWidth;
737 : }
738 :
739 0 : String GetAppLangDateTimeString( const DateTime& rDT )
740 : {
741 0 : const SvtSysLocale aSysLocale;
742 0 : const LocaleDataWrapper& rAppLclData = aSysLocale.GetLocaleData();
743 0 : String sRet( rAppLclData.getDate( rDT ));
744 0 : ( sRet += ' ' ) += rAppLclData.getTime( rDT, sal_False, sal_False );
745 0 : return sRet;
746 : }
747 :
748 : /*----------------------------------------------------------------------------
749 : * add a new function which can get and set the current "SID_ATTR_APPLYCHARUNIT" value
750 : *---------------------------------------------------------------------------*/
751 0 : sal_Bool HasCharUnit( sal_Bool bWeb)
752 : {
753 0 : return SW_MOD()->GetUsrPref(bWeb)->IsApplyCharUnit();
754 : }
755 :
756 0 : void SetApplyCharUnit(sal_Bool bApplyChar, sal_Bool bWeb)
757 : {
758 0 : SW_MOD()->ApplyUserCharUnit(bApplyChar, bWeb);
759 0 : }
760 :
761 0 : bool ExecuteMenuCommand( PopupMenu& rMenu, SfxViewFrame& rViewFrame, sal_uInt16 nId )
762 : {
763 0 : bool bRet = false;
764 0 : sal_uInt16 nItemCount = rMenu.GetItemCount();
765 0 : String sCommand;
766 0 : for( sal_uInt16 nItem = 0; nItem < nItemCount; ++nItem)
767 : {
768 0 : PopupMenu* pPopup = rMenu.GetPopupMenu( rMenu.GetItemId( nItem ) );
769 0 : if(pPopup)
770 : {
771 0 : sCommand = pPopup->GetItemCommand(nId);
772 0 : if(sCommand.Len())
773 0 : break;
774 : }
775 : }
776 0 : if(sCommand.Len())
777 : {
778 0 : uno::Reference< frame::XFrame > xFrame = rViewFrame.GetFrame().GetFrameInterface();
779 0 : uno::Reference < frame::XDispatchProvider > xProv( xFrame, uno::UNO_QUERY );
780 0 : util::URL aURL;
781 0 : aURL.Complete = sCommand;
782 0 : uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create(::comphelper::getProcessComponentContext() ) );
783 0 : xTrans->parseStrict( aURL );
784 0 : uno::Reference< frame::XDispatch > xDisp = xProv->queryDispatch( aURL, ::rtl::OUString(), 0 );
785 0 : if( xDisp.is() )
786 : {
787 0 : uno::Sequence< beans::PropertyValue > aSeq;
788 0 : xDisp->dispatch( aURL, aSeq );
789 0 : bRet = true;
790 0 : }
791 : }
792 0 : return bRet;
793 : }
794 :
795 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|