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_svtools.hxx" 26 27 #define _SVT_WIZDLG_CXX 28 #include <tools/debug.hxx> 29 #ifndef _VCL_FIXED_HXX 30 #include <vcl/fixed.hxx> 31 #endif 32 #ifndef _VCL_BUTTON_HXX 33 #include <vcl/button.hxx> 34 #endif 35 #ifndef _VCL_TABPAGE_HXX 36 #include <vcl/tabpage.hxx> 37 #endif 38 #include <svtools/wizdlg.hxx> 39 40 // ======================================================================= 41 42 #define WIZARDDIALOG_BUTTON_OFFSET_Y 6 43 #define WIZARDDIALOG_BUTTON_DLGOFFSET_X 6 44 #define WIZARDDIALOG_VIEW_DLGOFFSET_X 6 45 #define WIZARDDIALOG_VIEW_DLGOFFSET_Y 6 46 47 // ======================================================================= 48 49 struct ImplWizPageData 50 { 51 ImplWizPageData* mpNext; 52 TabPage* mpPage; 53 }; 54 55 // ----------------------------------------------------------------------- 56 57 struct ImplWizButtonData 58 { 59 ImplWizButtonData* mpNext; 60 Button* mpButton; 61 long mnOffset; 62 }; 63 64 // ======================================================================= 65 66 void WizardDialog::ImplInitData() 67 { 68 mpFirstPage = NULL; 69 mpFirstBtn = NULL; 70 mpFixedLine = NULL; 71 mpCurTabPage = NULL; 72 mpPrevBtn = NULL; 73 mpNextBtn = NULL; 74 mpViewWindow = NULL; 75 mnCurLevel = 0; 76 meViewAlign = WINDOWALIGN_LEFT; 77 mbEmptyViewMargin = false; 78 mnLeftAlignCount = 0; 79 } 80 81 // ----------------------------------------------------------------------- 82 void WizardDialog::SetLeftAlignedButtonCount( sal_Int16 _nCount ) 83 { 84 mnLeftAlignCount = _nCount; 85 } 86 87 // ----------------------------------------------------------------------- 88 89 void WizardDialog::SetEmptyViewMargin() 90 { 91 mbEmptyViewMargin = true; 92 } 93 94 // ----------------------------------------------------------------------- 95 96 void WizardDialog::ImplCalcSize( Size& rSize ) 97 { 98 // ButtonBar-Hoehe berechnen 99 long nMaxHeight = 0; 100 ImplWizButtonData* pBtnData = mpFirstBtn; 101 while ( pBtnData ) 102 { 103 long nBtnHeight = pBtnData->mpButton->GetSizePixel().Height(); 104 if ( nBtnHeight > nMaxHeight ) 105 nMaxHeight = nBtnHeight; 106 pBtnData = pBtnData->mpNext; 107 } 108 if ( nMaxHeight ) 109 nMaxHeight += WIZARDDIALOG_BUTTON_OFFSET_Y*2; 110 if ( mpFixedLine && mpFixedLine->IsVisible() ) 111 nMaxHeight += mpFixedLine->GetSizePixel().Height(); 112 rSize.Height() += nMaxHeight; 113 114 // View-Window-Groesse dazurechnen 115 if ( mpViewWindow && mpViewWindow->IsVisible() ) 116 { 117 Size aViewSize = mpViewWindow->GetSizePixel(); 118 if ( meViewAlign == WINDOWALIGN_TOP ) 119 rSize.Height() += aViewSize.Height(); 120 else if ( meViewAlign == WINDOWALIGN_LEFT ) 121 rSize.Width() += aViewSize.Width(); 122 else if ( meViewAlign == WINDOWALIGN_BOTTOM ) 123 rSize.Height() += aViewSize.Height(); 124 else if ( meViewAlign == WINDOWALIGN_RIGHT ) 125 rSize.Width() += aViewSize.Width(); 126 } 127 } 128 129 // ----------------------------------------------------------------------- 130 131 void WizardDialog::ImplPosCtrls() 132 { 133 Size aDlgSize = GetOutputSizePixel(); 134 long nBtnWidth = 0; 135 long nMaxHeight = 0; 136 long nOffY = aDlgSize.Height(); 137 138 ImplWizButtonData* pBtnData = mpFirstBtn; 139 int j = 0; 140 while ( pBtnData ) 141 { 142 if (j >= mnLeftAlignCount) 143 { 144 Size aBtnSize = pBtnData->mpButton->GetSizePixel(); 145 long nBtnHeight = aBtnSize.Height(); 146 if ( nBtnHeight > nMaxHeight ) 147 nMaxHeight = nBtnHeight; 148 nBtnWidth += aBtnSize.Width(); 149 nBtnWidth += pBtnData->mnOffset; 150 } 151 pBtnData = pBtnData->mpNext; 152 j++; 153 } 154 155 if ( nMaxHeight ) 156 { 157 long nOffX = aDlgSize.Width()-nBtnWidth-WIZARDDIALOG_BUTTON_DLGOFFSET_X; 158 long nOffLeftAlignX = LogicalCoordinateToPixel(6); 159 nOffY -= WIZARDDIALOG_BUTTON_OFFSET_Y+nMaxHeight; 160 161 pBtnData = mpFirstBtn; 162 int i = 0; 163 while ( pBtnData ) 164 { 165 Size aBtnSize = pBtnData->mpButton->GetSizePixel(); 166 if (i >= mnLeftAlignCount) 167 { 168 Point aPos( nOffX, nOffY+((nMaxHeight-aBtnSize.Height())/2) ); 169 pBtnData->mpButton->SetPosPixel( aPos ); 170 nOffX += aBtnSize.Width(); 171 nOffX += pBtnData->mnOffset; 172 } 173 else 174 { 175 Point aPos( nOffLeftAlignX, nOffY+((nMaxHeight-aBtnSize.Height())/2) ); 176 pBtnData->mpButton->SetPosPixel( aPos ); 177 nOffLeftAlignX += aBtnSize.Width(); 178 nOffLeftAlignX += pBtnData->mnOffset; 179 } 180 181 pBtnData = pBtnData->mpNext; 182 i++; 183 } 184 185 nOffY -= WIZARDDIALOG_BUTTON_OFFSET_Y; 186 } 187 188 if ( mpFixedLine && mpFixedLine->IsVisible() ) 189 { 190 nOffY -= mpFixedLine->GetSizePixel().Height(); 191 mpFixedLine->SetPosSizePixel( 0, nOffY, aDlgSize.Width(), 0, 192 WINDOW_POSSIZE_POS | WINDOW_POSSIZE_WIDTH ); 193 } 194 195 if ( mpViewWindow && mpViewWindow->IsVisible() ) 196 { 197 long nViewOffX = 0; 198 long nViewOffY = 0; 199 long nViewWidth = 0; 200 long nViewHeight = 0; 201 long nDlgHeight = nOffY; 202 sal_uInt16 nViewPosFlags = WINDOW_POSSIZE_POS; 203 if ( meViewAlign == WINDOWALIGN_TOP ) 204 { 205 nViewOffX = WIZARDDIALOG_VIEW_DLGOFFSET_X; 206 nViewOffY = WIZARDDIALOG_VIEW_DLGOFFSET_Y; 207 nViewWidth = aDlgSize.Width()-(WIZARDDIALOG_VIEW_DLGOFFSET_X*2); 208 nViewPosFlags |= WINDOW_POSSIZE_WIDTH; 209 } 210 else if ( meViewAlign == WINDOWALIGN_LEFT ) 211 { 212 if ( mbEmptyViewMargin ) 213 { 214 nViewOffX = 0; 215 nViewOffY = 0; 216 nViewHeight = nDlgHeight; 217 } 218 else 219 { 220 nViewOffX = WIZARDDIALOG_VIEW_DLGOFFSET_X; 221 nViewOffY = WIZARDDIALOG_VIEW_DLGOFFSET_Y; 222 nViewHeight = nDlgHeight-(WIZARDDIALOG_VIEW_DLGOFFSET_Y*2); 223 } 224 nViewPosFlags |= WINDOW_POSSIZE_HEIGHT; 225 } 226 else if ( meViewAlign == WINDOWALIGN_BOTTOM ) 227 { 228 nViewOffX = WIZARDDIALOG_VIEW_DLGOFFSET_X; 229 nViewOffY = nDlgHeight-mpViewWindow->GetSizePixel().Height()-WIZARDDIALOG_VIEW_DLGOFFSET_Y; 230 nViewWidth = aDlgSize.Width()-(WIZARDDIALOG_VIEW_DLGOFFSET_X*2); 231 nViewPosFlags |= WINDOW_POSSIZE_WIDTH; 232 } 233 else if ( meViewAlign == WINDOWALIGN_RIGHT ) 234 { 235 nViewOffX = aDlgSize.Width()-mpViewWindow->GetSizePixel().Width()-WIZARDDIALOG_VIEW_DLGOFFSET_X; 236 nViewOffY = WIZARDDIALOG_VIEW_DLGOFFSET_Y; 237 nViewHeight = nDlgHeight-(WIZARDDIALOG_VIEW_DLGOFFSET_Y*2); 238 nViewPosFlags |= WINDOW_POSSIZE_HEIGHT; 239 } 240 mpViewWindow->SetPosSizePixel( nViewOffX, nViewOffY, 241 nViewWidth, nViewHeight, 242 nViewPosFlags ); 243 } 244 } 245 246 247 long WizardDialog::LogicalCoordinateToPixel(int iCoordinate){ 248 Size aLocSize = LogicToPixel(Size( iCoordinate, 0 ), MAP_APPFONT ); 249 int iPixelCoordinate = aLocSize.Width(); 250 return iPixelCoordinate; 251 } 252 253 254 // ----------------------------------------------------------------------- 255 256 void WizardDialog::ImplPosTabPage() 257 { 258 if ( !mpCurTabPage ) 259 return; 260 261 if ( !IsInInitShow() ) 262 { 263 // #100199# - On Unix initial size is equal to screen size, on Windows 264 // it's 0,0. One cannot calculate the size unless dialog is visible. 265 if ( !IsReallyVisible() ) 266 return; 267 } 268 269 // ButtonBar-Hoehe berechnen 270 long nMaxHeight = 0; 271 ImplWizButtonData* pBtnData = mpFirstBtn; 272 while ( pBtnData ) 273 { 274 long nBtnHeight = pBtnData->mpButton->GetSizePixel().Height(); 275 if ( nBtnHeight > nMaxHeight ) 276 nMaxHeight = nBtnHeight; 277 pBtnData = pBtnData->mpNext; 278 } 279 if ( nMaxHeight ) 280 nMaxHeight += WIZARDDIALOG_BUTTON_OFFSET_Y*2; 281 if ( mpFixedLine && mpFixedLine->IsVisible() ) 282 nMaxHeight += mpFixedLine->GetSizePixel().Height(); 283 284 // TabPage positionieren 285 Size aDlgSize = GetOutputSizePixel(); 286 aDlgSize.Height() -= nMaxHeight; 287 long nOffX = 0; 288 long nOffY = 0; 289 if ( mpViewWindow && mpViewWindow->IsVisible() ) 290 { 291 Size aViewSize = mpViewWindow->GetSizePixel(); 292 if ( meViewAlign == WINDOWALIGN_TOP ) 293 { 294 nOffY += aViewSize.Height()+WIZARDDIALOG_VIEW_DLGOFFSET_Y; 295 aDlgSize.Height() -= aViewSize.Height()+WIZARDDIALOG_VIEW_DLGOFFSET_Y; 296 } 297 else if ( meViewAlign == WINDOWALIGN_LEFT ) 298 { 299 long nViewOffset = mbEmptyViewMargin ? 0 : WIZARDDIALOG_VIEW_DLGOFFSET_X; 300 nOffX += aViewSize.Width() + nViewOffset; 301 aDlgSize.Width() -= nOffX; 302 } 303 else if ( meViewAlign == WINDOWALIGN_BOTTOM ) 304 aDlgSize.Height() -= aViewSize.Height()+WIZARDDIALOG_VIEW_DLGOFFSET_Y; 305 else if ( meViewAlign == WINDOWALIGN_RIGHT ) 306 aDlgSize.Width() -= aViewSize.Width()+WIZARDDIALOG_VIEW_DLGOFFSET_X; 307 } 308 Point aPos( nOffX, nOffY ); 309 mpCurTabPage->SetPosSizePixel( aPos, aDlgSize ); 310 } 311 312 // ----------------------------------------------------------------------- 313 314 void WizardDialog::ImplShowTabPage( TabPage* pTabPage ) 315 { 316 if ( mpCurTabPage == pTabPage ) 317 return; 318 319 TabPage* pOldTabPage = mpCurTabPage; 320 if ( pOldTabPage ) 321 pOldTabPage->DeactivatePage(); 322 323 mpCurTabPage = pTabPage; 324 if ( pTabPage ) 325 { 326 ImplPosTabPage(); 327 pTabPage->ActivatePage(); 328 pTabPage->Show(); 329 } 330 331 if ( pOldTabPage ) 332 pOldTabPage->Hide(); 333 } 334 335 // ----------------------------------------------------------------------- 336 337 TabPage* WizardDialog::ImplGetPage( sal_uInt16 nLevel ) const 338 { 339 sal_uInt16 nTempLevel = 0; 340 ImplWizPageData* pPageData = mpFirstPage; 341 while ( pPageData ) 342 { 343 if ( (nTempLevel == nLevel) || !pPageData->mpNext ) 344 break; 345 346 nTempLevel++; 347 pPageData = pPageData->mpNext; 348 } 349 350 if ( pPageData ) 351 return pPageData->mpPage; 352 return NULL; 353 } 354 355 // ======================================================================= 356 357 WizardDialog::WizardDialog( Window* pParent, WinBits nStyle ) : 358 ModalDialog( pParent, nStyle ) 359 { 360 ImplInitData(); 361 } 362 363 // ----------------------------------------------------------------------- 364 365 WizardDialog::WizardDialog( Window* pParent, const ResId& rResId ) : 366 ModalDialog( pParent, rResId ) 367 { 368 ImplInitData(); 369 } 370 371 // ----------------------------------------------------------------------- 372 373 WizardDialog::~WizardDialog() 374 { 375 if ( mpFixedLine ) 376 delete mpFixedLine; 377 378 // Remove all buttons 379 while ( mpFirstBtn ) 380 RemoveButton( mpFirstBtn->mpButton ); 381 382 // Remove all pages 383 while ( mpFirstPage ) 384 RemovePage( mpFirstPage->mpPage ); 385 } 386 387 // ----------------------------------------------------------------------- 388 389 void WizardDialog::Resize() 390 { 391 if ( IsReallyShown() && !IsInInitShow() ) 392 { 393 ImplPosCtrls(); 394 ImplPosTabPage(); 395 } 396 397 Dialog::Resize(); 398 } 399 400 // ----------------------------------------------------------------------- 401 402 void WizardDialog::StateChanged( StateChangedType nType ) 403 { 404 if ( nType == STATE_CHANGE_INITSHOW ) 405 { 406 if ( IsDefaultSize() ) 407 { 408 Size aDlgSize = GetPageSizePixel(); 409 if ( !aDlgSize.Width() || !aDlgSize.Height() ) 410 { 411 ImplWizPageData* pPageData = mpFirstPage; 412 while ( pPageData ) 413 { 414 if ( pPageData->mpPage ) 415 { 416 Size aPageSize = pPageData->mpPage->GetSizePixel(); 417 if ( aPageSize.Width() > aDlgSize.Width() ) 418 aDlgSize.Width() = aPageSize.Width(); 419 if ( aPageSize.Height() > aDlgSize.Height() ) 420 aDlgSize.Height() = aPageSize.Height(); 421 } 422 423 pPageData = pPageData->mpNext; 424 } 425 } 426 ImplCalcSize( aDlgSize ); 427 SetOutputSizePixel( aDlgSize ); 428 } 429 430 ImplPosCtrls(); 431 ImplPosTabPage(); 432 ImplShowTabPage( ImplGetPage( mnCurLevel ) ); 433 } 434 435 Dialog::StateChanged( nType ); 436 } 437 438 // ----------------------------------------------------------------------- 439 440 long WizardDialog::Notify( NotifyEvent& rNEvt ) 441 { 442 if ( (rNEvt.GetType() == EVENT_KEYINPUT) && mpPrevBtn && mpNextBtn ) 443 { 444 const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); 445 KeyCode aKeyCode = pKEvt->GetKeyCode(); 446 sal_uInt16 nKeyCode = aKeyCode.GetCode(); 447 448 if ( aKeyCode.IsMod1() ) 449 { 450 if ( aKeyCode.IsShift() || (nKeyCode == KEY_PAGEUP) ) 451 { 452 if ( (nKeyCode == KEY_TAB) || (nKeyCode == KEY_PAGEUP) ) 453 { 454 if ( mpPrevBtn->IsVisible() && 455 mpPrevBtn->IsEnabled() && mpPrevBtn->IsInputEnabled() ) 456 { 457 mpPrevBtn->SetPressed( sal_True ); 458 mpPrevBtn->SetPressed( sal_False ); 459 mpPrevBtn->Click(); 460 } 461 return sal_True; 462 } 463 } 464 else 465 { 466 if ( (nKeyCode == KEY_TAB) || (nKeyCode == KEY_PAGEDOWN) ) 467 { 468 if ( mpNextBtn->IsVisible() && 469 mpNextBtn->IsEnabled() && mpNextBtn->IsInputEnabled() ) 470 { 471 mpNextBtn->SetPressed( sal_True ); 472 mpNextBtn->SetPressed( sal_False ); 473 mpNextBtn->Click(); 474 } 475 return sal_True; 476 } 477 } 478 } 479 } 480 481 return Dialog::Notify( rNEvt ); 482 } 483 484 // ----------------------------------------------------------------------- 485 486 void WizardDialog::ActivatePage() 487 { 488 maActivateHdl.Call( this ); 489 } 490 491 // ----------------------------------------------------------------------- 492 493 long WizardDialog::DeactivatePage() 494 { 495 if ( maDeactivateHdl.IsSet() ) 496 return maDeactivateHdl.Call( this ); 497 else 498 return sal_True; 499 } 500 501 // ----------------------------------------------------------------------- 502 503 sal_Bool WizardDialog::ShowNextPage() 504 { 505 return ShowPage( mnCurLevel+1 ); 506 } 507 508 // ----------------------------------------------------------------------- 509 510 sal_Bool WizardDialog::ShowPrevPage() 511 { 512 if ( !mnCurLevel ) 513 return sal_False; 514 return ShowPage( mnCurLevel-1 ); 515 } 516 517 // ----------------------------------------------------------------------- 518 519 sal_Bool WizardDialog::ShowPage( sal_uInt16 nLevel ) 520 { 521 if ( DeactivatePage() ) 522 { 523 mnCurLevel = nLevel; 524 ActivatePage(); 525 ImplShowTabPage( ImplGetPage( mnCurLevel ) ); 526 return sal_True; 527 } 528 else 529 return sal_False; 530 } 531 532 // ----------------------------------------------------------------------- 533 534 sal_Bool WizardDialog::Finnish( long nResult ) 535 { 536 if ( DeactivatePage() ) 537 { 538 if ( mpCurTabPage ) 539 mpCurTabPage->DeactivatePage(); 540 541 if ( IsInExecute() ) 542 EndDialog( nResult ); 543 else if ( GetStyle() & WB_CLOSEABLE ) 544 Close(); 545 return sal_True; 546 } 547 else 548 return sal_False; 549 } 550 551 // ----------------------------------------------------------------------- 552 553 void WizardDialog::AddPage( TabPage* pPage ) 554 { 555 ImplWizPageData* pNewPageData = new ImplWizPageData; 556 pNewPageData->mpNext = NULL; 557 pNewPageData->mpPage = pPage; 558 559 if ( !mpFirstPage ) 560 mpFirstPage = pNewPageData; 561 else 562 { 563 ImplWizPageData* pPageData = mpFirstPage; 564 while ( pPageData->mpNext ) 565 pPageData = pPageData->mpNext; 566 pPageData->mpNext = pNewPageData; 567 } 568 } 569 570 // ----------------------------------------------------------------------- 571 572 void WizardDialog::RemovePage( TabPage* pPage ) 573 { 574 ImplWizPageData* pPrevPageData = NULL; 575 ImplWizPageData* pPageData = mpFirstPage; 576 while ( pPageData ) 577 { 578 if ( pPageData->mpPage == pPage ) 579 { 580 if ( pPrevPageData ) 581 pPrevPageData->mpNext = pPageData->mpNext; 582 else 583 mpFirstPage = pPageData->mpNext; 584 if ( pPage == mpCurTabPage ) 585 mpCurTabPage = NULL; 586 delete pPageData; 587 return; 588 } 589 590 pPrevPageData = pPageData; 591 pPageData = pPageData->mpNext; 592 } 593 594 DBG_ERROR( "WizardDialog::RemovePage() - Page not in list" ); 595 } 596 597 // ----------------------------------------------------------------------- 598 599 void WizardDialog::SetPage( sal_uInt16 nLevel, TabPage* pPage ) 600 { 601 sal_uInt16 nTempLevel = 0; 602 ImplWizPageData* pPageData = mpFirstPage; 603 while ( pPageData ) 604 { 605 if ( (nTempLevel == nLevel) || !pPageData->mpNext ) 606 break; 607 608 nTempLevel++; 609 pPageData = pPageData->mpNext; 610 } 611 612 if ( pPageData ) 613 { 614 if ( pPageData->mpPage == mpCurTabPage ) 615 mpCurTabPage = NULL; 616 pPageData->mpPage = pPage; 617 } 618 } 619 620 // ----------------------------------------------------------------------- 621 622 TabPage* WizardDialog::GetPage( sal_uInt16 nLevel ) const 623 { 624 sal_uInt16 nTempLevel = 0; 625 ImplWizPageData* pPageData = mpFirstPage; 626 while ( pPageData ) 627 { 628 if ( nTempLevel == nLevel ) 629 return pPageData->mpPage; 630 631 nTempLevel++; 632 pPageData = pPageData->mpNext; 633 } 634 635 return NULL; 636 } 637 638 // ----------------------------------------------------------------------- 639 640 void WizardDialog::AddButton( Button* pButton, long nOffset ) 641 { 642 ImplWizButtonData* pNewBtnData = new ImplWizButtonData; 643 pNewBtnData->mpNext = NULL; 644 pNewBtnData->mpButton = pButton; 645 pNewBtnData->mnOffset = nOffset; 646 647 if ( !mpFirstBtn ) 648 mpFirstBtn = pNewBtnData; 649 else 650 { 651 ImplWizButtonData* pBtnData = mpFirstBtn; 652 while ( pBtnData->mpNext ) 653 pBtnData = pBtnData->mpNext; 654 pBtnData->mpNext = pNewBtnData; 655 } 656 } 657 658 // ----------------------------------------------------------------------- 659 660 void WizardDialog::RemoveButton( Button* pButton ) 661 { 662 ImplWizButtonData* pPrevBtnData = NULL; 663 ImplWizButtonData* pBtnData = mpFirstBtn; 664 while ( pBtnData ) 665 { 666 if ( pBtnData->mpButton == pButton ) 667 { 668 if ( pPrevBtnData ) 669 pPrevBtnData->mpNext = pBtnData->mpNext; 670 else 671 mpFirstBtn = pBtnData->mpNext; 672 delete pBtnData; 673 return; 674 } 675 676 pPrevBtnData = pBtnData; 677 pBtnData = pBtnData->mpNext; 678 } 679 680 DBG_ERROR( "WizardDialog::RemoveButton() - Button not in list" ); 681 } 682 683 // ----------------------------------------------------------------------- 684 685 void WizardDialog::ShowButtonFixedLine( sal_Bool bVisible ) 686 { 687 if ( !mpFixedLine ) 688 { 689 if ( !bVisible ) 690 return; 691 692 mpFixedLine = new FixedLine( this ); 693 } 694 695 mpFixedLine->Show( bVisible ); 696 } 697 698 // ----------------------------------------------------------------------- 699 700 sal_Bool WizardDialog::IsButtonFixedLineVisible() 701 { 702 return (mpFixedLine && mpFixedLine->IsVisible()); 703 } 704