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 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 204cdf0e10cSrcweir __EXPORT SwEnvFmtPage::~SwEnvFmtPage() 205cdf0e10cSrcweir { 206cdf0e10cSrcweir aAddrEditButton.SetPopupMenu(0); 207cdf0e10cSrcweir aSendEditButton.SetPopupMenu(0); 208cdf0e10cSrcweir delete ::pMenu; 209cdf0e10cSrcweir } 210cdf0e10cSrcweir 211cdf0e10cSrcweir // -------------------------------------------------------------------------- 212cdf0e10cSrcweir 213cdf0e10cSrcweir 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 } 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 //pColl->SetAttr( aTmpSet ); 304cdf0e10cSrcweir pCollSet->Put(aOutputSet); 305cdf0e10cSrcweir } 306cdf0e10cSrcweir delete pDlg; 307cdf0e10cSrcweir } 308cdf0e10cSrcweir break; 309cdf0e10cSrcweir 310cdf0e10cSrcweir case MID_PARA: 311cdf0e10cSrcweir { 312cdf0e10cSrcweir SfxItemSet *pCollSet = GetCollItemSet(pColl, bSender); 313cdf0e10cSrcweir 314cdf0e10cSrcweir // Damit die Tabulatoren nicht uebergebuegelt werden: 315cdf0e10cSrcweir SfxAllItemSet aTmpSet(*pCollSet); 316cdf0e10cSrcweir 317cdf0e10cSrcweir // Tabulatoren, DefaultTabs ins ItemSet Stecken 318cdf0e10cSrcweir const SvxTabStopItem& rDefTabs = (const SvxTabStopItem&) 319cdf0e10cSrcweir pSh->GetView().GetCurShell()->GetPool().GetDefaultItem(RES_PARATR_TABSTOP); 320cdf0e10cSrcweir 321cdf0e10cSrcweir sal_uInt16 nDefDist = ::GetTabDist( rDefTabs ); 322cdf0e10cSrcweir SfxUInt16Item aDefDistItem( SID_ATTR_TABSTOP_DEFAULTS, nDefDist ); 323cdf0e10cSrcweir aTmpSet.Put( aDefDistItem ); 324cdf0e10cSrcweir 325cdf0e10cSrcweir // Aktueller Tab 326cdf0e10cSrcweir SfxUInt16Item aTabPos( SID_ATTR_TABSTOP_POS, 0 ); 327cdf0e10cSrcweir aTmpSet.Put( aTabPos ); 328cdf0e10cSrcweir 329cdf0e10cSrcweir // linker Rand als Offset 330cdf0e10cSrcweir const long nOff = ((SvxLRSpaceItem&)aTmpSet.Get( RES_LR_SPACE )). 331cdf0e10cSrcweir GetTxtLeft(); 332cdf0e10cSrcweir SfxInt32Item aOff( SID_ATTR_TABSTOP_OFFSET, nOff ); 333cdf0e10cSrcweir aTmpSet.Put( aOff ); 334cdf0e10cSrcweir 335cdf0e10cSrcweir // BoxInfo setzen 336cdf0e10cSrcweir ::PrepareBoxInfo( aTmpSet, *pSh ); 337cdf0e10cSrcweir 338cdf0e10cSrcweir SwParaDlg *pDlg = new SwParaDlg(GetParent(), pSh->GetView(), aTmpSet, DLG_ENVELOP, &pColl->GetName()); 339cdf0e10cSrcweir 340cdf0e10cSrcweir if ( pDlg->Execute() == RET_OK ) 341cdf0e10cSrcweir { 342cdf0e10cSrcweir // Defaults evtl umsetzen 343cdf0e10cSrcweir const SfxPoolItem* pItem = 0; 344cdf0e10cSrcweir SfxItemSet* pOutputSet = (SfxItemSet*)pDlg->GetOutputItemSet(); 345cdf0e10cSrcweir sal_uInt16 nNewDist; 346cdf0e10cSrcweir if( SFX_ITEM_SET == pOutputSet->GetItemState( SID_ATTR_TABSTOP_DEFAULTS, 347cdf0e10cSrcweir sal_False, &pItem ) && 348cdf0e10cSrcweir nDefDist != (nNewDist = ((SfxUInt16Item*)pItem)->GetValue()) ) 349cdf0e10cSrcweir { 350cdf0e10cSrcweir SvxTabStopItem aDefTabs( 0, 0, SVX_TAB_ADJUST_DEFAULT, RES_PARATR_TABSTOP ); 351cdf0e10cSrcweir MakeDefTabs( nNewDist, aDefTabs ); 352cdf0e10cSrcweir pSh->SetDefault( aDefTabs ); 353cdf0e10cSrcweir pOutputSet->ClearItem( SID_ATTR_TABSTOP_DEFAULTS ); 354cdf0e10cSrcweir } 355cdf0e10cSrcweir if( pOutputSet->Count() ) 356cdf0e10cSrcweir { 357cdf0e10cSrcweir //pColl->SetAttr( *pOutputSet ); 358cdf0e10cSrcweir pCollSet->Put(*pOutputSet); 359cdf0e10cSrcweir } 360cdf0e10cSrcweir } 361cdf0e10cSrcweir delete pDlg; 362cdf0e10cSrcweir } 363cdf0e10cSrcweir break; 364cdf0e10cSrcweir } 365cdf0e10cSrcweir return 0; 366cdf0e10cSrcweir } 367cdf0e10cSrcweir 368cdf0e10cSrcweir /*------------------------------------------------------------------------ 369cdf0e10cSrcweir Beschreibung: Ein temporaeres Itemset, das bei Abbruch verworfen wird 370cdf0e10cSrcweir ------------------------------------------------------------------------*/ 371cdf0e10cSrcweir 372cdf0e10cSrcweir SfxItemSet *SwEnvFmtPage::GetCollItemSet(SwTxtFmtColl* pColl, sal_Bool bSender) 373cdf0e10cSrcweir { 374cdf0e10cSrcweir SfxItemSet *&pAddrSet = bSender ? GetParent()->pSenderSet : GetParent()->pAddresseeSet; 375cdf0e10cSrcweir 376cdf0e10cSrcweir if (!pAddrSet) 377cdf0e10cSrcweir { 378cdf0e10cSrcweir // Range ermitteln (Ranges beider Itemsets mergen) 379cdf0e10cSrcweir const sal_uInt16 *pRanges = pColl->GetAttrSet().GetRanges(); 380cdf0e10cSrcweir 381cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aRanges[] = 382cdf0e10cSrcweir { 383cdf0e10cSrcweir RES_PARATR_BEGIN, RES_PARATR_ADJUST, 384cdf0e10cSrcweir RES_PARATR_TABSTOP, RES_PARATR_END-1, 385cdf0e10cSrcweir RES_LR_SPACE, RES_UL_SPACE, 386cdf0e10cSrcweir RES_BACKGROUND, RES_SHADOW, 387cdf0e10cSrcweir SID_ATTR_TABSTOP_POS, SID_ATTR_TABSTOP_POS, 388cdf0e10cSrcweir SID_ATTR_TABSTOP_DEFAULTS, SID_ATTR_TABSTOP_DEFAULTS, 389cdf0e10cSrcweir SID_ATTR_TABSTOP_OFFSET, SID_ATTR_TABSTOP_OFFSET, 390cdf0e10cSrcweir SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 391cdf0e10cSrcweir 0, 0 392cdf0e10cSrcweir }; 393cdf0e10cSrcweir 394cdf0e10cSrcweir // BruteForce-Merge, weil MergeRange in SvTools buggy ist: 395cdf0e10cSrcweir sal_uInt16 i = 0; 396cdf0e10cSrcweir SvLongsSort aMergedRanges( 0, 10 ); 397cdf0e10cSrcweir 398cdf0e10cSrcweir while (pRanges[i]) 399cdf0e10cSrcweir { 400cdf0e10cSrcweir for (sal_uInt16 nPos = pRanges[i]; nPos <= pRanges[i+1]; nPos++) 401cdf0e10cSrcweir aMergedRanges.Insert(nPos); 402cdf0e10cSrcweir i += 2; 403cdf0e10cSrcweir } 404cdf0e10cSrcweir 405cdf0e10cSrcweir i = 0; 406cdf0e10cSrcweir 407cdf0e10cSrcweir while (aRanges[i]) 408cdf0e10cSrcweir { 409cdf0e10cSrcweir for (sal_uInt16 nPos = aRanges[i]; nPos <= aRanges[i+1]; nPos++) 410cdf0e10cSrcweir aMergedRanges.Insert(nPos); 411cdf0e10cSrcweir i += 2; 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir // Ranges kompaktieren 415cdf0e10cSrcweir SvLongs aCompactedRanges( 0, 10 ); 416cdf0e10cSrcweir 417cdf0e10cSrcweir aCompactedRanges.Insert(aMergedRanges[0], aCompactedRanges.Count()); 418cdf0e10cSrcweir 419cdf0e10cSrcweir for (i = 0; i < aMergedRanges.Count(); i++) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir while (i + 1 < aMergedRanges.Count() && 422cdf0e10cSrcweir aMergedRanges[i+1] - aMergedRanges[i] == 1) 423cdf0e10cSrcweir { 424cdf0e10cSrcweir i++; 425cdf0e10cSrcweir } 426cdf0e10cSrcweir long nEnd = aMergedRanges[i]; 427cdf0e10cSrcweir aCompactedRanges.Insert(nEnd, aCompactedRanges.Count()); 428cdf0e10cSrcweir 429cdf0e10cSrcweir if (i + 1 < aMergedRanges.Count()) 430cdf0e10cSrcweir { 431cdf0e10cSrcweir long nStart = aMergedRanges[i+1]; 432cdf0e10cSrcweir aCompactedRanges.Insert(nStart, aCompactedRanges.Count()); 433cdf0e10cSrcweir } 434cdf0e10cSrcweir } 435cdf0e10cSrcweir 436cdf0e10cSrcweir // Neue Ranges erzeugen 437cdf0e10cSrcweir sal_uInt16 *pNewRanges = new sal_uInt16[aCompactedRanges.Count() + 1]; 438cdf0e10cSrcweir for (i = 0; i < aCompactedRanges.Count(); i++) 439cdf0e10cSrcweir pNewRanges[i] = (sal_uInt16)aCompactedRanges[i]; 440cdf0e10cSrcweir 441cdf0e10cSrcweir pNewRanges[i] = 0; 442cdf0e10cSrcweir 443cdf0e10cSrcweir pAddrSet = new SfxItemSet(GetParent()->pSh->GetView().GetCurShell()->GetPool(), 444cdf0e10cSrcweir pNewRanges); 445cdf0e10cSrcweir 446cdf0e10cSrcweir pAddrSet->Put(pColl->GetAttrSet()); 447cdf0e10cSrcweir delete[] pNewRanges; 448cdf0e10cSrcweir } 449cdf0e10cSrcweir 450cdf0e10cSrcweir return pAddrSet; 451cdf0e10cSrcweir } 452cdf0e10cSrcweir 453cdf0e10cSrcweir // -------------------------------------------------------------------------- 454cdf0e10cSrcweir 455cdf0e10cSrcweir 456cdf0e10cSrcweir IMPL_LINK( SwEnvFmtPage, FormatHdl, ListBox *, EMPTYARG ) 457cdf0e10cSrcweir { 458cdf0e10cSrcweir long lWidth; 459cdf0e10cSrcweir long lHeight; 460cdf0e10cSrcweir long lSendFromLeft; 461cdf0e10cSrcweir long lSendFromTop; 462cdf0e10cSrcweir long lAddrFromLeft; 463cdf0e10cSrcweir long lAddrFromTop; 464cdf0e10cSrcweir 465cdf0e10cSrcweir sal_uInt16 nPaper = aIDs[aSizeFormatBox.GetSelectEntryPos()]; 466cdf0e10cSrcweir if (nPaper != (sal_uInt16)PAPER_USER) 467cdf0e10cSrcweir { 468cdf0e10cSrcweir Size aSz = SvxPaperInfo::GetPaperSize((Paper)nPaper); 469cdf0e10cSrcweir lWidth = Max(aSz.Width(), aSz.Height()); 470cdf0e10cSrcweir lHeight = Min(aSz.Width(), aSz.Height()); 471cdf0e10cSrcweir } 472cdf0e10cSrcweir else 473cdf0e10cSrcweir { 474cdf0e10cSrcweir lWidth = lUserW; 475cdf0e10cSrcweir lHeight = lUserH; 476cdf0e10cSrcweir } 477cdf0e10cSrcweir 478cdf0e10cSrcweir lSendFromLeft = 566; // 1cm 479cdf0e10cSrcweir lSendFromTop = 566; // 1cm 480cdf0e10cSrcweir lAddrFromLeft = lWidth / 2; 481cdf0e10cSrcweir lAddrFromTop = lHeight / 2; 482cdf0e10cSrcweir 483cdf0e10cSrcweir SetFldVal(aAddrLeftField, lAddrFromLeft); 484cdf0e10cSrcweir SetFldVal(aAddrTopField , lAddrFromTop ); 485cdf0e10cSrcweir SetFldVal(aSendLeftField, lSendFromLeft); 486cdf0e10cSrcweir SetFldVal(aSendTopField , lSendFromTop ); 487cdf0e10cSrcweir 488cdf0e10cSrcweir SetFldVal(aSizeWidthField , lWidth ); 489cdf0e10cSrcweir SetFldVal(aSizeHeightField, lHeight); 490cdf0e10cSrcweir 491cdf0e10cSrcweir SetMinMax(); 492cdf0e10cSrcweir 493cdf0e10cSrcweir FillItem(GetParent()->aEnvItem); 494cdf0e10cSrcweir aPreview.Invalidate(); 495cdf0e10cSrcweir return 0; 496cdf0e10cSrcweir } 497cdf0e10cSrcweir 498cdf0e10cSrcweir // -------------------------------------------------------------------------- 499cdf0e10cSrcweir 500cdf0e10cSrcweir 501cdf0e10cSrcweir void SwEnvFmtPage::SetMinMax() 502cdf0e10cSrcweir { 503cdf0e10cSrcweir long lWVal = static_cast< long >(GetFldVal(aSizeWidthField )); 504cdf0e10cSrcweir long lHVal = static_cast< long >(GetFldVal(aSizeHeightField)); 505cdf0e10cSrcweir 506cdf0e10cSrcweir long lWidth = Max(lWVal, lHVal), 507cdf0e10cSrcweir lHeight = Min(lWVal, lHVal); 508cdf0e10cSrcweir 509cdf0e10cSrcweir // Min und Max 510cdf0e10cSrcweir aAddrLeftField.SetMin((long) 100 * (GetFldVal(aSendLeftField) + 566), FUNIT_TWIP); 511cdf0e10cSrcweir aAddrLeftField.SetMax((long) 100 * (lWidth - 2 * 566), FUNIT_TWIP); 512cdf0e10cSrcweir aAddrTopField .SetMin((long) 100 * (GetFldVal(aSendTopField ) + 2 * 566), FUNIT_TWIP); 513cdf0e10cSrcweir aAddrTopField .SetMax((long) 100 * (lHeight - 2 * 566), FUNIT_TWIP); 514cdf0e10cSrcweir aSendLeftField.SetMin((long) 100 * (566), FUNIT_TWIP); 515cdf0e10cSrcweir aSendLeftField.SetMax((long) 100 * (GetFldVal(aAddrLeftField) - 566), FUNIT_TWIP); 516cdf0e10cSrcweir aSendTopField .SetMin((long) 100 * (566), FUNIT_TWIP); 517cdf0e10cSrcweir aSendTopField .SetMax((long) 100 * (GetFldVal(aAddrTopField ) - 2 * 566), FUNIT_TWIP); 518cdf0e10cSrcweir 519cdf0e10cSrcweir // First und Last 520cdf0e10cSrcweir aAddrLeftField.SetFirst(aAddrLeftField.GetMin()); 521cdf0e10cSrcweir aAddrLeftField.SetLast (aAddrLeftField.GetMax()); 522cdf0e10cSrcweir aAddrTopField .SetFirst(aAddrTopField .GetMin()); 523cdf0e10cSrcweir aAddrTopField .SetLast (aAddrTopField .GetMax()); 524cdf0e10cSrcweir aSendLeftField.SetFirst(aSendLeftField.GetMin()); 525cdf0e10cSrcweir aSendLeftField.SetLast (aSendLeftField.GetMax()); 526cdf0e10cSrcweir aSendTopField .SetFirst(aSendTopField .GetMin()); 527cdf0e10cSrcweir aSendTopField .SetLast (aSendTopField .GetMax()); 528cdf0e10cSrcweir 529cdf0e10cSrcweir // Fields neu formatieren 530cdf0e10cSrcweir aAddrLeftField .Reformat(); 531cdf0e10cSrcweir aAddrTopField .Reformat(); 532cdf0e10cSrcweir aSendLeftField .Reformat(); 533cdf0e10cSrcweir aSendTopField .Reformat(); 534cdf0e10cSrcweir aSizeWidthField .Reformat(); 535cdf0e10cSrcweir aSizeHeightField.Reformat(); 536cdf0e10cSrcweir } 537cdf0e10cSrcweir 538cdf0e10cSrcweir // -------------------------------------------------------------------------- 539cdf0e10cSrcweir 540cdf0e10cSrcweir 541cdf0e10cSrcweir SfxTabPage* __EXPORT SwEnvFmtPage::Create(Window* pParent, const SfxItemSet& rSet) 542cdf0e10cSrcweir { 543cdf0e10cSrcweir return new SwEnvFmtPage(pParent, rSet); 544cdf0e10cSrcweir } 545cdf0e10cSrcweir 546cdf0e10cSrcweir // ---------------------------------------------------------------------------- 547cdf0e10cSrcweir 548cdf0e10cSrcweir 549cdf0e10cSrcweir void __EXPORT SwEnvFmtPage::ActivatePage(const SfxItemSet& rSet) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir SfxItemSet aSet(rSet); 552cdf0e10cSrcweir aSet.Put(GetParent()->aEnvItem); 553cdf0e10cSrcweir Reset(aSet); 554cdf0e10cSrcweir } 555cdf0e10cSrcweir 556cdf0e10cSrcweir // ---------------------------------------------------------------------------- 557cdf0e10cSrcweir 558cdf0e10cSrcweir 559cdf0e10cSrcweir int __EXPORT SwEnvFmtPage::DeactivatePage(SfxItemSet* _pSet) 560cdf0e10cSrcweir { 561cdf0e10cSrcweir if( _pSet ) 562cdf0e10cSrcweir FillItemSet(*_pSet); 563cdf0e10cSrcweir return SfxTabPage::LEAVE_PAGE; 564cdf0e10cSrcweir } 565cdf0e10cSrcweir 566cdf0e10cSrcweir // -------------------------------------------------------------------------- 567cdf0e10cSrcweir 568cdf0e10cSrcweir 569cdf0e10cSrcweir void SwEnvFmtPage::FillItem(SwEnvItem& rItem) 570cdf0e10cSrcweir { 571cdf0e10cSrcweir rItem.lAddrFromLeft = static_cast< sal_Int32 >(GetFldVal(aAddrLeftField)); 572cdf0e10cSrcweir rItem.lAddrFromTop = static_cast< sal_Int32 >(GetFldVal(aAddrTopField )); 573cdf0e10cSrcweir rItem.lSendFromLeft = static_cast< sal_Int32 >(GetFldVal(aSendLeftField)); 574cdf0e10cSrcweir rItem.lSendFromTop = static_cast< sal_Int32 >(GetFldVal(aSendTopField )); 575cdf0e10cSrcweir 576cdf0e10cSrcweir sal_uInt16 nPaper = aIDs[aSizeFormatBox.GetSelectEntryPos()]; 577cdf0e10cSrcweir if (nPaper == (sal_uInt16)PAPER_USER) 578cdf0e10cSrcweir { 579cdf0e10cSrcweir long lWVal = static_cast< long >(GetFldVal(aSizeWidthField )); 580cdf0e10cSrcweir long lHVal = static_cast< long >(GetFldVal(aSizeHeightField)); 581cdf0e10cSrcweir rItem.lWidth = Max(lWVal, lHVal); 582cdf0e10cSrcweir rItem.lHeight = Min(lWVal, lHVal); 583cdf0e10cSrcweir } 584cdf0e10cSrcweir else 585cdf0e10cSrcweir { 586cdf0e10cSrcweir long lWVal = SvxPaperInfo::GetPaperSize((Paper)nPaper).Width (); 587cdf0e10cSrcweir long lHVal = SvxPaperInfo::GetPaperSize((Paper)nPaper).Height(); 588cdf0e10cSrcweir rItem.lWidth = Max(lWVal, lHVal); 589cdf0e10cSrcweir rItem.lHeight = Min(lWVal, lHVal); 590cdf0e10cSrcweir } 591cdf0e10cSrcweir } 592cdf0e10cSrcweir 593cdf0e10cSrcweir // -------------------------------------------------------------------------- 594cdf0e10cSrcweir 595cdf0e10cSrcweir 596cdf0e10cSrcweir sal_Bool __EXPORT SwEnvFmtPage::FillItemSet(SfxItemSet& rSet) 597cdf0e10cSrcweir { 598cdf0e10cSrcweir FillItem(GetParent()->aEnvItem); 599cdf0e10cSrcweir rSet.Put(GetParent()->aEnvItem); 600cdf0e10cSrcweir return sal_True; 601cdf0e10cSrcweir } 602cdf0e10cSrcweir 603cdf0e10cSrcweir // -------------------------------------------------------------------------- 604cdf0e10cSrcweir 605cdf0e10cSrcweir 606cdf0e10cSrcweir void __EXPORT SwEnvFmtPage::Reset(const SfxItemSet& rSet) 607cdf0e10cSrcweir { 608cdf0e10cSrcweir const SwEnvItem& rItem = (const SwEnvItem&) rSet.Get(FN_ENVELOP); 609cdf0e10cSrcweir 610cdf0e10cSrcweir Paper ePaper = SvxPaperInfo::GetSvxPaper( 611cdf0e10cSrcweir Size( Min(rItem.lWidth, rItem.lHeight), 612cdf0e10cSrcweir Max(rItem.lWidth, rItem.lHeight)), MAP_TWIP, sal_True); 613cdf0e10cSrcweir for (sal_uInt16 i = 0; i < (sal_uInt16) aIDs.Count(); i++) 614cdf0e10cSrcweir if (aIDs[i] == (sal_uInt16)ePaper) 615cdf0e10cSrcweir aSizeFormatBox.SelectEntryPos(i); 616cdf0e10cSrcweir 617cdf0e10cSrcweir // Die MetricFields 618cdf0e10cSrcweir SetFldVal(aAddrLeftField, rItem.lAddrFromLeft); 619cdf0e10cSrcweir SetFldVal(aAddrTopField , rItem.lAddrFromTop ); 620cdf0e10cSrcweir SetFldVal(aSendLeftField, rItem.lSendFromLeft); 621cdf0e10cSrcweir SetFldVal(aSendTopField , rItem.lSendFromTop ); 622cdf0e10cSrcweir SetFldVal(aSizeWidthField , Max(rItem.lWidth, rItem.lHeight)); 623cdf0e10cSrcweir SetFldVal(aSizeHeightField , Min(rItem.lWidth, rItem.lHeight)); 624cdf0e10cSrcweir SetMinMax(); 625cdf0e10cSrcweir 626cdf0e10cSrcweir DELETEZ(GetParent()->pSenderSet); 627cdf0e10cSrcweir DELETEZ(GetParent()->pAddresseeSet); 628cdf0e10cSrcweir } 629cdf0e10cSrcweir 630cdf0e10cSrcweir 631cdf0e10cSrcweir 632