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: */
|