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