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

Generated by: LCOV version 1.10