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 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_cui.hxx" 24 25 // include --------------------------------------------------------------- 26 27 #include <tools/shl.hxx> 28 #include <svl/itemset.hxx> 29 #include <svl/itempool.hxx> 30 #include <sfx2/objsh.hxx> 31 #include <vcl/msgbox.hxx> 32 33 #define _SVX_ZOOM_CXX 34 35 #include <cuires.hrc> 36 #include "zoom.hrc" 37 38 #include "zoom.hxx" 39 #include <svx/zoomitem.hxx> 40 #include <svx/viewlayoutitem.hxx> 41 #include <dialmgr.hxx> 42 #include <svx/zoom_def.hxx> 43 #include <svx/dialogs.hrc> // RID_SVXDLG_ZOOM 44 #include <layout/layout-pre.hxx> 45 46 #if ENABLE_LAYOUT 47 #undef CUI_RES 48 #define CUI_RES(x) #x 49 #undef SfxModalDialog 50 #define SfxModalDialog( parent, id ) Dialog( parent, "zoom.xml", id ) 51 #endif /* ENABLE_LAYOUT */ 52 53 // static ---------------------------------------------------------------- 54 55 #define SPECIAL_FACTOR ((sal_uInt16)0xFFFF) 56 57 // class SvxZoomDialog --------------------------------------------------- 58 59 sal_uInt16 SvxZoomDialog::GetFactor() const 60 { 61 if ( a100Btn.IsChecked() ) 62 return 100; 63 if ( aUserBtn.IsChecked() ) 64 return (sal_uInt16)aUserEdit.GetValue(); 65 else 66 return SPECIAL_FACTOR; 67 } 68 69 // ----------------------------------------------------------------------- 70 71 void SvxZoomDialog::SetFactor( sal_uInt16 nNewFactor, sal_uInt16 nBtnId ) 72 { 73 aUserEdit.Disable(); 74 75 if ( !nBtnId ) 76 { 77 if ( nNewFactor == 100 ) 78 { 79 a100Btn.Check(); 80 a100Btn.GrabFocus(); 81 } 82 else 83 { 84 aUserBtn.Check(); 85 aUserEdit.Enable(); 86 aUserEdit.SetValue( (long)nNewFactor ); 87 aUserEdit.GrabFocus(); 88 } 89 } 90 else 91 { 92 aUserEdit.SetValue( (long)nNewFactor ); 93 94 if ( ZOOMBTN_OPTIMAL == nBtnId ) 95 { 96 aOptimalBtn.Check(); 97 aOptimalBtn.GrabFocus(); 98 } 99 else if ( ZOOMBTN_PAGEWIDTH == nBtnId ) 100 { 101 aPageWidthBtn.Check(); 102 aPageWidthBtn.GrabFocus(); 103 } 104 else if ( ZOOMBTN_WHOLEPAGE == nBtnId ) 105 { 106 aWholePageBtn.Check(); 107 aWholePageBtn.GrabFocus(); 108 } 109 } 110 } 111 112 // ----------------------------------------------------------------------- 113 114 void SvxZoomDialog::HideButton( sal_uInt16 nBtnId ) 115 { 116 switch ( nBtnId ) 117 { 118 case ZOOMBTN_OPTIMAL: // Optimal button 119 aOptimalBtn.Hide(); 120 break; 121 122 case ZOOMBTN_PAGEWIDTH: // Page Width button 123 aPageWidthBtn.Hide(); 124 break; 125 126 case ZOOMBTN_WHOLEPAGE: // Entire Page button 127 aWholePageBtn.Hide(); 128 break; 129 130 default: 131 DBG_ERROR( "Wrong button number!" ); 132 } 133 } 134 135 // ----------------------------------------------------------------------- 136 137 void SvxZoomDialog::SetLimits( sal_uInt16 nMin, sal_uInt16 nMax ) 138 { 139 DBG_ASSERT( nMin < nMax, "invalid limits" ); 140 aUserEdit.SetMin( nMin ); 141 aUserEdit.SetFirst( nMin ); 142 aUserEdit.SetMax( nMax ); 143 aUserEdit.SetLast( nMax ); 144 } 145 146 // ----------------------------------------------------------------------- 147 148 SvxZoomDialog::SvxZoomDialog( Window* pParent, const SfxItemSet& rCoreSet ) : 149 150 SfxModalDialog( pParent, CUI_RES( RID_SVXDLG_ZOOM ) ), 151 152 aZoomFl ( this, CUI_RES( FL_ZOOM ) ), 153 aOptimalBtn ( this, CUI_RES( BTN_OPTIMAL ) ), 154 aWholePageBtn ( this, CUI_RES( BTN_WHOLE_PAGE ) ), 155 aPageWidthBtn ( this, CUI_RES( BTN_PAGE_WIDTH ) ), 156 a100Btn ( this, CUI_RES( BTN_100 ) ), 157 aUserBtn ( this, CUI_RES( BTN_USER ) ), 158 aUserEdit ( this, CUI_RES( ED_USER ) ), 159 160 aViewLayoutFl ( this, CUI_RES( FL_VIEWLAYOUT ) ), 161 aAutomaticBtn ( this, CUI_RES( BTN_AUTOMATIC ) ), 162 aSingleBtn ( this, CUI_RES( BTN_SINGLE ) ), 163 aColumnsBtn ( this, CUI_RES( BTN_COLUMNS ) ), 164 aColumnsEdit ( this, CUI_RES( ED_COLUMNS ) ), 165 aBookModeChk ( this, CUI_RES( CHK_BOOK ) ), 166 167 aBottomFl ( this, CUI_RES( FL_BOTTOM ) ), 168 aOKBtn ( this, CUI_RES( BTN_ZOOM_OK ) ), 169 aCancelBtn ( this, CUI_RES( BTN_ZOOM_CANCEL ) ), 170 aHelpBtn ( this, CUI_RES( BTN_ZOOM_HELP ) ), 171 172 rSet ( rCoreSet ), 173 pOutSet ( NULL ), 174 bModified ( sal_False ) 175 176 { 177 #if ENABLE_LAYOUT 178 SetHelpId (".uno:Zoom"); 179 #endif /* ENABLE_LAYOUT */ 180 Link aLink = LINK( this, SvxZoomDialog, UserHdl ); 181 a100Btn.SetClickHdl( aLink ); 182 aOptimalBtn.SetClickHdl( aLink ); 183 aPageWidthBtn.SetClickHdl( aLink ); 184 aWholePageBtn.SetClickHdl( aLink ); 185 aUserBtn.SetClickHdl( aLink ); 186 187 Link aViewLayoutLink = LINK( this, SvxZoomDialog, ViewLayoutUserHdl ); 188 aAutomaticBtn.SetClickHdl( aViewLayoutLink ); 189 aSingleBtn.SetClickHdl( aViewLayoutLink ); 190 aColumnsBtn.SetClickHdl( aViewLayoutLink ); 191 192 Link aViewLayoutSpinLink = LINK( this, SvxZoomDialog, ViewLayoutSpinHdl ); 193 aColumnsEdit.SetModifyHdl( aViewLayoutSpinLink ); 194 195 Link aViewLayoutCheckLink = LINK( this, SvxZoomDialog, ViewLayoutCheckHdl ); 196 aBookModeChk.SetClickHdl( aViewLayoutCheckLink ); 197 198 aOKBtn.SetClickHdl( LINK( this, SvxZoomDialog, OKHdl ) ); 199 aUserEdit.SetModifyHdl( LINK( this, SvxZoomDialog, SpinHdl ) ); 200 201 // Default values 202 sal_uInt16 nValue = 100; 203 sal_uInt16 nMin = 10; 204 sal_uInt16 nMax = 1000; 205 206 // ggf. erst den alten Wert besorgen 207 const SfxUInt16Item* pOldUserItem = 0; 208 SfxObjectShell* pSh = SfxObjectShell::Current(); 209 210 if ( pSh ) 211 pOldUserItem = (const SfxUInt16Item*)pSh->GetItem( SID_ATTR_ZOOM_USER ); 212 213 if ( pOldUserItem ) 214 nValue = pOldUserItem->GetValue(); 215 216 // initialize UserEdit 217 if ( nMin > nValue ) 218 nMin = nValue; 219 if ( nMax < nValue ) 220 nMax = nValue; 221 aUserEdit.SetMin( nMin ); 222 aUserEdit.SetFirst( nMin ); 223 aUserEdit.SetMax( nMax ); 224 aUserEdit.SetLast( nMax ); 225 aUserEdit.SetValue( nValue ); 226 227 aUserEdit.SetAccessibleRelationLabeledBy( &aUserBtn ); 228 aUserEdit.SetAccessibleName(aUserBtn.GetText()); 229 aColumnsEdit.SetAccessibleRelationLabeledBy(&aColumnsBtn); 230 aColumnsEdit.SetAccessibleName(aColumnsBtn.GetText()); 231 aColumnsEdit.SetAccessibleRelationMemberOf(&aColumnsBtn); 232 aBookModeChk.SetAccessibleRelationLabeledBy(&aColumnsBtn); 233 aBookModeChk.SetAccessibleRelationMemberOf(&aColumnsBtn); 234 235 const SfxPoolItem& rItem = rSet.Get( rSet.GetPool()->GetWhich( SID_ATTR_ZOOM ) ); 236 237 if ( rItem.ISA(SvxZoomItem) ) 238 { 239 const SvxZoomItem& rZoomItem = (const SvxZoomItem&)rItem; 240 const sal_uInt16 nZoom = rZoomItem.GetValue(); 241 const SvxZoomType eType = rZoomItem.GetType(); 242 const sal_uInt16 nValSet = rZoomItem.GetValueSet(); 243 sal_uInt16 nBtnId = 0; 244 245 switch ( eType ) 246 { 247 case SVX_ZOOM_OPTIMAL: 248 nBtnId = ZOOMBTN_OPTIMAL; 249 break; 250 case SVX_ZOOM_PAGEWIDTH: 251 nBtnId = ZOOMBTN_PAGEWIDTH; 252 break; 253 case SVX_ZOOM_WHOLEPAGE: 254 nBtnId = ZOOMBTN_WHOLEPAGE; 255 break; 256 case SVX_ZOOM_PERCENT: 257 break; 258 case SVX_ZOOM_PAGEWIDTH_NOBORDER: 259 break; 260 } 261 262 if ( !(SVX_ZOOM_ENABLE_100 & nValSet) ) 263 a100Btn.Disable(); 264 if ( !(SVX_ZOOM_ENABLE_OPTIMAL & nValSet) ) 265 aOptimalBtn.Disable(); 266 if ( !(SVX_ZOOM_ENABLE_PAGEWIDTH & nValSet) ) 267 aPageWidthBtn.Disable(); 268 if ( !(SVX_ZOOM_ENABLE_WHOLEPAGE & nValSet) ) 269 aWholePageBtn.Disable(); 270 SetFactor( nZoom, nBtnId ); 271 } 272 else 273 { 274 const sal_uInt16 nZoom = ( (const SfxUInt16Item&)rItem ).GetValue(); 275 SetFactor( nZoom ); 276 } 277 278 const SfxPoolItem* pViewLayoutItem = 0; 279 if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_VIEWLAYOUT, sal_False, &pViewLayoutItem ) ) 280 { 281 const sal_uInt16 nColumns = static_cast<const SvxViewLayoutItem*>(pViewLayoutItem)->GetValue(); 282 const bool bBookMode = static_cast<const SvxViewLayoutItem*>(pViewLayoutItem)->IsBookMode(); 283 284 if ( 0 == nColumns ) 285 { 286 aAutomaticBtn.Check(); 287 aColumnsEdit.SetValue( 2 ); 288 aColumnsEdit.Disable(); 289 aBookModeChk.Disable(); 290 } 291 else if ( 1 == nColumns) 292 { 293 aSingleBtn.Check(); 294 aColumnsEdit.SetValue( 2 ); 295 aColumnsEdit.Disable(); 296 aBookModeChk.Disable(); 297 } 298 else 299 { 300 aColumnsBtn.Check(); 301 if ( !bBookMode ) 302 { 303 aColumnsEdit.SetValue( nColumns ); 304 if ( 0 != nColumns % 2 ) 305 aBookModeChk.Disable(); 306 } 307 else 308 { 309 aColumnsEdit.SetValue( nColumns ); 310 aBookModeChk.Check(); 311 } 312 } 313 } 314 else 315 { 316 // hide view layout related controls: 317 aViewLayoutFl.Disable(); 318 aAutomaticBtn.Disable(); 319 aSingleBtn.Disable(); 320 aColumnsBtn.Disable(); 321 aColumnsEdit.Disable(); 322 aBookModeChk.Disable(); 323 } 324 325 FreeResource(); 326 } 327 328 // ----------------------------------------------------------------------- 329 330 SvxZoomDialog::~SvxZoomDialog() 331 { 332 delete pOutSet; 333 pOutSet = 0; 334 } 335 336 // ----------------------------------------------------------------------- 337 338 IMPL_LINK( SvxZoomDialog, UserHdl, RadioButton *, pBtn ) 339 { 340 bModified |= sal_True; 341 342 if ( pBtn == &aUserBtn ) 343 { 344 aUserEdit.Enable(); 345 aUserEdit.GrabFocus(); 346 } 347 else 348 aUserEdit.Disable(); 349 return 0; 350 } 351 352 // ----------------------------------------------------------------------- 353 354 IMPL_LINK( SvxZoomDialog, SpinHdl, MetricField *, EMPTYARG ) 355 { 356 if ( !aUserBtn.IsChecked() ) 357 return 0; 358 bModified |= sal_True; 359 return 0; 360 } 361 362 // ----------------------------------------------------------------------- 363 364 IMPL_LINK( SvxZoomDialog, ViewLayoutUserHdl, RadioButton *, pBtn ) 365 { 366 bModified |= sal_True; 367 368 if ( pBtn == &aAutomaticBtn ) 369 { 370 aColumnsEdit.Disable(); 371 aBookModeChk.Disable(); 372 } 373 else if ( pBtn == &aSingleBtn ) 374 { 375 aColumnsEdit.Disable(); 376 aBookModeChk.Disable(); 377 } 378 else if ( pBtn == &aColumnsBtn ) 379 { 380 aColumnsEdit.Enable(); 381 aColumnsEdit.GrabFocus(); 382 if ( 0 == aColumnsEdit.GetValue() % 2 ) 383 aBookModeChk.Enable(); 384 } 385 else 386 { 387 DBG_ERROR( "Wrong button" ); 388 return 0; 389 } 390 391 return 0; 392 } 393 394 // ----------------------------------------------------------------------- 395 396 IMPL_LINK( SvxZoomDialog, ViewLayoutSpinHdl, MetricField *, pEdt ) 397 { 398 if ( pEdt == &aColumnsEdit && !aColumnsBtn.IsChecked() ) 399 return 0; 400 401 if ( 0 == aColumnsEdit.GetValue() % 2 ) 402 aBookModeChk.Enable(); 403 else 404 { 405 aBookModeChk.Check( sal_False ); 406 aBookModeChk.Disable(); 407 } 408 409 bModified |= sal_True; 410 411 return 0; 412 } 413 414 // ----------------------------------------------------------------------- 415 416 IMPL_LINK( SvxZoomDialog, ViewLayoutCheckHdl, CheckBox *, pChk ) 417 { 418 if ( pChk == &aBookModeChk && !aColumnsBtn.IsChecked() ) 419 return 0; 420 421 bModified |= sal_True; 422 423 return 0; 424 } 425 426 // ----------------------------------------------------------------------- 427 428 IMPL_LINK( SvxZoomDialog, OKHdl, Button *, pBtn ) 429 { 430 if ( bModified || &aOKBtn != pBtn ) 431 { 432 SvxZoomItem aZoomItem( SVX_ZOOM_PERCENT, 0, rSet.GetPool()->GetWhich( SID_ATTR_ZOOM ) ); 433 SvxViewLayoutItem aViewLayoutItem( 0, false, rSet.GetPool()->GetWhich( SID_ATTR_VIEWLAYOUT ) ); 434 435 if ( &aOKBtn == pBtn ) 436 { 437 sal_uInt16 nFactor = GetFactor(); 438 439 if ( SPECIAL_FACTOR == nFactor ) 440 { 441 if ( aOptimalBtn.IsChecked() ) 442 aZoomItem.SetType( SVX_ZOOM_OPTIMAL ); 443 else if ( aPageWidthBtn.IsChecked() ) 444 aZoomItem.SetType( SVX_ZOOM_PAGEWIDTH ); 445 else if ( aWholePageBtn.IsChecked() ) 446 aZoomItem.SetType( SVX_ZOOM_WHOLEPAGE ); 447 } 448 else 449 aZoomItem.SetValue( nFactor ); 450 451 if ( aAutomaticBtn.IsChecked() ) 452 { 453 aViewLayoutItem.SetValue( 0 ); 454 aViewLayoutItem.SetBookMode( false ); 455 } 456 if ( aSingleBtn.IsChecked() ) 457 { 458 aViewLayoutItem.SetValue( 1 ); 459 aViewLayoutItem.SetBookMode( false ); 460 } 461 else if ( aColumnsBtn.IsChecked() ) 462 { 463 aViewLayoutItem.SetValue( static_cast<sal_uInt16>(aColumnsEdit.GetValue()) ); 464 aViewLayoutItem.SetBookMode( aBookModeChk.IsChecked() ); 465 } 466 } 467 else 468 { 469 DBG_ERROR( "Wrong Button" ); 470 return 0; 471 } 472 pOutSet = new SfxItemSet( rSet ); 473 pOutSet->Put( aZoomItem ); 474 475 // don't set attribute in case the whole view layout stuff is disabled: 476 if ( aViewLayoutFl.IsEnabled() ) 477 pOutSet->Put( aViewLayoutItem ); 478 479 // Wert aus dem UserEdit über den Dialog hinaus merken 480 SfxObjectShell* pSh = SfxObjectShell::Current(); 481 482 if ( pSh ) 483 pSh->PutItem( SfxUInt16Item( SID_ATTR_ZOOM_USER, 484 (sal_uInt16)aUserEdit.GetValue() ) ); 485 EndDialog( RET_OK ); 486 } 487 else 488 EndDialog( RET_CANCEL ); 489 return 0; 490 } 491 492 /* vim: set noet sw=4 ts=4: */ 493