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

Generated by: LCOV version 1.10