LCOV - code coverage report
Current view: top level - svtools/source/dialogs - wizdlg.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 365 0.0 %
Date: 2014-04-14 Functions: 0 33 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10