1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26
27 #ifdef SW_DLLIMPLEMENTATION
28 #undef SW_DLLIMPLEMENTATION
29 #endif
30
31
32
33
34 #include <hintids.hxx>
35
36 #include <tools/pstm.hxx>
37
38 #define _SVSTDARR_LONGSSORT
39 #define _SVSTDARR_LONGS
40 #include <svl/svstdarr.hxx>
41 #include <editeng/paperinf.hxx>
42 #ifndef _SVX_TSTPITEM_HXX //autogen
43 #include <editeng/tstpitem.hxx>
44 #endif
45 #include <editeng/lrspitem.hxx>
46 #include <editeng/brshitem.hxx>
47 #ifndef _MSGBOX_HXX //autogen
48 #include <vcl/msgbox.hxx>
49 #endif
50 #ifndef _MENU_HXX //autogen
51 #include <vcl/menu.hxx>
52 #endif
53
54 #ifndef _CMDID_H
55 #include <cmdid.h>
56 #endif
57 #include <frmatr.hxx>
58 #include <swtypes.hxx>
59 #include <wrtsh.hxx>
60 #ifndef _VIEW_HXX
61 #include <view.hxx>
62 #endif
63 #ifndef _BASESH_HXX
64 #include <basesh.hxx>
65 #endif
66 #include <drpcps.hxx>
67 #include <envfmt.hxx>
68 #include <fmtcol.hxx>
69 #ifndef _PARDLG_HXX
70 #include "swuipardlg.hxx"
71 #endif
72 #include <pattern.hxx>
73 #include <poolfmt.hxx>
74 #include <uiborder.hxx>
75 #include <uitool.hxx>
76
77 #ifndef _ENVFMT_HRC
78 #include <envfmt.hrc>
79 #endif
80
81 #include "swabstdlg.hxx"
82 #include "chrdlg.hrc"
83
84 namespace swui
85 {
86 SwAbstractDialogFactory * GetFactory();
87 }
88
89 static PopupMenu *pMenu;
90 static long lUserW = 5669; // 10 cm
91 static long lUserH = 5669; // 10 cm
92
93 // --------------------------------------------------------------------------
94
95
SwEnvFmtPage(Window * pParent,const SfxItemSet & rSet)96 SwEnvFmtPage::SwEnvFmtPage(Window* pParent, const SfxItemSet& rSet) :
97
98 SfxTabPage(pParent, SW_RES(TP_ENV_FMT), rSet),
99
100 aAddrFL (this, SW_RES( FL_ADDRESSEE )),
101 aAddrPosInfo (this, SW_RES( TXT_ADDR_POS )),
102 aAddrLeftText (this, SW_RES( TXT_ADDR_LEFT )),
103 aAddrLeftField (this, SW_RES( FLD_ADDR_LEFT )),
104 aAddrTopText (this, SW_RES( TXT_ADDR_TOP )),
105 aAddrTopField (this, SW_RES( FLD_ADDR_TOP )),
106 aAddrFormatInfo (this, SW_RES( TXT_ADDR_FORMAT )),
107 aAddrEditButton (this, SW_RES( BTN_ADDR_EDIT )),
108 aSendFL (this, SW_RES( FL_SENDER )),
109 aSendPosInfo (this, SW_RES( TXT_SEND_POS )),
110 aSendLeftText (this, SW_RES( TXT_SEND_LEFT )),
111 aSendLeftField (this, SW_RES( FLD_SEND_LEFT )),
112 aSendTopText (this, SW_RES( TXT_SEND_TOP )),
113 aSendTopField (this, SW_RES( FLD_SEND_TOP )),
114 aSendFormatInfo (this, SW_RES( TXT_SEND_FORMAT )),
115 aSendEditButton (this, SW_RES( BTN_SEND_EDIT )),
116 aSizeFL (this, SW_RES( FL_SIZE )),
117 aSizeFormatText (this, SW_RES( TXT_SIZE_FORMAT )),
118 aSizeFormatBox (this, SW_RES( BOX_SIZE_FORMAT )),
119 aSizeWidthText (this, SW_RES( TXT_SIZE_WIDTH )),
120 aSizeWidthField (this, SW_RES( FLD_SIZE_WIDTH )),
121 aSizeHeightText (this, SW_RES( TXT_SIZE_HEIGHT )),
122 aSizeHeightField (this, SW_RES( FLD_SIZE_HEIGHT )),
123 aPreview (this, SW_RES( WIN_PREVIEW ))
124
125 {
126 FreeResource();
127 SetExchangeSupport();
128
129 // Metriken
130 FieldUnit aMetric = ::GetDfltMetric(sal_False);
131 SetMetric(aAddrLeftField, aMetric);
132 SetMetric(aAddrTopField, aMetric);
133 SetMetric(aSendLeftField, aMetric);
134 SetMetric(aSendTopField, aMetric);
135 SetMetric(aSizeWidthField, aMetric);
136 SetMetric(aSizeHeightField, aMetric);
137
138 // Menues einhaengen
139 ::pMenu = new PopupMenu(SW_RES(MNU_EDIT));
140 aAddrEditButton.SetPopupMenu(::pMenu);
141 aSendEditButton.SetPopupMenu(::pMenu);
142
143 // Handler installieren
144 Link aLk = LINK(this, SwEnvFmtPage, ModifyHdl);
145 aAddrLeftField .SetUpHdl( aLk );
146 aAddrTopField .SetUpHdl( aLk );
147 aSendLeftField .SetUpHdl( aLk );
148 aSendTopField .SetUpHdl( aLk );
149 aSizeWidthField .SetUpHdl( aLk );
150 aSizeHeightField.SetUpHdl( aLk );
151
152 aAddrLeftField .SetDownHdl( aLk );
153 aAddrTopField .SetDownHdl( aLk );
154 aSendLeftField .SetDownHdl( aLk );
155 aSendTopField .SetDownHdl( aLk );
156 aSizeWidthField .SetDownHdl( aLk );
157 aSizeHeightField.SetDownHdl( aLk );
158
159 aAddrLeftField .SetLoseFocusHdl( aLk );
160 aAddrTopField .SetLoseFocusHdl( aLk );
161 aSendLeftField .SetLoseFocusHdl( aLk );
162 aSendTopField .SetLoseFocusHdl( aLk );
163 aSizeWidthField .SetLoseFocusHdl( aLk );
164 aSizeHeightField.SetLoseFocusHdl( aLk );
165
166 aLk = LINK(this, SwEnvFmtPage, EditHdl );
167 aAddrEditButton.SetSelectHdl( aLk );
168 aSendEditButton.SetSelectHdl( aLk );
169
170 aPreview.SetBorderStyle( WINDOW_BORDER_MONO );
171
172 aSizeFormatBox .SetSelectHdl(LINK(this, SwEnvFmtPage, FormatHdl));
173
174 // aSizeFormatBox
175 for (sal_uInt16 i = PAPER_A3; i <= PAPER_KAI32BIG; i++)
176 {
177 if (i != PAPER_USER)
178 {
179 String aPaperName = SvxPaperInfo::GetName((Paper) i),
180 aEntryName;
181
182 sal_uInt16 nPos = 0;
183 sal_Bool bFound = sal_False;
184 while (nPos < aSizeFormatBox.GetEntryCount() && !bFound)
185 {
186 aEntryName = aSizeFormatBox.GetEntry(i);
187 if (aEntryName < aPaperName)
188 nPos++;
189 else
190 bFound = sal_True;
191 }
192 aSizeFormatBox.InsertEntry(aPaperName, nPos);
193 aIDs.Insert((sal_uInt16) i, nPos);
194 }
195 }
196 aSizeFormatBox.InsertEntry(SvxPaperInfo::GetName(PAPER_USER));
197 aIDs.Insert((sal_uInt16) PAPER_USER, aIDs.Count());
198
199 }
200
201 // --------------------------------------------------------------------------
202
203
~SwEnvFmtPage()204 __EXPORT SwEnvFmtPage::~SwEnvFmtPage()
205 {
206 aAddrEditButton.SetPopupMenu(0);
207 aSendEditButton.SetPopupMenu(0);
208 delete ::pMenu;
209 }
210
211 // --------------------------------------------------------------------------
212
213
IMPL_LINK_INLINE_START(SwEnvFmtPage,ModifyHdl,Edit *,pEdit)214 IMPL_LINK_INLINE_START( SwEnvFmtPage, ModifyHdl, Edit *, pEdit )
215 {
216 long lWVal = static_cast< long >(GetFldVal(aSizeWidthField ));
217 long lHVal = static_cast< long >(GetFldVal(aSizeHeightField));
218
219 long lWidth = Max(lWVal, lHVal);
220 long lHeight = Min(lWVal, lHVal);
221
222 if (pEdit == &aSizeWidthField || pEdit == &aSizeHeightField)
223 {
224 Paper ePaper = SvxPaperInfo::GetSvxPaper(
225 Size(lHeight, lWidth), MAP_TWIP, sal_True);
226 for (sal_uInt16 i = 0; i < aIDs.Count(); i++)
227 if (aIDs[i] == (sal_uInt16)ePaper)
228 aSizeFormatBox.SelectEntryPos(i);
229
230 // Benutzergroesse merken
231 if (aIDs[aSizeFormatBox.GetSelectEntryPos()] == (sal_uInt16)PAPER_USER)
232 {
233 lUserW = lWidth ;
234 lUserH = lHeight;
235 }
236
237 aSizeFormatBox.GetSelectHdl().Call(&aSizeFormatBox);
238 }
239 else
240 {
241 FillItem(GetParent()->aEnvItem);
242 SetMinMax();
243 aPreview.Invalidate();
244 }
245 return 0;
246 }
IMPL_LINK_INLINE_END(SwEnvFmtPage,ModifyHdl,Edit *,pEdit)247 IMPL_LINK_INLINE_END( SwEnvFmtPage, ModifyHdl, Edit *, pEdit )
248
249 // --------------------------------------------------------------------------
250
251
252 IMPL_LINK( SwEnvFmtPage, EditHdl, MenuButton *, pButton )
253 {
254 SwWrtShell* pSh = GetParent()->pSh;
255 ASSERT(pSh, "Shell fehlt");
256
257 // Collection-Ptr ermitteln
258 sal_Bool bSender = pButton != &aAddrEditButton;
259
260 SwTxtFmtColl* pColl = pSh->GetTxtCollFromPool( static_cast< sal_uInt16 >(
261 bSender ? RES_POOLCOLL_SENDADRESS : RES_POOLCOLL_JAKETADRESS));
262 ASSERT(pColl, "Text-Collection fehlt");
263
264 switch (pButton->GetCurItemId())
265 {
266 case MID_CHAR:
267 {
268 SfxItemSet *pCollSet = GetCollItemSet(pColl, bSender);
269
270 // Damit die Hintergrundfarbe nicht uebergebuegelt wird:
271 SfxAllItemSet aTmpSet(*pCollSet);
272
273 // Das CHRATR_BACKGROUND-Attribut wird fuer den Dialog in
274 // ein RES_BACKGROUND verwandelt und wieder zurueck ...
275 const SfxPoolItem *pTmpBrush;
276
277 if( SFX_ITEM_SET == aTmpSet.GetItemState( RES_CHRATR_BACKGROUND,
278 sal_True, &pTmpBrush ) )
279 {
280 SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
281 aTmpBrush.SetWhich( RES_BACKGROUND );
282 aTmpSet.Put( aTmpBrush );
283 }
284 else
285 aTmpSet.ClearItem( RES_BACKGROUND );
286
287 SwAbstractDialogFactory* pFact = swui::GetFactory();
288 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
289
290 SfxAbstractTabDialog* pDlg = pFact->CreateSwCharDlg( GetParent(), pSh->GetView(), aTmpSet, DLG_CHAR ,&pColl->GetName() );
291 DBG_ASSERT(pDlg, "Dialogdiet fail!");
292 if (pDlg->Execute() == RET_OK)
293 {
294 SfxItemSet aOutputSet( *pDlg->GetOutputItemSet() );
295 if( SFX_ITEM_SET == aOutputSet.GetItemState( RES_BACKGROUND,
296 sal_False, &pTmpBrush ) )
297 {
298 SvxBrushItem aTmpBrush( *((SvxBrushItem*)pTmpBrush) );
299 aTmpBrush.SetWhich( RES_CHRATR_BACKGROUND );
300 pCollSet->Put( aTmpBrush );
301 }
302 aOutputSet.ClearItem( RES_BACKGROUND );
303 pCollSet->Put(aOutputSet);
304 }
305 delete pDlg;
306 }
307 break;
308
309 case MID_PARA:
310 {
311 SfxItemSet *pCollSet = GetCollItemSet(pColl, bSender);
312
313 // Damit die Tabulatoren nicht uebergebuegelt werden:
314 SfxAllItemSet aTmpSet(*pCollSet);
315
316 // Tabulatoren, DefaultTabs ins ItemSet Stecken
317 const SvxTabStopItem& rDefTabs = (const SvxTabStopItem&)
318 pSh->GetView().GetCurShell()->GetPool().GetDefaultItem(RES_PARATR_TABSTOP);
319
320 sal_uInt16 nDefDist = ::GetTabDist( rDefTabs );
321 SfxUInt16Item aDefDistItem( SID_ATTR_TABSTOP_DEFAULTS, nDefDist );
322 aTmpSet.Put( aDefDistItem );
323
324 // Aktueller Tab
325 SfxUInt16Item aTabPos( SID_ATTR_TABSTOP_POS, 0 );
326 aTmpSet.Put( aTabPos );
327
328 // linker Rand als Offset
329 const long nOff = ((SvxLRSpaceItem&)aTmpSet.Get( RES_LR_SPACE )).
330 GetTxtLeft();
331 SfxInt32Item aOff( SID_ATTR_TABSTOP_OFFSET, nOff );
332 aTmpSet.Put( aOff );
333
334 // BoxInfo setzen
335 ::PrepareBoxInfo( aTmpSet, *pSh );
336
337 SwParaDlg *pDlg = new SwParaDlg(GetParent(), pSh->GetView(), aTmpSet, DLG_ENVELOP, &pColl->GetName());
338
339 if ( pDlg->Execute() == RET_OK )
340 {
341 // Defaults evtl umsetzen
342 const SfxPoolItem* pItem = 0;
343 SfxItemSet* pOutputSet = (SfxItemSet*)pDlg->GetOutputItemSet();
344 sal_uInt16 nNewDist;
345 if( SFX_ITEM_SET == pOutputSet->GetItemState( SID_ATTR_TABSTOP_DEFAULTS,
346 sal_False, &pItem ) &&
347 nDefDist != (nNewDist = ((SfxUInt16Item*)pItem)->GetValue()) )
348 {
349 SvxTabStopItem aDefTabs( 0, 0, SVX_TAB_ADJUST_DEFAULT, RES_PARATR_TABSTOP );
350 MakeDefTabs( nNewDist, aDefTabs );
351 pSh->SetDefault( aDefTabs );
352 pOutputSet->ClearItem( SID_ATTR_TABSTOP_DEFAULTS );
353 }
354 if( pOutputSet->Count() )
355 {
356 pCollSet->Put(*pOutputSet);
357 }
358 }
359 delete pDlg;
360 }
361 break;
362 }
363 return 0;
364 }
365
366 /*------------------------------------------------------------------------
367 Beschreibung: Ein temporaeres Itemset, das bei Abbruch verworfen wird
368 ------------------------------------------------------------------------*/
369
GetCollItemSet(SwTxtFmtColl * pColl,sal_Bool bSender)370 SfxItemSet *SwEnvFmtPage::GetCollItemSet(SwTxtFmtColl* pColl, sal_Bool bSender)
371 {
372 SfxItemSet *&pAddrSet = bSender ? GetParent()->pSenderSet : GetParent()->pAddresseeSet;
373
374 if (!pAddrSet)
375 {
376 // Range ermitteln (Ranges beider Itemsets mergen)
377 const sal_uInt16 *pRanges = pColl->GetAttrSet().GetRanges();
378
379 static sal_uInt16 __READONLY_DATA aRanges[] =
380 {
381 RES_PARATR_BEGIN, RES_PARATR_ADJUST,
382 RES_PARATR_TABSTOP, RES_PARATR_END-1,
383 RES_LR_SPACE, RES_UL_SPACE,
384 RES_BACKGROUND, RES_SHADOW,
385 SID_ATTR_TABSTOP_POS, SID_ATTR_TABSTOP_POS,
386 SID_ATTR_TABSTOP_DEFAULTS, SID_ATTR_TABSTOP_DEFAULTS,
387 SID_ATTR_TABSTOP_OFFSET, SID_ATTR_TABSTOP_OFFSET,
388 SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
389 0, 0
390 };
391
392 // BruteForce-Merge, weil MergeRange in SvTools buggy ist:
393 sal_uInt16 i = 0;
394 SvLongsSort aMergedRanges( 0, 10 );
395
396 while (pRanges[i])
397 {
398 for (sal_uInt16 nPos = pRanges[i]; nPos <= pRanges[i+1]; nPos++)
399 aMergedRanges.Insert(nPos);
400 i += 2;
401 }
402
403 i = 0;
404
405 while (aRanges[i])
406 {
407 for (sal_uInt16 nPos = aRanges[i]; nPos <= aRanges[i+1]; nPos++)
408 aMergedRanges.Insert(nPos);
409 i += 2;
410 }
411
412 // Ranges kompaktieren
413 SvLongs aCompactedRanges( 0, 10 );
414
415 aCompactedRanges.Insert(aMergedRanges[0], aCompactedRanges.Count());
416
417 for (i = 0; i < aMergedRanges.Count(); i++)
418 {
419 while (i + 1 < aMergedRanges.Count() &&
420 aMergedRanges[i+1] - aMergedRanges[i] == 1)
421 {
422 i++;
423 }
424 long nEnd = aMergedRanges[i];
425 aCompactedRanges.Insert(nEnd, aCompactedRanges.Count());
426
427 if (i + 1 < aMergedRanges.Count())
428 {
429 long nStart = aMergedRanges[i+1];
430 aCompactedRanges.Insert(nStart, aCompactedRanges.Count());
431 }
432 }
433
434 // Neue Ranges erzeugen
435 sal_uInt16 *pNewRanges = new sal_uInt16[aCompactedRanges.Count() + 1];
436 for (i = 0; i < aCompactedRanges.Count(); i++)
437 pNewRanges[i] = (sal_uInt16)aCompactedRanges[i];
438
439 pNewRanges[i] = 0;
440
441 pAddrSet = new SfxItemSet(GetParent()->pSh->GetView().GetCurShell()->GetPool(),
442 pNewRanges);
443
444 pAddrSet->Put(pColl->GetAttrSet());
445 delete[] pNewRanges;
446 }
447
448 return pAddrSet;
449 }
450
451 // --------------------------------------------------------------------------
452
453
IMPL_LINK(SwEnvFmtPage,FormatHdl,ListBox *,EMPTYARG)454 IMPL_LINK( SwEnvFmtPage, FormatHdl, ListBox *, EMPTYARG )
455 {
456 long lWidth;
457 long lHeight;
458 long lSendFromLeft;
459 long lSendFromTop;
460 long lAddrFromLeft;
461 long lAddrFromTop;
462
463 sal_uInt16 nPaper = aIDs[aSizeFormatBox.GetSelectEntryPos()];
464 if (nPaper != (sal_uInt16)PAPER_USER)
465 {
466 Size aSz = SvxPaperInfo::GetPaperSize((Paper)nPaper);
467 lWidth = Max(aSz.Width(), aSz.Height());
468 lHeight = Min(aSz.Width(), aSz.Height());
469 }
470 else
471 {
472 lWidth = lUserW;
473 lHeight = lUserH;
474 }
475
476 lSendFromLeft = 566; // 1cm
477 lSendFromTop = 566; // 1cm
478 lAddrFromLeft = lWidth / 2;
479 lAddrFromTop = lHeight / 2;
480
481 SetFldVal(aAddrLeftField, lAddrFromLeft);
482 SetFldVal(aAddrTopField , lAddrFromTop );
483 SetFldVal(aSendLeftField, lSendFromLeft);
484 SetFldVal(aSendTopField , lSendFromTop );
485
486 SetFldVal(aSizeWidthField , lWidth );
487 SetFldVal(aSizeHeightField, lHeight);
488
489 SetMinMax();
490
491 FillItem(GetParent()->aEnvItem);
492 aPreview.Invalidate();
493 return 0;
494 }
495
496 // --------------------------------------------------------------------------
497
498
SetMinMax()499 void SwEnvFmtPage::SetMinMax()
500 {
501 long lWVal = static_cast< long >(GetFldVal(aSizeWidthField ));
502 long lHVal = static_cast< long >(GetFldVal(aSizeHeightField));
503
504 long lWidth = Max(lWVal, lHVal),
505 lHeight = Min(lWVal, lHVal);
506
507 // Min und Max
508 aAddrLeftField.SetMin((long) 100 * (GetFldVal(aSendLeftField) + 566), FUNIT_TWIP);
509 aAddrLeftField.SetMax((long) 100 * (lWidth - 2 * 566), FUNIT_TWIP);
510 aAddrTopField .SetMin((long) 100 * (GetFldVal(aSendTopField ) + 2 * 566), FUNIT_TWIP);
511 aAddrTopField .SetMax((long) 100 * (lHeight - 2 * 566), FUNIT_TWIP);
512 aSendLeftField.SetMin((long) 100 * (566), FUNIT_TWIP);
513 aSendLeftField.SetMax((long) 100 * (GetFldVal(aAddrLeftField) - 566), FUNIT_TWIP);
514 aSendTopField .SetMin((long) 100 * (566), FUNIT_TWIP);
515 aSendTopField .SetMax((long) 100 * (GetFldVal(aAddrTopField ) - 2 * 566), FUNIT_TWIP);
516
517 // First und Last
518 aAddrLeftField.SetFirst(aAddrLeftField.GetMin());
519 aAddrLeftField.SetLast (aAddrLeftField.GetMax());
520 aAddrTopField .SetFirst(aAddrTopField .GetMin());
521 aAddrTopField .SetLast (aAddrTopField .GetMax());
522 aSendLeftField.SetFirst(aSendLeftField.GetMin());
523 aSendLeftField.SetLast (aSendLeftField.GetMax());
524 aSendTopField .SetFirst(aSendTopField .GetMin());
525 aSendTopField .SetLast (aSendTopField .GetMax());
526
527 // Fields neu formatieren
528 aAddrLeftField .Reformat();
529 aAddrTopField .Reformat();
530 aSendLeftField .Reformat();
531 aSendTopField .Reformat();
532 aSizeWidthField .Reformat();
533 aSizeHeightField.Reformat();
534 }
535
536 // --------------------------------------------------------------------------
537
538
Create(Window * pParent,const SfxItemSet & rSet)539 SfxTabPage* __EXPORT SwEnvFmtPage::Create(Window* pParent, const SfxItemSet& rSet)
540 {
541 return new SwEnvFmtPage(pParent, rSet);
542 }
543
544 // ----------------------------------------------------------------------------
545
546
ActivatePage(const SfxItemSet & rSet)547 void __EXPORT SwEnvFmtPage::ActivatePage(const SfxItemSet& rSet)
548 {
549 SfxItemSet aSet(rSet);
550 aSet.Put(GetParent()->aEnvItem);
551 Reset(aSet);
552 }
553
554 // ----------------------------------------------------------------------------
555
556
DeactivatePage(SfxItemSet * _pSet)557 int __EXPORT SwEnvFmtPage::DeactivatePage(SfxItemSet* _pSet)
558 {
559 if( _pSet )
560 FillItemSet(*_pSet);
561 return SfxTabPage::LEAVE_PAGE;
562 }
563
564 // --------------------------------------------------------------------------
565
566
FillItem(SwEnvItem & rItem)567 void SwEnvFmtPage::FillItem(SwEnvItem& rItem)
568 {
569 rItem.lAddrFromLeft = static_cast< sal_Int32 >(GetFldVal(aAddrLeftField));
570 rItem.lAddrFromTop = static_cast< sal_Int32 >(GetFldVal(aAddrTopField ));
571 rItem.lSendFromLeft = static_cast< sal_Int32 >(GetFldVal(aSendLeftField));
572 rItem.lSendFromTop = static_cast< sal_Int32 >(GetFldVal(aSendTopField ));
573
574 sal_uInt16 nPaper = aIDs[aSizeFormatBox.GetSelectEntryPos()];
575 if (nPaper == (sal_uInt16)PAPER_USER)
576 {
577 long lWVal = static_cast< long >(GetFldVal(aSizeWidthField ));
578 long lHVal = static_cast< long >(GetFldVal(aSizeHeightField));
579 rItem.lWidth = Max(lWVal, lHVal);
580 rItem.lHeight = Min(lWVal, lHVal);
581 }
582 else
583 {
584 long lWVal = SvxPaperInfo::GetPaperSize((Paper)nPaper).Width ();
585 long lHVal = SvxPaperInfo::GetPaperSize((Paper)nPaper).Height();
586 rItem.lWidth = Max(lWVal, lHVal);
587 rItem.lHeight = Min(lWVal, lHVal);
588 }
589 }
590
591 // --------------------------------------------------------------------------
592
593
FillItemSet(SfxItemSet & rSet)594 sal_Bool __EXPORT SwEnvFmtPage::FillItemSet(SfxItemSet& rSet)
595 {
596 FillItem(GetParent()->aEnvItem);
597 rSet.Put(GetParent()->aEnvItem);
598 return sal_True;
599 }
600
601 // --------------------------------------------------------------------------
602
603
Reset(const SfxItemSet & rSet)604 void __EXPORT SwEnvFmtPage::Reset(const SfxItemSet& rSet)
605 {
606 const SwEnvItem& rItem = (const SwEnvItem&) rSet.Get(FN_ENVELOP);
607
608 Paper ePaper = SvxPaperInfo::GetSvxPaper(
609 Size( Min(rItem.lWidth, rItem.lHeight),
610 Max(rItem.lWidth, rItem.lHeight)), MAP_TWIP, sal_True);
611 for (sal_uInt16 i = 0; i < (sal_uInt16) aIDs.Count(); i++)
612 if (aIDs[i] == (sal_uInt16)ePaper)
613 aSizeFormatBox.SelectEntryPos(i);
614
615 // Die MetricFields
616 SetFldVal(aAddrLeftField, rItem.lAddrFromLeft);
617 SetFldVal(aAddrTopField , rItem.lAddrFromTop );
618 SetFldVal(aSendLeftField, rItem.lSendFromLeft);
619 SetFldVal(aSendTopField , rItem.lSendFromTop );
620 SetFldVal(aSizeWidthField , Max(rItem.lWidth, rItem.lHeight));
621 SetFldVal(aSizeHeightField , Min(rItem.lWidth, rItem.lHeight));
622 SetMinMax();
623
624 DELETEZ(GetParent()->pSenderSet);
625 DELETEZ(GetParent()->pAddresseeSet);
626 }
627
628
629
630