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 #if !TEST_LAYOUT 25 // MARKER(update_precomp.py): autogen include statement, do not remove 26 #include "precompiled_svx.hxx" 27 #endif /* !TEST_LAYOUT */ 28 29 #ifdef SVX_DLLIMPLEMENTATION 30 #undef SVX_DLLIMPLEMENTATION 31 #endif 32 33 // include --------------------------------------------------------------- 34 35 #if TEST_LAYOUT 36 #include <cstdio> 37 #endif /* TEST_LAYOUT */ 38 #include <tools/shl.hxx> 39 #include <svtools/itemset.hxx> 40 #include <svtools/itempool.hxx> 41 #include <sfx2/objsh.hxx> 42 #include <vcl/msgbox.hxx> 43 44 #define _SVX_ZOOM_CXX 45 46 #include <svx/dialogs.hrc> 47 #if !TEST_LAYOUT 48 #include "zoom.hrc" 49 #endif /* !TEST_LAYOUT */ 50 51 #include "zoom.hxx" 52 #if TEST_LAYOUT 53 #define SVX_ZOOM_OPTIMAL "Zoom optimal" 54 #define SVX_ZOOM_PAGEWIDTH "Zoom page width" 55 #define SVX_ZOOM_WHOLEPAGE "Zoom whole page" 56 struct SvxZoomItem 57 { 58 void SetType( char const* s ) 59 { 60 fputs( s, stderr ); 61 } 62 63 void SetValue( int n ) 64 { 65 fprintf( stderr, "Zoom factor: %d\n", int( n ) ); 66 } 67 }; 68 #define SfxPoolItem LAYOUT_SfxPoolItem 69 class LAYOUT_SfxPoolItem 70 { 71 }; 72 struct SvxViewLayoutItem : public LAYOUT_SfxPoolItem 73 { 74 bool IsBookMode() 75 { 76 return false; 77 } 78 USHORT GetValue() 79 { 80 return 0; 81 } 82 83 void SetValue( int n ) 84 { 85 fprintf( stderr, "Zoom factor: %d\n", int( n ) ); 86 } 87 void SetBookMode( bool ) 88 { 89 } 90 #if 0 // needed for real SfxPoolItem 91 int operator==( const SfxPoolItem& ) const 92 { 93 return 0; 94 } 95 SfxPoolItem* Clone( SfxItemPool* ) const 96 { 97 return 0; 98 } 99 #endif 100 }; 101 #else /* !TEST_LAYOUT */ 102 #include <svx/zoomitem.hxx> 103 #include <svx/viewlayoutitem.hxx> 104 #include <svx/dialmgr.hxx> 105 #endif /* !TEST_LAYOUT */ 106 #include "zoom_def.hxx" 107 108 #include <layout/layout-pre.hxx> 109 110 #if ENABLE_LAYOUT 111 #undef SVX_RES 112 #define SVX_RES(x) #x 113 #undef SfxModalDialog 114 #define SfxModalDialog( parent, id ) Dialog( parent, "zoom.xml", id ) 115 #endif /* ENABLE_LAYOUT */ 116 117 // static ---------------------------------------------------------------- 118 119 static USHORT pRanges[] = 120 { 121 SID_ATTR_ZOOM, 122 SID_ATTR_ZOOM, 123 0 124 }; 125 126 #define SPECIAL_FACTOR ((USHORT)0xFFFF) 127 128 // class SvxZoomDialog --------------------------------------------------- 129 130 USHORT SvxZoomDialog::GetFactor() const 131 { 132 if ( a100Btn.IsChecked() ) 133 return 100; 134 if ( aUserBtn.IsChecked() ) 135 return (USHORT)aUserEdit.GetValue(); 136 else 137 return SPECIAL_FACTOR; 138 } 139 140 // ----------------------------------------------------------------------- 141 142 void SvxZoomDialog::SetFactor( USHORT nNewFactor, USHORT nBtnId ) 143 { 144 #if TEST_LAYOUT 145 printf ("\t\t set factor %d\n", (int)nNewFactor); 146 #endif /* !TEST_LAYOUT */ 147 aUserEdit.Disable(); 148 149 if ( !nBtnId ) 150 { 151 if ( nNewFactor == 100 ) 152 { 153 a100Btn.Check(); 154 a100Btn.GrabFocus(); 155 } 156 else 157 { 158 aUserBtn.Check(); 159 aUserEdit.Enable(); 160 aUserEdit.SetValue( (long)nNewFactor ); 161 aUserEdit.GrabFocus(); 162 } 163 } 164 else 165 { 166 aUserEdit.SetValue( (long)nNewFactor ); 167 168 if ( ZOOMBTN_OPTIMAL == nBtnId ) 169 { 170 aOptimalBtn.Check(); 171 aOptimalBtn.GrabFocus(); 172 } 173 else if ( ZOOMBTN_PAGEWIDTH == nBtnId ) 174 { 175 aPageWidthBtn.Check(); 176 aPageWidthBtn.GrabFocus(); 177 } 178 else if ( ZOOMBTN_WHOLEPAGE == nBtnId ) 179 { 180 aWholePageBtn.Check(); 181 aWholePageBtn.GrabFocus(); 182 } 183 } 184 } 185 186 // ----------------------------------------------------------------------- 187 188 void SvxZoomDialog::SetButtonText( USHORT nBtnId, const String& rNewTxt ) 189 { 190 switch ( nBtnId ) 191 { 192 case ZOOMBTN_OPTIMAL: // Optimal-Button 193 aOptimalBtn.SetText( rNewTxt ); 194 break; 195 196 case ZOOMBTN_PAGEWIDTH: // Seitenbreite-Button 197 aPageWidthBtn.SetText( rNewTxt ); 198 break; 199 200 case ZOOMBTN_WHOLEPAGE: // Ganze Seite-Button 201 aWholePageBtn.SetText( rNewTxt ); 202 break; 203 204 default: 205 DBG_ERROR( "wrong button number" ); 206 } 207 } 208 209 // ----------------------------------------------------------------------- 210 211 void SvxZoomDialog::HideButton( USHORT nBtnId ) 212 { 213 switch ( nBtnId ) 214 { 215 case ZOOMBTN_OPTIMAL: // Optimal-Button 216 aOptimalBtn.Hide(); 217 break; 218 219 case ZOOMBTN_PAGEWIDTH: // Seitenbreite-Button 220 aPageWidthBtn.Hide(); 221 break; 222 223 case ZOOMBTN_WHOLEPAGE: // Ganze Seite-Button 224 aWholePageBtn.Hide(); 225 break; 226 227 default: 228 DBG_ERROR( "Falsche Button-Nummer!!!" ); 229 } 230 } 231 232 // ----------------------------------------------------------------------- 233 234 void SvxZoomDialog::SetLimits( USHORT nMin, USHORT nMax ) 235 { 236 DBG_ASSERT( nMin < nMax, "invalid limits" ); 237 aUserEdit.SetMin( nMin ); 238 aUserEdit.SetFirst( nMin ); 239 aUserEdit.SetMax( nMax ); 240 aUserEdit.SetLast( nMax ); 241 } 242 243 // ----------------------------------------------------------------------- 244 245 void SvxZoomDialog::SetSpinSize( USHORT nNewSpin ) 246 { 247 aUserEdit.SetSpinSize( nNewSpin ); 248 } 249 250 // ----------------------------------------------------------------------- 251 252 #if TEST_LAYOUT 253 SvxZoomDialog::SvxZoomDialog( Window* pParent ) : 254 #else /* !TEST_LAYOUT */ 255 SvxZoomDialog::SvxZoomDialog( Window* pParent, const SfxItemSet& rCoreSet ) : 256 #endif /* !TEST_LAYOUT */ 257 258 SfxModalDialog( pParent, SVX_RES( RID_SVXDLG_ZOOM ) ), 259 260 aZoomFl ( this, SVX_RES( FL_ZOOM ) ), 261 aOptimalBtn ( this, SVX_RES( BTN_OPTIMAL ) ), 262 aWholePageBtn ( this, SVX_RES( BTN_WHOLE_PAGE ) ), 263 aPageWidthBtn ( this, SVX_RES( BTN_PAGE_WIDTH ) ), 264 a100Btn ( this, SVX_RES( BTN_100 ) ), 265 aUserBtn ( this, SVX_RES( BTN_USER ) ), 266 aUserEdit ( this, SVX_RES( ED_USER ) ), 267 268 aViewLayoutFl ( this, SVX_RES( FL_VIEWLAYOUT ) ), 269 aAutomaticBtn ( this, SVX_RES( BTN_AUTOMATIC ) ), 270 aSingleBtn ( this, SVX_RES( BTN_SINGLE ) ), 271 aColumnsBtn ( this, SVX_RES( BTN_COLUMNS ) ), 272 aColumnsEdit ( this, SVX_RES( ED_COLUMNS ) ), 273 aBookModeChk ( this, SVX_RES( CHK_BOOK ) ), 274 275 aBottomFl ( this, SVX_RES( FL_BOTTOM ) ), 276 aOKBtn ( this, SVX_RES( BTN_ZOOM_OK ) ), 277 aCancelBtn ( this, SVX_RES( BTN_ZOOM_CANCEL ) ), 278 aHelpBtn ( this, SVX_RES( BTN_ZOOM_HELP ) ), 279 280 #if !TEST_LAYOUT 281 rSet ( rCoreSet ), 282 #endif /* !TEST_LAYOUT */ 283 pOutSet ( NULL ), 284 bModified ( FALSE ) 285 286 { 287 #if ENABLE_LAYOUT 288 SetHelpId (SID_ATTR_ZOOM); 289 #endif /* ENABLE_LAYOUT */ 290 Link aLink = LINK( this, SvxZoomDialog, UserHdl ); 291 a100Btn.SetClickHdl( aLink ); 292 aOptimalBtn.SetClickHdl( aLink ); 293 aPageWidthBtn.SetClickHdl( aLink ); 294 aWholePageBtn.SetClickHdl( aLink ); 295 aUserBtn.SetClickHdl( aLink ); 296 297 Link aViewLayoutLink = LINK( this, SvxZoomDialog, ViewLayoutUserHdl ); 298 aAutomaticBtn.SetClickHdl( aViewLayoutLink ); 299 aSingleBtn.SetClickHdl( aViewLayoutLink ); 300 aColumnsBtn.SetClickHdl( aViewLayoutLink ); 301 302 Link aViewLayoutSpinLink = LINK( this, SvxZoomDialog, ViewLayoutSpinHdl ); 303 aColumnsEdit.SetModifyHdl( aViewLayoutSpinLink ); 304 305 Link aViewLayoutCheckLink = LINK( this, SvxZoomDialog, ViewLayoutCheckHdl ); 306 aBookModeChk.SetClickHdl( aViewLayoutCheckLink ); 307 308 aOKBtn.SetClickHdl( LINK( this, SvxZoomDialog, OKHdl ) ); 309 aUserEdit.SetModifyHdl( LINK( this, SvxZoomDialog, SpinHdl ) ); 310 311 // Default-Werte 312 USHORT nValue = 100; 313 USHORT nMin = 10; 314 USHORT nMax = 1000; 315 316 #if !TEST_LAYOUT 317 // ggf. erst den alten Wert besorgen 318 const SfxUInt16Item* pOldUserItem = 0; 319 SfxObjectShell* pSh = SfxObjectShell::Current(); 320 321 if ( pSh ) 322 pOldUserItem = (const SfxUInt16Item*)pSh->GetItem( SID_ATTR_ZOOM_USER ); 323 324 if ( pOldUserItem ) 325 nValue = pOldUserItem->GetValue(); 326 327 // UserEdit initialisieren 328 if ( nMin > nValue ) 329 nMin = nValue; 330 if ( nMax < nValue ) 331 nMax = nValue; 332 #endif /* !TEST_LAYOUT */ 333 aUserEdit.SetMin( nMin ); 334 aUserEdit.SetFirst( nMin ); 335 aUserEdit.SetMax( nMax ); 336 aUserEdit.SetLast( nMax ); 337 aUserEdit.SetValue( nValue ); 338 339 #if TEST_LAYOUT 340 USHORT nZoom = 100; 341 SetFactor( nZoom ); 342 #else /* !TEST_LAYOUT */ 343 const SfxPoolItem& rItem = rSet.Get( rSet.GetPool()->GetWhich( SID_ATTR_ZOOM ) ); 344 345 if ( rItem.ISA(SvxZoomItem) ) 346 { 347 const SvxZoomItem& rZoomItem = (const SvxZoomItem&)rItem; 348 const USHORT nZoom = rZoomItem.GetValue(); 349 const SvxZoomType eType = rZoomItem.GetType(); 350 const USHORT nValSet = rZoomItem.GetValueSet(); 351 USHORT nBtnId = 0; 352 353 switch ( eType ) 354 { 355 case SVX_ZOOM_OPTIMAL: 356 nBtnId = ZOOMBTN_OPTIMAL; 357 break; 358 case SVX_ZOOM_PAGEWIDTH: 359 nBtnId = ZOOMBTN_PAGEWIDTH; 360 break; 361 case SVX_ZOOM_WHOLEPAGE: 362 nBtnId = ZOOMBTN_WHOLEPAGE; 363 break; 364 case SVX_ZOOM_PERCENT: 365 break; 366 case SVX_ZOOM_PAGEWIDTH_NOBORDER: 367 break; 368 } 369 370 if ( !(SVX_ZOOM_ENABLE_100 & nValSet) ) 371 a100Btn.Disable(); 372 if ( !(SVX_ZOOM_ENABLE_OPTIMAL & nValSet) ) 373 aOptimalBtn.Disable(); 374 if ( !(SVX_ZOOM_ENABLE_PAGEWIDTH & nValSet) ) 375 aPageWidthBtn.Disable(); 376 if ( !(SVX_ZOOM_ENABLE_WHOLEPAGE & nValSet) ) 377 aWholePageBtn.Disable(); 378 SetFactor( nZoom, nBtnId ); 379 } 380 else 381 { 382 const USHORT nZoom = ( (const SfxUInt16Item&)rItem ).GetValue(); 383 SetFactor( nZoom ); 384 } 385 386 const SfxPoolItem* pViewLayoutItem = 0; 387 if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_VIEWLAYOUT, FALSE, &pViewLayoutItem ) ) 388 { 389 const USHORT nColumns = static_cast<const SvxViewLayoutItem*>(pViewLayoutItem)->GetValue(); 390 const bool bBookMode = static_cast<const SvxViewLayoutItem*>(pViewLayoutItem)->IsBookMode(); 391 392 if ( 0 == nColumns ) 393 { 394 aAutomaticBtn.Check(); 395 aColumnsEdit.SetValue( 2 ); 396 aColumnsEdit.Disable(); 397 aBookModeChk.Disable(); 398 } 399 else if ( 1 == nColumns) 400 { 401 aSingleBtn.Check(); 402 aColumnsEdit.SetValue( 2 ); 403 aColumnsEdit.Disable(); 404 aBookModeChk.Disable(); 405 } 406 else 407 { 408 aColumnsBtn.Check(); 409 if ( !bBookMode ) 410 { 411 aColumnsEdit.SetValue( nColumns ); 412 if ( 0 != nColumns % 2 ) 413 aBookModeChk.Disable(); 414 } 415 else 416 { 417 aColumnsEdit.SetValue( nColumns ); 418 aBookModeChk.Check(); 419 } 420 } 421 } 422 else 423 { 424 // hide view layout related controls: 425 aViewLayoutFl.Disable(); 426 aAutomaticBtn.Disable(); 427 aSingleBtn.Disable(); 428 aColumnsBtn.Disable(); 429 aColumnsEdit.Disable(); 430 aBookModeChk.Disable(); 431 } 432 #endif /* !TEST_LAYOUT */ 433 434 FreeResource(); 435 } 436 437 // ----------------------------------------------------------------------- 438 439 SvxZoomDialog::~SvxZoomDialog() 440 { 441 delete pOutSet; 442 pOutSet = 0; 443 } 444 445 // ----------------------------------------------------------------------- 446 447 USHORT* SvxZoomDialog::GetRanges() 448 { 449 return pRanges; 450 } 451 452 // ----------------------------------------------------------------------- 453 454 IMPL_LINK( SvxZoomDialog, UserHdl, RadioButton *, pBtn ) 455 { 456 #if TEST_LAYOUT 457 fprintf( stderr, "SvxZoomDialog::UserHdl\n" ); 458 #endif /* TEST_LAYOUT */ 459 bModified |= TRUE; 460 461 if ( pBtn == &aUserBtn ) 462 { 463 aUserEdit.Enable(); 464 aUserEdit.GrabFocus(); 465 } 466 else 467 aUserEdit.Disable(); 468 return 0; 469 } 470 471 // ----------------------------------------------------------------------- 472 473 IMPL_LINK( SvxZoomDialog, SpinHdl, MetricField *, EMPTYARG ) 474 { 475 if ( !aUserBtn.IsChecked() ) 476 return 0; 477 bModified |= TRUE; 478 return 0; 479 } 480 481 // ----------------------------------------------------------------------- 482 483 IMPL_LINK( SvxZoomDialog, ViewLayoutUserHdl, RadioButton *, pBtn ) 484 { 485 bModified |= TRUE; 486 487 if ( pBtn == &aAutomaticBtn ) 488 { 489 aColumnsEdit.Disable(); 490 aBookModeChk.Disable(); 491 } 492 else if ( pBtn == &aSingleBtn ) 493 { 494 aColumnsEdit.Disable(); 495 aBookModeChk.Disable(); 496 } 497 else if ( pBtn == &aColumnsBtn ) 498 { 499 aColumnsEdit.Enable(); 500 aColumnsEdit.GrabFocus(); 501 if ( 0 == aColumnsEdit.GetValue() % 2 ) 502 aBookModeChk.Enable(); 503 } 504 else 505 { 506 DBG_ERROR( "Wrong Button" ); 507 return 0; 508 } 509 510 return 0; 511 } 512 513 // ----------------------------------------------------------------------- 514 515 IMPL_LINK( SvxZoomDialog, ViewLayoutSpinHdl, MetricField *, pEdt ) 516 { 517 if ( pEdt == &aColumnsEdit && !aColumnsBtn.IsChecked() ) 518 return 0; 519 520 if ( 0 == aColumnsEdit.GetValue() % 2 ) 521 aBookModeChk.Enable(); 522 else 523 { 524 aBookModeChk.Check( sal_False ); 525 aBookModeChk.Disable(); 526 } 527 528 bModified |= TRUE; 529 530 return 0; 531 } 532 533 // ----------------------------------------------------------------------- 534 535 IMPL_LINK( SvxZoomDialog, ViewLayoutCheckHdl, CheckBox *, pChk ) 536 { 537 if ( pChk == &aBookModeChk && !aColumnsBtn.IsChecked() ) 538 return 0; 539 540 bModified |= TRUE; 541 542 return 0; 543 } 544 545 // ----------------------------------------------------------------------- 546 547 IMPL_LINK( SvxZoomDialog, OKHdl, Button *, pBtn ) 548 { 549 if ( bModified || &aOKBtn != pBtn ) 550 { 551 #if TEST_LAYOUT 552 SvxZoomItem aZoomItem; 553 SvxViewLayoutItem aViewLayoutItem; 554 #else /* !TEST_LAYOUT */ 555 SvxZoomItem aZoomItem( SVX_ZOOM_PERCENT, 0, rSet.GetPool()->GetWhich( SID_ATTR_ZOOM ) ); 556 SvxViewLayoutItem aViewLayoutItem( 0, false, rSet.GetPool()->GetWhich( SID_ATTR_VIEWLAYOUT ) ); 557 #endif /* !TEST_LAYOUT */ 558 559 if ( &aOKBtn == pBtn ) 560 { 561 USHORT nFactor = GetFactor(); 562 563 if ( SPECIAL_FACTOR == nFactor ) 564 { 565 if ( aOptimalBtn.IsChecked() ) 566 aZoomItem.SetType( SVX_ZOOM_OPTIMAL ); 567 else if ( aPageWidthBtn.IsChecked() ) 568 aZoomItem.SetType( SVX_ZOOM_PAGEWIDTH ); 569 else if ( aWholePageBtn.IsChecked() ) 570 aZoomItem.SetType( SVX_ZOOM_WHOLEPAGE ); 571 } 572 else 573 aZoomItem.SetValue( nFactor ); 574 575 if ( aAutomaticBtn.IsChecked() ) 576 { 577 aViewLayoutItem.SetValue( 0 ); 578 aViewLayoutItem.SetBookMode( false ); 579 } 580 if ( aSingleBtn.IsChecked() ) 581 { 582 aViewLayoutItem.SetValue( 1 ); 583 aViewLayoutItem.SetBookMode( false ); 584 } 585 else if ( aColumnsBtn.IsChecked() ) 586 { 587 aViewLayoutItem.SetValue( static_cast<USHORT>(aColumnsEdit.GetValue()) ); 588 aViewLayoutItem.SetBookMode( aBookModeChk.IsChecked() ); 589 } 590 } 591 else 592 { 593 DBG_ERROR( "Wrong Button" ); 594 return 0; 595 } 596 #if !TEST_LAYOUT 597 pOutSet = new SfxItemSet( rSet ); 598 pOutSet->Put( aZoomItem ); 599 600 // don't set attribute in case the whole viewlayout stuff is disabled: 601 if ( aViewLayoutFl.IsEnabled() ) 602 pOutSet->Put( aViewLayoutItem ); 603 604 // Wert aus dem UserEdit "uber den Dialog hinaus merken 605 SfxObjectShell* pSh = SfxObjectShell::Current(); 606 607 if ( pSh ) 608 pSh->PutItem( SfxUInt16Item( SID_ATTR_ZOOM_USER, 609 (UINT16)aUserEdit.GetValue() ) ); 610 #endif /* !TEST_LAYOUT */ 611 EndDialog( RET_OK ); 612 } 613 else 614 EndDialog( RET_CANCEL ); 615 return 0; 616 } 617 618 619