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