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