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