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_svx.hxx" 26 27 // include --------------------------------------------------------------- 28 #include <tools/shl.hxx> 29 #include <svl/itemiter.hxx> 30 #include <sfx2/app.hxx> 31 #include <sfx2/objsh.hxx> 32 #include <sfx2/module.hxx> 33 #include <vcl/msgbox.hxx> 34 #include <vcl/graph.hxx> 35 36 #include <sfx2/sfxsids.hrc> 37 #include <svx/svxids.hrc> 38 #include <svx/dialogs.hrc> 39 #include "hdft.hrc" 40 #include <svl/intitem.hxx> 41 42 #define _SVX_HDFT_CXX 43 44 #include <svx/hdft.hxx> 45 #include <svx/pageitem.hxx> 46 //CHINA001 #include "bbdlg.hxx" 47 #include "svx/dlgutil.hxx" 48 #include <svx/dialmgr.hxx> 49 #include "svx/htmlmode.hxx" 50 51 #include <editeng/brshitem.hxx> 52 #include <editeng/lrspitem.hxx> 53 #include <editeng/ulspitem.hxx> 54 #include <editeng/shaditem.hxx> 55 #include <editeng/sizeitem.hxx> 56 #include <editeng/boxitem.hxx> 57 58 #include <svx/svxdlg.hxx> //CHINA001 59 #include <svx/dialogs.hrc> //CHINA001 60 // static ---------------------------------------------------------------- 61 62 // --> OD 2004-06-18 #i19922# 63 //static const long MINBODY = 284; // 0,5cm in twips aufgerundet 64 static const long MINBODY = 56; // 1mm in twips rounded 65 66 // default distance to Header or footer 67 static const long DEF_DIST_WRITER = 500; // 5mm (Writer) 68 static const long DEF_DIST_CALC = 250; // 2,5mm (Calc) 69 70 static sal_uInt16 pRanges[] = 71 { 72 SID_ATTR_BRUSH, SID_ATTR_BRUSH, 73 SID_ATTR_BORDER_OUTER, SID_ATTR_BORDER_OUTER, 74 SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 75 SID_ATTR_BORDER_SHADOW, SID_ATTR_BORDER_SHADOW, 76 SID_ATTR_LRSPACE, SID_ATTR_LRSPACE, 77 SID_ATTR_ULSPACE, SID_ATTR_ULSPACE, 78 SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE, 79 SID_ATTR_PAGE_HEADERSET, SID_ATTR_PAGE_HEADERSET, 80 SID_ATTR_PAGE_FOOTERSET, SID_ATTR_PAGE_FOOTERSET, 81 SID_ATTR_PAGE_ON, SID_ATTR_PAGE_ON, 82 SID_ATTR_PAGE_DYNAMIC, SID_ATTR_PAGE_DYNAMIC, 83 SID_ATTR_PAGE_SHARED, SID_ATTR_PAGE_SHARED, 84 SID_ATTR_HDFT_DYNAMIC_SPACING, SID_ATTR_HDFT_DYNAMIC_SPACING, 85 0 86 }; 87 88 /*-------------------------------------------------------------------- 89 Beschreibung: 90 --------------------------------------------------------------------*/ 91 92 // gibt den Bereich der Which-Werte zurueck 93 94 95 sal_uInt16* SvxHeaderPage::GetRanges() 96 { 97 return pRanges; 98 } 99 100 //------------------------------------------------------------------------ 101 102 SfxTabPage* SvxHeaderPage::Create( Window* pParent, const SfxItemSet& rSet ) 103 { 104 return new SvxHeaderPage( pParent, rSet ); 105 } 106 107 //------------------------------------------------------------------------ 108 109 sal_uInt16* SvxFooterPage::GetRanges() 110 { 111 return pRanges; 112 } 113 114 // ----------------------------------------------------------------------- 115 116 SfxTabPage* SvxFooterPage::Create( Window* pParent, const SfxItemSet& rSet ) 117 { 118 return new SvxFooterPage( pParent, rSet ); 119 } 120 121 // ----------------------------------------------------------------------- 122 123 SvxHeaderPage::SvxHeaderPage( Window* pParent, const SfxItemSet& rAttr ) : 124 125 SvxHFPage( pParent, RID_SVXPAGE_HEADER, rAttr, SID_ATTR_PAGE_HEADERSET ) 126 127 { 128 } 129 130 // ----------------------------------------------------------------------- 131 132 SvxFooterPage::SvxFooterPage( Window* pParent, const SfxItemSet& rAttr ) : 133 134 SvxHFPage( pParent, RID_SVXPAGE_FOOTER, rAttr, SID_ATTR_PAGE_FOOTERSET ) 135 136 { 137 } 138 139 // ----------------------------------------------------------------------- 140 141 SvxHFPage::SvxHFPage( Window* pParent, sal_uInt16 nResId, const SfxItemSet& rAttr, sal_uInt16 nSetId ) : 142 143 SfxTabPage( pParent, SVX_RES( nResId ), rAttr ), 144 145 aFrm ( this, SVX_RES( FL_FRAME ) ), 146 aTurnOnBox ( this, SVX_RES( CB_TURNON ) ), 147 aCntSharedBox ( this, SVX_RES( CB_SHARED ) ), 148 aLMLbl ( this, SVX_RES( FT_LMARGIN ) ), 149 aLMEdit ( this, SVX_RES( ED_LMARGIN ) ), 150 aRMLbl ( this, SVX_RES( FT_RMARGIN ) ), 151 aRMEdit ( this, SVX_RES( ED_RMARGIN ) ), 152 aDistFT ( this, SVX_RES( FT_DIST ) ), 153 aDistEdit ( this, SVX_RES( ED_DIST ) ), 154 aDynSpacingCB ( this, SVX_RES( CB_DYNSPACING ) ), 155 aHeightFT ( this, SVX_RES( FT_HEIGHT ) ), 156 aHeightEdit ( this, SVX_RES( ED_HEIGHT ) ), 157 aHeightDynBtn ( this, SVX_RES( CB_HEIGHT_DYN ) ), 158 aBspWin ( this, SVX_RES( WN_BSP ) ), 159 aBackgroundBtn ( this, SVX_RES( BTN_EXTRAS ) ), 160 161 nId ( nSetId ), 162 pBBSet ( NULL ), 163 bDisableQueryBox ( sal_False ), 164 bEnableBackgroundSelector ( sal_True ) 165 166 { 167 InitHandler(); 168 aBspWin.EnableRTL( sal_False ); 169 170 // diese Page braucht ExchangeSupport 171 SetExchangeSupport(); 172 173 FreeResource(); 174 175 // Metrik einstellen 176 FieldUnit eFUnit = GetModuleFieldUnit( rAttr ); 177 SetFieldUnit( aDistEdit, eFUnit ); 178 SetFieldUnit( aHeightEdit, eFUnit ); 179 SetFieldUnit( aLMEdit, eFUnit ); 180 SetFieldUnit( aRMEdit, eFUnit ); 181 182 aTurnOnBox.SetAccessibleRelationMemberOf( &aFrm ); 183 aCntSharedBox.SetAccessibleRelationMemberOf( &aFrm ); 184 aLMLbl.SetAccessibleRelationMemberOf( &aFrm ); 185 aLMEdit.SetAccessibleRelationMemberOf( &aFrm ); 186 aRMLbl.SetAccessibleRelationMemberOf( &aFrm ); 187 aRMEdit.SetAccessibleRelationMemberOf( &aFrm ); 188 aDistFT.SetAccessibleRelationMemberOf( &aFrm ); 189 aDistEdit.SetAccessibleRelationMemberOf( &aFrm ); 190 aDynSpacingCB.SetAccessibleRelationMemberOf( &aFrm ); 191 aHeightFT.SetAccessibleRelationMemberOf( &aFrm ); 192 aHeightEdit.SetAccessibleRelationMemberOf( &aFrm ); 193 aHeightDynBtn.SetAccessibleRelationMemberOf( &aFrm ); 194 aBackgroundBtn.SetAccessibleRelationMemberOf(&aFrm); 195 } 196 197 // ----------------------------------------------------------------------- 198 199 SvxHFPage::~SvxHFPage() 200 { 201 delete pBBSet; 202 } 203 204 // ----------------------------------------------------------------------- 205 206 sal_Bool SvxHFPage::FillItemSet( SfxItemSet& rSet ) 207 { 208 const sal_uInt16 nWSize = GetWhich( SID_ATTR_PAGE_SIZE ); 209 const sal_uInt16 nWLRSpace = GetWhich( SID_ATTR_LRSPACE ); 210 const sal_uInt16 nWULSpace = GetWhich( SID_ATTR_ULSPACE ); 211 const sal_uInt16 nWOn = GetWhich( SID_ATTR_PAGE_ON ); 212 const sal_uInt16 nWDynamic = GetWhich( SID_ATTR_PAGE_DYNAMIC ); 213 const sal_uInt16 nWDynSpacing = GetWhich( SID_ATTR_HDFT_DYNAMIC_SPACING ); 214 const sal_uInt16 nWShared = GetWhich( SID_ATTR_PAGE_SHARED ); 215 const sal_uInt16 nWBrush = GetWhich( SID_ATTR_BRUSH ); 216 const sal_uInt16 nWBox = GetWhich( SID_ATTR_BORDER_OUTER ); 217 const sal_uInt16 nWBoxInfo = GetWhich( SID_ATTR_BORDER_INNER ); 218 const sal_uInt16 nWShadow = GetWhich( SID_ATTR_BORDER_SHADOW ); 219 const sal_uInt16 aWhichTab[] = { nWSize, nWSize, 220 nWLRSpace, nWLRSpace, 221 nWULSpace, nWULSpace, 222 nWOn, nWOn, 223 nWDynamic, nWDynamic, 224 nWShared, nWShared, 225 nWBrush, nWBrush, 226 nWBoxInfo, nWBoxInfo, 227 nWBox, nWBox, 228 nWShadow, nWShadow, 229 nWDynSpacing, nWDynSpacing, 230 0 }; 231 const SfxItemSet& rOldSet = GetItemSet(); 232 SfxItemPool* pPool = rOldSet.GetPool(); 233 DBG_ASSERT( pPool, "no pool :-(" ); 234 SfxMapUnit eUnit = pPool->GetMetric( nWSize ); 235 SfxItemSet aSet ( *pPool, aWhichTab ); 236 237 //-------------------------------------------------------------------- 238 239 aSet.Put( SfxBoolItem( nWOn, aTurnOnBox.IsChecked() ) ); 240 aSet.Put( SfxBoolItem( nWDynamic, aHeightDynBtn.IsChecked() ) ); 241 aSet.Put( SfxBoolItem( nWShared, aCntSharedBox.IsChecked() ) ); 242 if(aDynSpacingCB.IsVisible() && SFX_WHICH_MAX > nWDynSpacing) 243 { 244 SfxBoolItem* pBoolItem = (SfxBoolItem*)pPool->GetDefaultItem(nWDynSpacing).Clone(); 245 pBoolItem->SetValue(aDynSpacingCB.IsChecked()); 246 aSet.Put(*pBoolItem); 247 delete pBoolItem; 248 } 249 250 // Groesse 251 SvxSizeItem aSizeItem( (const SvxSizeItem&)rOldSet.Get( nWSize ) ); 252 Size aSize( aSizeItem.GetSize() ); 253 long nDist = GetCoreValue( aDistEdit, eUnit ); 254 long nH = GetCoreValue( aHeightEdit, eUnit ); 255 256 // fixe Hoehe? 257 // if ( !aHeightDynBtn.IsChecked() ) 258 nH += nDist; // dann Abstand dazu addieren 259 aSize.Height() = nH; 260 aSizeItem.SetSize( aSize ); 261 aSet.Put( aSizeItem ); 262 263 // Raender 264 SvxLRSpaceItem aLR( nWLRSpace ); 265 aLR.SetLeft( (sal_uInt16)GetCoreValue( aLMEdit, eUnit ) ); 266 aLR.SetRight( (sal_uInt16)GetCoreValue( aRMEdit, eUnit ) ); 267 aSet.Put( aLR ); 268 269 SvxULSpaceItem aUL( nWULSpace ); 270 if ( nId == SID_ATTR_PAGE_HEADERSET ) 271 aUL.SetLower( (sal_uInt16)nDist ); 272 else 273 aUL.SetUpper( (sal_uInt16)nDist ); 274 aSet.Put( aUL ); 275 276 // Hintergrund und Umrandung? 277 if ( pBBSet ) 278 aSet.Put( *pBBSet ); 279 else 280 { 281 const SfxItemSet* _pSet; 282 const SfxPoolItem* pItem; 283 284 if ( SFX_ITEM_SET == 285 GetItemSet().GetItemState( GetWhich( nId ), sal_False, &pItem ) ) 286 { 287 _pSet = &( (SvxSetItem*)pItem )->GetItemSet(); 288 289 if ( _pSet->GetItemState( nWBrush ) == SFX_ITEM_SET ) 290 aSet.Put( (const SvxBrushItem&)_pSet->Get( nWBrush ) ); 291 if ( _pSet->GetItemState( nWBoxInfo ) == SFX_ITEM_SET ) 292 aSet.Put( (const SvxBoxInfoItem&)_pSet->Get( nWBoxInfo ) ); 293 if ( _pSet->GetItemState( nWBox ) == SFX_ITEM_SET ) 294 aSet.Put( (const SvxBoxItem&)_pSet->Get( nWBox ) ); 295 if ( _pSet->GetItemState( nWShadow ) == SFX_ITEM_SET ) 296 aSet.Put( (const SvxShadowItem&)_pSet->Get( nWShadow ) ); 297 } 298 } 299 300 // Das SetItem wegschreiben 301 SvxSetItem aSetItem( GetWhich( nId ), aSet ); 302 rSet.Put( aSetItem ); 303 304 return sal_True; 305 } 306 307 // ----------------------------------------------------------------------- 308 void SvxHFPage::Reset( const SfxItemSet& rSet ) 309 { 310 ActivatePage( rSet ); 311 ResetBackground_Impl( rSet ); 312 313 SfxItemPool* pPool = GetItemSet().GetPool(); 314 DBG_ASSERT( pPool, "Wo ist der Pool" ); 315 SfxMapUnit eUnit = pPool->GetMetric( GetWhich( SID_ATTR_PAGE_SIZE ) ); 316 317 // Kopf-/Fusszeilen-Attribute auswerten 318 // 319 const SvxSetItem* pSetItem = 0; 320 321 if ( SFX_ITEM_SET == rSet.GetItemState( GetWhich(nId), sal_False, 322 (const SfxPoolItem**)&pSetItem ) ) 323 { 324 const SfxItemSet& rHeaderSet = pSetItem->GetItemSet(); 325 const SfxBoolItem& rHeaderOn = 326 (const SfxBoolItem&)rHeaderSet.Get(GetWhich(SID_ATTR_PAGE_ON)); 327 328 aTurnOnBox.Check(rHeaderOn.GetValue()); 329 330 if ( rHeaderOn.GetValue() ) 331 { 332 const SfxBoolItem& rDynamic = 333 (const SfxBoolItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_DYNAMIC ) ); 334 const SfxBoolItem& rShared = 335 (const SfxBoolItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SHARED ) ); 336 const SvxSizeItem& rSize = 337 (const SvxSizeItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ); 338 const SvxULSpaceItem& rUL = 339 (const SvxULSpaceItem&)rHeaderSet.Get( GetWhich( SID_ATTR_ULSPACE ) ); 340 const SvxLRSpaceItem& rLR = 341 (const SvxLRSpaceItem&)rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ); 342 if(aDynSpacingCB.IsVisible()) 343 { 344 const SfxBoolItem& rDynSpacing = 345 (const SfxBoolItem&)rHeaderSet.Get(GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING)); 346 aDynSpacingCB.Check(rDynSpacing.GetValue()); 347 } 348 349 350 if ( nId == SID_ATTR_PAGE_HEADERSET ) 351 { // Kopfzeile 352 SetMetricValue( aDistEdit, rUL.GetLower(), eUnit ); 353 SetMetricValue( aHeightEdit, rSize.GetSize().Height() - rUL.GetLower(), eUnit ); 354 } 355 else 356 { // Fusszeile 357 SetMetricValue( aDistEdit, rUL.GetUpper(), eUnit ); 358 SetMetricValue( aHeightEdit, rSize.GetSize().Height() - rUL.GetUpper(), eUnit ); 359 } 360 361 aHeightDynBtn.Check(rDynamic.GetValue()); 362 SetMetricValue( aLMEdit, rLR.GetLeft(), eUnit ); 363 SetMetricValue( aRMEdit, rLR.GetRight(), eUnit ); 364 aCntSharedBox.Check(rShared.GetValue()); 365 } 366 else 367 pSetItem = 0; 368 } 369 else 370 { 371 // defaults for distance and height 372 long nDefaultDist = DEF_DIST_WRITER; 373 const SfxPoolItem* pExt1 = GetItem( rSet, SID_ATTR_PAGE_EXT1 ); 374 const SfxPoolItem* pExt2 = GetItem( rSet, SID_ATTR_PAGE_EXT2 ); 375 376 if ( pExt1 && pExt1->ISA(SfxBoolItem) && pExt2 && pExt2->ISA(SfxBoolItem) ) 377 nDefaultDist = DEF_DIST_CALC; 378 379 SetMetricValue( aDistEdit, nDefaultDist, SFX_MAPUNIT_100TH_MM ); 380 SetMetricValue( aHeightEdit, 500, SFX_MAPUNIT_100TH_MM ); 381 } 382 383 if ( !pSetItem ) 384 { 385 aTurnOnBox.Check( sal_False ); 386 aHeightDynBtn.Check( sal_True ); 387 aCntSharedBox.Check( sal_True ); 388 } 389 390 TurnOnHdl(0); 391 392 aTurnOnBox.SaveValue(); 393 aDistEdit.SaveValue(); 394 aHeightEdit.SaveValue(); 395 aHeightDynBtn.SaveValue(); 396 aLMEdit.SaveValue(); 397 aRMEdit.SaveValue(); 398 aCntSharedBox.SaveValue(); 399 RangeHdl( 0 ); 400 401 sal_uInt16 nHtmlMode = 0; 402 const SfxPoolItem* pItem = 0; 403 SfxObjectShell* pShell; 404 if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem) || 405 ( 0 != (pShell = SfxObjectShell::Current()) && 406 0 != (pItem = pShell->GetItem(SID_HTML_MODE)))) 407 { 408 nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue(); 409 if(nHtmlMode && HTMLMODE_ON) 410 { 411 aCntSharedBox.Hide(); 412 aBackgroundBtn.Hide(); 413 } 414 } 415 416 } 417 418 /*-------------------------------------------------------------------- 419 Beschreibung: Handler initialisieren 420 --------------------------------------------------------------------*/ 421 422 void SvxHFPage::InitHandler() 423 { 424 aTurnOnBox.SetClickHdl(LINK(this, SvxHFPage, TurnOnHdl)); 425 aDistEdit.SetModifyHdl(LINK(this, SvxHFPage, DistModify)); 426 aDistEdit.SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl)); 427 428 aHeightEdit.SetModifyHdl(LINK(this, SvxHFPage, HeightModify)); 429 aHeightEdit.SetLoseFocusHdl(LINK(this,SvxHFPage,RangeHdl)); 430 431 aLMEdit.SetModifyHdl(LINK(this, SvxHFPage, BorderModify)); 432 aLMEdit.SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl)); 433 aRMEdit.SetModifyHdl(LINK(this, SvxHFPage, BorderModify)); 434 aRMEdit.SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl)); 435 aBackgroundBtn.SetClickHdl(LINK(this,SvxHFPage, BackgroundHdl)); 436 } 437 438 /*-------------------------------------------------------------------- 439 Beschreibung: Ein/aus 440 --------------------------------------------------------------------*/ 441 442 IMPL_LINK( SvxHFPage, TurnOnHdl, CheckBox *, pBox ) 443 { 444 if ( aTurnOnBox.IsChecked() ) 445 { 446 aDistFT.Enable(); 447 aDistEdit.Enable(); 448 aDynSpacingCB.Enable(); 449 aHeightFT.Enable(); 450 aHeightEdit.Enable(); 451 aHeightDynBtn.Enable(); 452 aLMLbl.Enable(); 453 aLMEdit.Enable(); 454 aRMLbl.Enable(); 455 aRMEdit.Enable(); 456 457 sal_uInt16 nUsage = aBspWin.GetUsage(); 458 459 if( nUsage == SVX_PAGE_RIGHT || nUsage == SVX_PAGE_LEFT ) 460 aCntSharedBox.Disable(); 461 else 462 aCntSharedBox.Enable(); 463 aBackgroundBtn.Enable(); 464 } 465 else 466 { 467 sal_Bool bDelete = sal_True; 468 469 if ( !bDisableQueryBox && pBox && aTurnOnBox.GetSavedValue() == sal_True ) 470 bDelete = ( QueryBox( this, SVX_RES( RID_SVXQBX_DELETE_HEADFOOT ) ).Execute() == RET_YES ); 471 472 if ( bDelete ) 473 { 474 aDistFT.Disable(); 475 aDistEdit.Disable(); 476 aDynSpacingCB.Enable(sal_False); 477 aHeightFT.Disable(); 478 aHeightEdit.Disable(); 479 aHeightDynBtn.Disable(); 480 481 aLMLbl.Disable(); 482 aLMEdit.Disable(); 483 aRMLbl.Disable(); 484 aRMEdit.Disable(); 485 486 aCntSharedBox.Disable(); 487 aBackgroundBtn.Disable(); 488 } 489 else 490 aTurnOnBox.Check(); 491 } 492 UpdateExample(); 493 return 0; 494 } 495 496 /*-------------------------------------------------------------------- 497 Beschreibung: Abstand im Bsp Modifizieren 498 --------------------------------------------------------------------*/ 499 500 IMPL_LINK_INLINE_START( SvxHFPage, DistModify, MetricField *, EMPTYARG ) 501 { 502 UpdateExample(); 503 return 0; 504 } 505 IMPL_LINK_INLINE_END( SvxHFPage, DistModify, MetricField *, EMPTYARG ) 506 507 IMPL_LINK_INLINE_START( SvxHFPage, HeightModify, MetricField *, EMPTYARG ) 508 { 509 UpdateExample(); 510 511 return 0; 512 } 513 IMPL_LINK_INLINE_END( SvxHFPage, HeightModify, MetricField *, EMPTYARG ) 514 515 /*-------------------------------------------------------------------- 516 Beschreibung: Raender einstellen 517 --------------------------------------------------------------------*/ 518 519 IMPL_LINK_INLINE_START( SvxHFPage, BorderModify, MetricField *, EMPTYARG ) 520 { 521 UpdateExample(); 522 return 0; 523 } 524 IMPL_LINK_INLINE_END( SvxHFPage, BorderModify, MetricField *, EMPTYARG ) 525 526 /*-------------------------------------------------------------------- 527 Beschreibung: Hintergrund 528 --------------------------------------------------------------------*/ 529 530 IMPL_LINK( SvxHFPage, BackgroundHdl, Button *, EMPTYARG ) 531 { 532 if ( !pBBSet ) 533 { 534 // nur die n"otigen Items f"uer Umrandung und Hintergrund benutzen 535 sal_uInt16 nBrush = GetWhich( SID_ATTR_BRUSH ); 536 sal_uInt16 nOuter = GetWhich( SID_ATTR_BORDER_OUTER ); 537 sal_uInt16 nInner = GetWhich( SID_ATTR_BORDER_INNER, sal_False ); 538 sal_uInt16 nShadow = GetWhich( SID_ATTR_BORDER_SHADOW ); 539 540 // einen leeren Set erzeugenc 541 pBBSet = new SfxItemSet( *GetItemSet().GetPool(), nBrush, nBrush, 542 nOuter, nOuter, nInner, nInner, 543 nShadow, nShadow, 0 ); 544 const SfxPoolItem* pItem; 545 546 if ( SFX_ITEM_SET == 547 GetItemSet().GetItemState( GetWhich( nId ), sal_False, &pItem ) ) 548 // wenn es schon einen gesetzen Set gibt, dann diesen benutzen 549 pBBSet->Put( ( (SvxSetItem*)pItem)->GetItemSet() ); 550 551 if ( SFX_ITEM_SET == 552 GetItemSet().GetItemState( nInner, sal_False, &pItem ) ) 553 // das gesetze InfoItem wird immer ben"otigt 554 pBBSet->Put( *pItem ); 555 } 556 557 //CHINA001 SvxBorderBackgroundDlg* pDlg = 558 //CHINA001 new SvxBorderBackgroundDlg( this, *pBBSet, bEnableBackgroundSelector ); 559 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 560 if(pFact) 561 { 562 SfxAbstractTabDialog* pDlg = pFact->CreateSvxBorderBackgroundDlg( this, *pBBSet, bEnableBackgroundSelector ); 563 DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 564 if ( pDlg->Execute() == RET_OK && pDlg->GetOutputItemSet() ) 565 { 566 SfxItemIter aIter( *pDlg->GetOutputItemSet() ); 567 const SfxPoolItem* pItem = aIter.FirstItem(); 568 569 while ( pItem ) 570 { 571 if ( !IsInvalidItem( pItem ) ) 572 pBBSet->Put( *pItem ); 573 pItem = aIter.NextItem(); 574 } 575 576 //---------------------------------------------------------------- 577 578 sal_uInt16 nWhich = GetWhich( SID_ATTR_BRUSH ); 579 580 if ( pBBSet->GetItemState( nWhich ) == SFX_ITEM_SET ) 581 { 582 const SvxBrushItem& rItem = (const SvxBrushItem&)pBBSet->Get( nWhich ); 583 if ( nId == SID_ATTR_PAGE_HEADERSET ) 584 aBspWin.SetHdColor( rItem.GetColor() ); 585 else 586 aBspWin.SetFtColor( rItem.GetColor() ); 587 } 588 589 //---------------------------------------------------------------- 590 591 nWhich = GetWhich( SID_ATTR_BORDER_OUTER ); 592 593 if ( pBBSet->GetItemState( nWhich ) == SFX_ITEM_SET ) 594 { 595 const SvxBoxItem& rItem = (const SvxBoxItem&)pBBSet->Get( nWhich ); 596 597 if ( nId == SID_ATTR_PAGE_HEADERSET ) 598 aBspWin.SetHdBorder( rItem ); 599 else 600 aBspWin.SetFtBorder( rItem ); 601 } 602 603 UpdateExample(); 604 } 605 delete pDlg; 606 } 607 return 0; 608 } 609 610 /*-------------------------------------------------------------------- 611 Beschreibung: Bsp 612 --------------------------------------------------------------------*/ 613 614 void SvxHFPage::UpdateExample() 615 { 616 if ( nId == SID_ATTR_PAGE_HEADERSET ) 617 { 618 aBspWin.SetHeader( aTurnOnBox.IsChecked() ); 619 aBspWin.SetHdHeight( GetCoreValue( aHeightEdit, SFX_MAPUNIT_TWIP ) ); 620 aBspWin.SetHdDist( GetCoreValue( aDistEdit, SFX_MAPUNIT_TWIP ) ); 621 aBspWin.SetHdLeft( GetCoreValue( aLMEdit, SFX_MAPUNIT_TWIP ) ); 622 aBspWin.SetHdRight( GetCoreValue( aRMEdit, SFX_MAPUNIT_TWIP ) ); 623 } 624 else 625 { 626 aBspWin.SetFooter( aTurnOnBox.IsChecked() ); 627 aBspWin.SetFtHeight( GetCoreValue( aHeightEdit, SFX_MAPUNIT_TWIP ) ); 628 aBspWin.SetFtDist( GetCoreValue( aDistEdit, SFX_MAPUNIT_TWIP ) ); 629 aBspWin.SetFtLeft( GetCoreValue( aLMEdit, SFX_MAPUNIT_TWIP ) ); 630 aBspWin.SetFtRight( GetCoreValue( aRMEdit, SFX_MAPUNIT_TWIP ) ); 631 } 632 aBspWin.Invalidate(); 633 } 634 635 /*-------------------------------------------------------------------- 636 Beschreibung: Hintergrund im Beispiel setzen 637 --------------------------------------------------------------------*/ 638 639 void SvxHFPage::ResetBackground_Impl( const SfxItemSet& rSet ) 640 { 641 sal_uInt16 nWhich = GetWhich( SID_ATTR_PAGE_HEADERSET ); 642 643 if ( rSet.GetItemState( nWhich, sal_False ) == SFX_ITEM_SET ) 644 { 645 const SvxSetItem& rSetItem = 646 (const SvxSetItem&)rSet.Get( nWhich, sal_False ); 647 const SfxItemSet& rTmpSet = rSetItem.GetItemSet(); 648 const SfxBoolItem& rOn = 649 (const SfxBoolItem&)rTmpSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ); 650 651 if ( rOn.GetValue() ) 652 { 653 nWhich = GetWhich( SID_ATTR_BRUSH ); 654 655 if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET ) 656 { 657 const SvxBrushItem& rItem = (const SvxBrushItem&)rTmpSet.Get( nWhich ); 658 aBspWin.SetHdColor( rItem.GetColor() ); 659 } 660 nWhich = GetWhich( SID_ATTR_BORDER_OUTER ); 661 662 if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET ) 663 { 664 const SvxBoxItem& rItem = 665 (const SvxBoxItem&)rTmpSet.Get( nWhich ); 666 aBspWin.SetHdBorder( rItem ); 667 } 668 } 669 } 670 671 nWhich = GetWhich( SID_ATTR_PAGE_FOOTERSET ); 672 673 if ( rSet.GetItemState( nWhich, sal_False ) == SFX_ITEM_SET ) 674 { 675 const SvxSetItem& rSetItem = 676 (const SvxSetItem&)rSet.Get( nWhich, sal_False ); 677 const SfxItemSet& rTmpSet = rSetItem.GetItemSet(); 678 const SfxBoolItem& rOn = 679 (const SfxBoolItem&)rTmpSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ); 680 681 if ( rOn.GetValue() ) 682 { 683 nWhich = GetWhich( SID_ATTR_BRUSH ); 684 685 if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET ) 686 { 687 const SvxBrushItem& rItem = (const SvxBrushItem&)rTmpSet.Get( nWhich ); 688 aBspWin.SetFtColor( rItem.GetColor() ); 689 } 690 nWhich = GetWhich( SID_ATTR_BORDER_OUTER ); 691 692 if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET ) 693 { 694 const SvxBoxItem& rItem = 695 (const SvxBoxItem&)rTmpSet.Get( nWhich ); 696 aBspWin.SetFtBorder( rItem ); 697 } 698 } 699 } 700 nWhich = GetWhich( SID_ATTR_BRUSH ); 701 702 if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE ) 703 { 704 const SvxBrushItem& rItem = (const SvxBrushItem&)rSet.Get( nWhich ); 705 aBspWin.SetColor( rItem.GetColor() ); 706 const Graphic* pGrf = rItem.GetGraphic(); 707 708 if ( pGrf ) 709 { 710 Bitmap aBitmap = pGrf->GetBitmap(); 711 aBspWin.SetBitmap( &aBitmap ); 712 } 713 else 714 aBspWin.SetBitmap( NULL ); 715 } 716 nWhich = GetWhich( SID_ATTR_BORDER_OUTER ); 717 718 if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE ) 719 { 720 const SvxBoxItem& rItem = (const SvxBoxItem&)rSet.Get( nWhich ); 721 aBspWin.SetBorder( rItem ); 722 } 723 } 724 725 /*-------------------------------------------------------------------- 726 Beschreibung: 727 --------------------------------------------------------------------*/ 728 729 void SvxHFPage::ActivatePage( const SfxItemSet& rSet ) 730 { 731 const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_LRSPACE ); 732 733 if ( pItem ) 734 { 735 // linken und rechten Rand einstellen 736 const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)*pItem; 737 738 aBspWin.SetLeft( rLRSpace.GetLeft() ); 739 aBspWin.SetRight( rLRSpace.GetRight() ); 740 } 741 else 742 { 743 aBspWin.SetLeft( 0 ); 744 aBspWin.SetRight( 0 ); 745 } 746 747 pItem = GetItem( rSet, SID_ATTR_ULSPACE ); 748 749 if ( pItem ) 750 { 751 // oberen und unteren Rand einstellen 752 const SvxULSpaceItem& rULSpace = (const SvxULSpaceItem&)*pItem; 753 754 aBspWin.SetTop( rULSpace.GetUpper() ); 755 aBspWin.SetBottom( rULSpace.GetLower() ); 756 } 757 else 758 { 759 aBspWin.SetTop( 0 ); 760 aBspWin.SetBottom( 0 ); 761 } 762 763 sal_uInt16 nUsage = SVX_PAGE_ALL; 764 pItem = GetItem( rSet, SID_ATTR_PAGE ); 765 766 if ( pItem ) 767 nUsage = ( (const SvxPageItem*)pItem )->GetPageUsage(); 768 769 aBspWin.SetUsage( nUsage ); 770 771 if ( SVX_PAGE_RIGHT == nUsage || SVX_PAGE_LEFT == nUsage ) 772 aCntSharedBox.Disable(); 773 else 774 aCntSharedBox.Enable(); 775 pItem = GetItem( rSet, SID_ATTR_PAGE_SIZE ); 776 777 if ( pItem ) 778 { 779 // Orientation und Size aus dem PageItem 780 const SvxSizeItem& rSize = (const SvxSizeItem&)*pItem; 781 // die Groesse ist ggf. schon geswappt (Querformat) 782 aBspWin.SetSize( rSize.GetSize() ); 783 } 784 785 // Kopfzeilen-Attribute auswerten 786 const SvxSetItem* pSetItem = 0; 787 788 if ( SFX_ITEM_SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_HEADERSET ), 789 sal_False, 790 (const SfxPoolItem**)&pSetItem ) ) 791 { 792 const SfxItemSet& rHeaderSet = pSetItem->GetItemSet(); 793 const SfxBoolItem& rHeaderOn = 794 (const SfxBoolItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ); 795 796 if ( rHeaderOn.GetValue() ) 797 { 798 const SvxSizeItem& rSize = (const SvxSizeItem&) 799 rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ); 800 const SvxULSpaceItem& rUL = (const SvxULSpaceItem&) 801 rHeaderSet.Get( GetWhich(SID_ATTR_ULSPACE ) ); 802 const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&) 803 rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ); 804 long nDist = rUL.GetLower(); 805 806 aBspWin.SetHdHeight( rSize.GetSize().Height() - nDist ); 807 aBspWin.SetHdDist( nDist ); 808 aBspWin.SetHdLeft( rLR.GetLeft() ); 809 aBspWin.SetHdRight( rLR.GetRight() ); 810 aBspWin.SetHeader( sal_True ); 811 } 812 else 813 pSetItem = 0; 814 } 815 816 if ( !pSetItem ) 817 { 818 aBspWin.SetHeader( sal_False ); 819 820 if ( SID_ATTR_PAGE_HEADERSET == nId ) 821 aCntSharedBox.Disable(); 822 } 823 pSetItem = 0; 824 825 if ( SFX_ITEM_SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_FOOTERSET ), 826 sal_False, 827 (const SfxPoolItem**)&pSetItem ) ) 828 { 829 const SfxItemSet& rFooterSet = pSetItem->GetItemSet(); 830 const SfxBoolItem& rFooterOn = 831 (const SfxBoolItem&)rFooterSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ); 832 833 if ( rFooterOn.GetValue() ) 834 { 835 const SvxSizeItem& rSize = (const SvxSizeItem&) 836 rFooterSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ); 837 const SvxULSpaceItem& rUL = (const SvxULSpaceItem&) 838 rFooterSet.Get( GetWhich( SID_ATTR_ULSPACE ) ); 839 const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&) 840 rFooterSet.Get( GetWhich( SID_ATTR_LRSPACE ) ); 841 long nDist = rUL.GetUpper(); 842 843 aBspWin.SetFtHeight( rSize.GetSize().Height() - nDist ); 844 aBspWin.SetFtDist( nDist ); 845 aBspWin.SetFtLeft( rLR.GetLeft() ); 846 aBspWin.SetFtRight( rLR.GetRight() ); 847 aBspWin.SetFooter( sal_True ); 848 } 849 else 850 pSetItem = 0; 851 } 852 853 if ( !pSetItem ) 854 { 855 aBspWin.SetFooter( sal_False ); 856 857 if ( SID_ATTR_PAGE_FOOTERSET == nId ) 858 aCntSharedBox.Disable(); 859 } 860 861 pItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 ); 862 863 if ( pItem && pItem->ISA(SfxBoolItem) ) 864 { 865 aBspWin.SetTable( sal_True ); 866 aBspWin.SetHorz( ( (SfxBoolItem*)pItem )->GetValue() ); 867 } 868 869 pItem = GetItem( rSet, SID_ATTR_PAGE_EXT2 ); 870 871 if ( pItem && pItem->ISA(SfxBoolItem) ) 872 { 873 aBspWin.SetTable( sal_True ); 874 aBspWin.SetVert( ( (SfxBoolItem*)pItem )->GetValue() ); 875 } 876 ResetBackground_Impl( rSet ); 877 RangeHdl( 0 ); 878 } 879 880 /*-------------------------------------------------------------------- 881 Beschreibung: 882 --------------------------------------------------------------------*/ 883 884 int SvxHFPage::DeactivatePage( SfxItemSet* _pSet ) 885 { 886 if ( _pSet ) 887 FillItemSet( *_pSet ); 888 return LEAVE_PAGE; 889 } 890 891 /*-------------------------------------------------------------------- 892 Beschreibung: Berech 893 --------------------------------------------------------------------*/ 894 895 IMPL_LINK( SvxHFPage, RangeHdl, Edit *, EMPTYARG ) 896 { 897 long nHHeight = aBspWin.GetHdHeight(); 898 long nHDist = aBspWin.GetHdDist(); 899 900 long nFHeight = aBspWin.GetFtHeight(); 901 long nFDist = aBspWin.GetFtDist(); 902 903 long nHeight = Max( (long)MINBODY, 904 static_cast<long>(aHeightEdit.Denormalize( aHeightEdit.GetValue( FUNIT_TWIP ) ) ) ); 905 long nDist = aTurnOnBox.IsChecked() ? 906 static_cast<long>(aDistEdit.Denormalize( aDistEdit.GetValue( FUNIT_TWIP ) )) : 0; 907 908 long nMin; 909 long nMax; 910 911 if ( nId == SID_ATTR_PAGE_HEADERSET ) 912 { 913 nHHeight = nHeight; 914 nHDist = nDist; 915 } 916 else 917 { 918 nFHeight = nHeight; 919 nFDist = nDist; 920 } 921 922 // Aktuelle Werte der Seitenraender 923 long nBT = aBspWin.GetTop(); 924 long nBB = aBspWin.GetBottom(); 925 long nBL = aBspWin.GetLeft(); 926 long nBR = aBspWin.GetRight(); 927 928 long nH = aBspWin.GetSize().Height(); 929 long nW = aBspWin.GetSize().Width(); 930 931 // Grenzen 932 if ( nId == SID_ATTR_PAGE_HEADERSET ) 933 { 934 // Header 935 nMin = ( nH - nBB - nBT ) / 5; // 20% 936 nMax = Max( nH - nMin - nHDist - nFDist - nFHeight - nBB - nBT, 937 nMin ); 938 aHeightEdit.SetMax( aHeightEdit.Normalize( nMax ), FUNIT_TWIP ); 939 nMin = ( nH - nBB - nBT ) / 5; // 20% 940 nDist = Max( nH - nMin - nHHeight - nFDist - nFHeight - nBB - nBT, 941 long(0) ); 942 aDistEdit.SetMax( aDistEdit.Normalize( nDist ), FUNIT_TWIP ); 943 } 944 else 945 { 946 // Footer 947 nMin = ( nH - nBT - nBB ) / 5; // 20% 948 nMax = Max( nH - nMin - nFDist - nHDist - nHHeight - nBT - nBB, 949 nMin ); 950 aHeightEdit.SetMax( aHeightEdit.Normalize( nMax ), FUNIT_TWIP ); 951 nMin = ( nH - nBT - nBB ) / 5; // 20% 952 nDist = Max( nH - nMin - nFHeight - nHDist - nHHeight - nBT - nBB, 953 long(0) ); 954 aDistEdit.SetMax( aDistEdit.Normalize( nDist ), FUNIT_TWIP ); 955 } 956 957 // Einzuege beschraenken 958 nMax = nW - nBL - nBR - 959 static_cast<long>(aRMEdit.Denormalize( aRMEdit.GetValue( FUNIT_TWIP ) )) - MINBODY; 960 aLMEdit.SetMax( aLMEdit.Normalize( nMax ), FUNIT_TWIP ); 961 962 nMax = nW - nBL - nBR - 963 static_cast<long>(aLMEdit.Denormalize( aLMEdit.GetValue( FUNIT_TWIP ) )) - MINBODY; 964 aRMEdit.SetMax( aLMEdit.Normalize( nMax ), FUNIT_TWIP ); 965 return 0; 966 } 967 /* -----------------------------26.08.2002 12:49------------------------------ 968 969 ---------------------------------------------------------------------------*/ 970 void lcl_Move(Window& rWin, sal_Int32 nDiff) 971 { 972 Point aPos(rWin.GetPosPixel()); 973 aPos.Y() -= nDiff; 974 rWin.SetPosPixel(aPos); 975 } 976 void SvxHFPage::EnableDynamicSpacing() 977 { 978 aDynSpacingCB.Show(); 979 //move all following controls 980 Window* aMoveWindows[] = 981 { 982 &aHeightFT, 983 &aHeightEdit, 984 &aHeightDynBtn, 985 &aBackgroundBtn, 986 0 987 }; 988 sal_Int32 nOffset = aTurnOnBox.GetPosPixel().Y() - aCntSharedBox.GetPosPixel().Y(); 989 sal_Int32 nIdx = 0; 990 while(aMoveWindows[nIdx]) 991 lcl_Move(*aMoveWindows[nIdx++], nOffset); 992 } 993 994