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

Generated by: LCOV version 1.11