Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #define _SVT_WIZDLG_CXX
31 : : #include <vcl/fixed.hxx>
32 : : #include <vcl/button.hxx>
33 : : #include <vcl/tabpage.hxx>
34 : : #include <svtools/wizdlg.hxx>
35 : :
36 : : // =======================================================================
37 : :
38 : : #define WIZARDDIALOG_BUTTON_OFFSET_Y 6
39 : : #define WIZARDDIALOG_BUTTON_DLGOFFSET_X 6
40 : : #define WIZARDDIALOG_VIEW_DLGOFFSET_X 6
41 : : #define WIZARDDIALOG_VIEW_DLGOFFSET_Y 6
42 : :
43 : : // =======================================================================
44 : :
45 : : struct ImplWizPageData
46 : : {
47 : : ImplWizPageData* mpNext;
48 : : TabPage* mpPage;
49 : : };
50 : :
51 : : // -----------------------------------------------------------------------
52 : :
53 : : struct ImplWizButtonData
54 : : {
55 : : ImplWizButtonData* mpNext;
56 : : Button* mpButton;
57 : : long mnOffset;
58 : : };
59 : :
60 : : // =======================================================================
61 : :
62 : 0 : void WizardDialog::ImplInitData()
63 : : {
64 : 0 : mpFirstPage = NULL;
65 : 0 : mpFirstBtn = NULL;
66 : 0 : mpFixedLine = NULL;
67 : 0 : mpCurTabPage = NULL;
68 : 0 : mpPrevBtn = NULL;
69 : 0 : mpNextBtn = NULL;
70 : 0 : mpViewWindow = NULL;
71 : 0 : mnCurLevel = 0;
72 : 0 : meViewAlign = WINDOWALIGN_LEFT;
73 : 0 : mbEmptyViewMargin = false;
74 : 0 : mnLeftAlignCount = 0;
75 : 0 : }
76 : :
77 : : // -----------------------------------------------------------------------
78 : 0 : void WizardDialog::SetLeftAlignedButtonCount( sal_Int16 _nCount )
79 : : {
80 : 0 : mnLeftAlignCount = _nCount;
81 : 0 : }
82 : :
83 : : // -----------------------------------------------------------------------
84 : :
85 : 0 : void WizardDialog::SetEmptyViewMargin()
86 : : {
87 : 0 : mbEmptyViewMargin = true;
88 : 0 : }
89 : :
90 : : // -----------------------------------------------------------------------
91 : :
92 : 0 : void WizardDialog::ImplCalcSize( Size& rSize )
93 : : {
94 : : // ButtonBar-Hoehe berechnen
95 : 0 : long nMaxHeight = 0;
96 : 0 : ImplWizButtonData* pBtnData = mpFirstBtn;
97 [ # # ]: 0 : while ( pBtnData )
98 : : {
99 : 0 : long nBtnHeight = pBtnData->mpButton->GetSizePixel().Height();
100 [ # # ]: 0 : if ( nBtnHeight > nMaxHeight )
101 : 0 : nMaxHeight = nBtnHeight;
102 : 0 : pBtnData = pBtnData->mpNext;
103 : : }
104 [ # # ]: 0 : if ( nMaxHeight )
105 : 0 : nMaxHeight += WIZARDDIALOG_BUTTON_OFFSET_Y*2;
106 [ # # ][ # # ]: 0 : if ( mpFixedLine && mpFixedLine->IsVisible() )
[ # # ]
107 : 0 : nMaxHeight += mpFixedLine->GetSizePixel().Height();
108 : 0 : rSize.Height() += nMaxHeight;
109 : :
110 : : // View-Window-Groesse dazurechnen
111 [ # # ][ # # ]: 0 : if ( mpViewWindow && mpViewWindow->IsVisible() )
[ # # ]
112 : : {
113 [ # # ]: 0 : Size aViewSize = mpViewWindow->GetSizePixel();
114 [ # # ]: 0 : if ( meViewAlign == WINDOWALIGN_TOP )
115 : 0 : rSize.Height() += aViewSize.Height();
116 [ # # ]: 0 : else if ( meViewAlign == WINDOWALIGN_LEFT )
117 : 0 : rSize.Width() += aViewSize.Width();
118 [ # # ]: 0 : else if ( meViewAlign == WINDOWALIGN_BOTTOM )
119 : 0 : rSize.Height() += aViewSize.Height();
120 [ # # ]: 0 : else if ( meViewAlign == WINDOWALIGN_RIGHT )
121 : 0 : rSize.Width() += aViewSize.Width();
122 : : }
123 : 0 : }
124 : :
125 : : // -----------------------------------------------------------------------
126 : :
127 : 0 : void WizardDialog::ImplPosCtrls()
128 : : {
129 : 0 : Size aDlgSize = GetOutputSizePixel();
130 : 0 : long nBtnWidth = 0;
131 : 0 : long nMaxHeight = 0;
132 : 0 : long nOffY = aDlgSize.Height();
133 : :
134 : 0 : ImplWizButtonData* pBtnData = mpFirstBtn;
135 : 0 : int j = 0;
136 [ # # ]: 0 : while ( pBtnData )
137 : : {
138 [ # # ]: 0 : if (j >= mnLeftAlignCount)
139 : : {
140 [ # # ]: 0 : Size aBtnSize = pBtnData->mpButton->GetSizePixel();
141 : 0 : long nBtnHeight = aBtnSize.Height();
142 [ # # ]: 0 : if ( nBtnHeight > nMaxHeight )
143 : 0 : nMaxHeight = nBtnHeight;
144 : 0 : nBtnWidth += aBtnSize.Width();
145 : 0 : nBtnWidth += pBtnData->mnOffset;
146 : : }
147 : 0 : pBtnData = pBtnData->mpNext;
148 : 0 : j++;
149 : : }
150 : :
151 [ # # ]: 0 : if ( nMaxHeight )
152 : : {
153 : 0 : long nOffX = aDlgSize.Width()-nBtnWidth-WIZARDDIALOG_BUTTON_DLGOFFSET_X;
154 [ # # ]: 0 : long nOffLeftAlignX = LogicalCoordinateToPixel(6);
155 : 0 : nOffY -= WIZARDDIALOG_BUTTON_OFFSET_Y+nMaxHeight;
156 : :
157 : 0 : pBtnData = mpFirstBtn;
158 : 0 : int i = 0;
159 [ # # ]: 0 : while ( pBtnData )
160 : : {
161 [ # # ]: 0 : Size aBtnSize = pBtnData->mpButton->GetSizePixel();
162 [ # # ]: 0 : if (i >= mnLeftAlignCount)
163 : : {
164 : 0 : Point aPos( nOffX, nOffY+((nMaxHeight-aBtnSize.Height())/2) );
165 [ # # ]: 0 : pBtnData->mpButton->SetPosPixel( aPos );
166 : 0 : nOffX += aBtnSize.Width();
167 : 0 : nOffX += pBtnData->mnOffset;
168 : : }
169 : : else
170 : : {
171 : 0 : Point aPos( nOffLeftAlignX, nOffY+((nMaxHeight-aBtnSize.Height())/2) );
172 [ # # ]: 0 : pBtnData->mpButton->SetPosPixel( aPos );
173 : 0 : nOffLeftAlignX += aBtnSize.Width();
174 : 0 : nOffLeftAlignX += pBtnData->mnOffset;
175 : : }
176 : :
177 : 0 : pBtnData = pBtnData->mpNext;
178 : 0 : i++;
179 : : }
180 : :
181 : 0 : nOffY -= WIZARDDIALOG_BUTTON_OFFSET_Y;
182 : : }
183 : :
184 [ # # ][ # # ]: 0 : if ( mpFixedLine && mpFixedLine->IsVisible() )
[ # # ][ # # ]
185 : : {
186 [ # # ]: 0 : nOffY -= mpFixedLine->GetSizePixel().Height();
187 : 0 : mpFixedLine->SetPosSizePixel( 0, nOffY, aDlgSize.Width(), 0,
188 [ # # ]: 0 : WINDOW_POSSIZE_POS | WINDOW_POSSIZE_WIDTH );
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 : sal_uInt16 nViewPosFlags = WINDOW_POSSIZE_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 |= WINDOW_POSSIZE_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 |= WINDOW_POSSIZE_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 |= WINDOW_POSSIZE_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 |= WINDOW_POSSIZE_HEIGHT;
235 : : }
236 : : 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 : : 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 : : return;
263 : : }
264 : :
265 : : // ButtonBar-Hoehe berechnen
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 [ # # ][ # # ]: 0 : if ( mpFixedLine && mpFixedLine->IsVisible() )
[ # # ][ # # ]
278 [ # # ]: 0 : nMaxHeight += mpFixedLine->GetSizePixel().Height();
279 : :
280 : : // TabPage positionieren
281 : 0 : Size aDlgSize = GetOutputSizePixel();
282 : 0 : aDlgSize.Height() -= nMaxHeight;
283 : 0 : long nOffX = 0;
284 : 0 : long nOffY = 0;
285 [ # # ][ # # ]: 0 : if ( mpViewWindow && mpViewWindow->IsVisible() )
[ # # ][ # # ]
286 : : {
287 [ # # ]: 0 : Size aViewSize = mpViewWindow->GetSizePixel();
288 [ # # ]: 0 : if ( meViewAlign == WINDOWALIGN_TOP )
289 : : {
290 : 0 : nOffY += aViewSize.Height()+WIZARDDIALOG_VIEW_DLGOFFSET_Y;
291 : 0 : aDlgSize.Height() -= aViewSize.Height()+WIZARDDIALOG_VIEW_DLGOFFSET_Y;
292 : : }
293 [ # # ]: 0 : else if ( meViewAlign == WINDOWALIGN_LEFT )
294 : : {
295 [ # # ]: 0 : long nViewOffset = mbEmptyViewMargin ? 0 : WIZARDDIALOG_VIEW_DLGOFFSET_X;
296 : 0 : nOffX += aViewSize.Width() + nViewOffset;
297 : 0 : aDlgSize.Width() -= nOffX;
298 : : }
299 [ # # ]: 0 : else if ( meViewAlign == WINDOWALIGN_BOTTOM )
300 : 0 : aDlgSize.Height() -= aViewSize.Height()+WIZARDDIALOG_VIEW_DLGOFFSET_Y;
301 [ # # ]: 0 : else if ( meViewAlign == WINDOWALIGN_RIGHT )
302 : 0 : aDlgSize.Width() -= aViewSize.Width()+WIZARDDIALOG_VIEW_DLGOFFSET_X;
303 : : }
304 : 0 : Point aPos( nOffX, nOffY );
305 [ # # ]: 0 : mpCurTabPage->SetPosSizePixel( aPos, aDlgSize );
306 : : }
307 : :
308 : : // -----------------------------------------------------------------------
309 : :
310 : 0 : void WizardDialog::ImplShowTabPage( TabPage* pTabPage )
311 : : {
312 [ # # ]: 0 : if ( mpCurTabPage == pTabPage )
313 : 0 : return;
314 : :
315 : 0 : TabPage* pOldTabPage = mpCurTabPage;
316 [ # # ]: 0 : if ( pOldTabPage )
317 : 0 : pOldTabPage->DeactivatePage();
318 : :
319 : 0 : mpCurTabPage = pTabPage;
320 [ # # ]: 0 : if ( pTabPage )
321 : : {
322 : 0 : ImplPosTabPage();
323 : 0 : pTabPage->ActivatePage();
324 : 0 : pTabPage->Show();
325 : : }
326 : :
327 [ # # ]: 0 : if ( pOldTabPage )
328 : 0 : pOldTabPage->Hide();
329 : : }
330 : :
331 : : // -----------------------------------------------------------------------
332 : :
333 : 0 : TabPage* WizardDialog::ImplGetPage( sal_uInt16 nLevel ) const
334 : : {
335 : 0 : sal_uInt16 nTempLevel = 0;
336 : 0 : ImplWizPageData* pPageData = mpFirstPage;
337 [ # # ]: 0 : while ( pPageData )
338 : : {
339 [ # # ][ # # ]: 0 : if ( (nTempLevel == nLevel) || !pPageData->mpNext )
340 : 0 : break;
341 : :
342 : 0 : nTempLevel++;
343 : 0 : pPageData = pPageData->mpNext;
344 : : }
345 : :
346 [ # # ]: 0 : if ( pPageData )
347 : 0 : return pPageData->mpPage;
348 : 0 : return NULL;
349 : : }
350 : :
351 : : // =======================================================================
352 : :
353 : 0 : WizardDialog::WizardDialog( Window* pParent, WinBits nStyle ) :
354 [ # # ][ # # ]: 0 : ModalDialog( pParent, nStyle )
355 : : {
356 : 0 : ImplInitData();
357 : 0 : }
358 : :
359 : : // -----------------------------------------------------------------------
360 : :
361 : 0 : WizardDialog::WizardDialog( Window* pParent, const ResId& rResId ) :
362 [ # # ][ # # ]: 0 : ModalDialog( pParent, rResId )
363 : : {
364 : 0 : ImplInitData();
365 : 0 : }
366 : :
367 : : // -----------------------------------------------------------------------
368 : :
369 : 0 : WizardDialog::~WizardDialog()
370 : : {
371 [ # # ]: 0 : if ( mpFixedLine )
372 [ # # ][ # # ]: 0 : delete mpFixedLine;
373 : :
374 : : // Remove all buttons
375 [ # # ]: 0 : while ( mpFirstBtn )
376 [ # # ]: 0 : RemoveButton( mpFirstBtn->mpButton );
377 : :
378 : : // Remove all pages
379 [ # # ]: 0 : while ( mpFirstPage )
380 [ # # ]: 0 : RemovePage( mpFirstPage->mpPage );
381 [ # # ]: 0 : }
382 : :
383 : : // -----------------------------------------------------------------------
384 : :
385 : 0 : void WizardDialog::Resize()
386 : : {
387 [ # # ][ # # ]: 0 : if ( IsReallyShown() && !IsInInitShow() )
[ # # ]
388 : : {
389 : 0 : ImplPosCtrls();
390 : 0 : ImplPosTabPage();
391 : : }
392 : :
393 : 0 : Dialog::Resize();
394 : 0 : }
395 : :
396 : : // -----------------------------------------------------------------------
397 : :
398 : 0 : void WizardDialog::StateChanged( StateChangedType nType )
399 : : {
400 [ # # ]: 0 : if ( nType == STATE_CHANGE_INITSHOW )
401 : : {
402 [ # # ]: 0 : if ( IsDefaultSize() )
403 : : {
404 : 0 : Size aDlgSize = GetPageSizePixel();
405 [ # # ][ # # ]: 0 : if ( !aDlgSize.Width() || !aDlgSize.Height() )
[ # # ]
406 : : {
407 : 0 : ImplWizPageData* pPageData = mpFirstPage;
408 [ # # ]: 0 : while ( pPageData )
409 : : {
410 [ # # ]: 0 : if ( pPageData->mpPage )
411 : : {
412 [ # # ]: 0 : Size aPageSize = pPageData->mpPage->GetSizePixel();
413 [ # # ]: 0 : if ( aPageSize.Width() > aDlgSize.Width() )
414 : 0 : aDlgSize.Width() = aPageSize.Width();
415 [ # # ]: 0 : if ( aPageSize.Height() > aDlgSize.Height() )
416 : 0 : aDlgSize.Height() = aPageSize.Height();
417 : : }
418 : :
419 : 0 : pPageData = pPageData->mpNext;
420 : : }
421 : : }
422 [ # # ]: 0 : ImplCalcSize( aDlgSize );
423 [ # # ]: 0 : SetOutputSizePixel( aDlgSize );
424 : : }
425 : :
426 : 0 : ImplPosCtrls();
427 : 0 : ImplPosTabPage();
428 : 0 : ImplShowTabPage( ImplGetPage( mnCurLevel ) );
429 : : }
430 : :
431 : 0 : Dialog::StateChanged( nType );
432 : 0 : }
433 : :
434 : : // -----------------------------------------------------------------------
435 : :
436 : 0 : long WizardDialog::Notify( NotifyEvent& rNEvt )
437 : : {
438 [ # # ][ # # ]: 0 : if ( (rNEvt.GetType() == EVENT_KEYINPUT) && mpPrevBtn && mpNextBtn )
[ # # ][ # # ]
439 : : {
440 [ # # ]: 0 : const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
441 : 0 : KeyCode aKeyCode = pKEvt->GetKeyCode();
442 : 0 : sal_uInt16 nKeyCode = aKeyCode.GetCode();
443 : :
444 [ # # ]: 0 : if ( aKeyCode.IsMod1() )
445 : : {
446 [ # # ][ # # ]: 0 : if ( aKeyCode.IsShift() || (nKeyCode == KEY_PAGEUP) )
[ # # ]
447 : : {
448 [ # # ][ # # ]: 0 : if ( (nKeyCode == KEY_TAB) || (nKeyCode == KEY_PAGEUP) )
449 : : {
450 [ # # ][ # # ]: 0 : if ( mpPrevBtn->IsVisible() &&
[ # # ][ # # ]
[ # # ]
451 [ # # ][ # # ]: 0 : mpPrevBtn->IsEnabled() && mpPrevBtn->IsInputEnabled() )
452 : : {
453 [ # # ]: 0 : mpPrevBtn->SetPressed( sal_True );
454 [ # # ]: 0 : mpPrevBtn->SetPressed( sal_False );
455 [ # # ]: 0 : mpPrevBtn->Click();
456 : : }
457 : 0 : return sal_True;
458 : : }
459 : : }
460 : : else
461 : : {
462 [ # # ][ # # ]: 0 : if ( (nKeyCode == KEY_TAB) || (nKeyCode == KEY_PAGEDOWN) )
463 : : {
464 [ # # ][ # # ]: 0 : if ( mpNextBtn->IsVisible() &&
[ # # ][ # # ]
[ # # ]
465 [ # # ][ # # ]: 0 : mpNextBtn->IsEnabled() && mpNextBtn->IsInputEnabled() )
466 : : {
467 [ # # ]: 0 : mpNextBtn->SetPressed( sal_True );
468 [ # # ]: 0 : mpNextBtn->SetPressed( sal_False );
469 [ # # ]: 0 : mpNextBtn->Click();
470 : : }
471 : 0 : return sal_True;
472 : : }
473 : : }
474 : : }
475 : : }
476 : :
477 : 0 : return Dialog::Notify( rNEvt );
478 : : }
479 : :
480 : : // -----------------------------------------------------------------------
481 : :
482 : 0 : void WizardDialog::ActivatePage()
483 : : {
484 : 0 : maActivateHdl.Call( this );
485 : 0 : }
486 : :
487 : : // -----------------------------------------------------------------------
488 : :
489 : 0 : long WizardDialog::DeactivatePage()
490 : : {
491 [ # # ]: 0 : if ( maDeactivateHdl.IsSet() )
492 : 0 : return maDeactivateHdl.Call( this );
493 : : else
494 : 0 : return sal_True;
495 : : }
496 : :
497 : : // -----------------------------------------------------------------------
498 : :
499 : 0 : sal_Bool WizardDialog::ShowNextPage()
500 : : {
501 : 0 : return ShowPage( mnCurLevel+1 );
502 : : }
503 : :
504 : : // -----------------------------------------------------------------------
505 : :
506 : 0 : sal_Bool WizardDialog::ShowPrevPage()
507 : : {
508 [ # # ]: 0 : if ( !mnCurLevel )
509 : 0 : return sal_False;
510 : 0 : return ShowPage( mnCurLevel-1 );
511 : : }
512 : :
513 : : // -----------------------------------------------------------------------
514 : :
515 : 0 : sal_Bool WizardDialog::ShowPage( sal_uInt16 nLevel )
516 : : {
517 [ # # ]: 0 : if ( DeactivatePage() )
518 : : {
519 : 0 : mnCurLevel = nLevel;
520 : 0 : ActivatePage();
521 : 0 : ImplShowTabPage( ImplGetPage( mnCurLevel ) );
522 : 0 : return sal_True;
523 : : }
524 : : else
525 : 0 : return sal_False;
526 : : }
527 : :
528 : : // -----------------------------------------------------------------------
529 : :
530 : 0 : sal_Bool WizardDialog::Finnish( long nResult )
531 : : {
532 [ # # ]: 0 : if ( DeactivatePage() )
533 : : {
534 [ # # ]: 0 : if ( mpCurTabPage )
535 : 0 : mpCurTabPage->DeactivatePage();
536 : :
537 [ # # ]: 0 : if ( IsInExecute() )
538 : 0 : EndDialog( nResult );
539 [ # # ]: 0 : else if ( GetStyle() & WB_CLOSEABLE )
540 : 0 : Close();
541 : 0 : return sal_True;
542 : : }
543 : : else
544 : 0 : return sal_False;
545 : : }
546 : :
547 : : // -----------------------------------------------------------------------
548 : :
549 : 0 : void WizardDialog::AddPage( TabPage* pPage )
550 : : {
551 : 0 : ImplWizPageData* pNewPageData = new ImplWizPageData;
552 : 0 : pNewPageData->mpNext = NULL;
553 : 0 : pNewPageData->mpPage = pPage;
554 : :
555 [ # # ]: 0 : if ( !mpFirstPage )
556 : 0 : mpFirstPage = pNewPageData;
557 : : else
558 : : {
559 : 0 : ImplWizPageData* pPageData = mpFirstPage;
560 [ # # ]: 0 : while ( pPageData->mpNext )
561 : 0 : pPageData = pPageData->mpNext;
562 : 0 : pPageData->mpNext = pNewPageData;
563 : : }
564 : 0 : }
565 : :
566 : : // -----------------------------------------------------------------------
567 : :
568 : 0 : void WizardDialog::RemovePage( TabPage* pPage )
569 : : {
570 : 0 : ImplWizPageData* pPrevPageData = NULL;
571 : 0 : ImplWizPageData* pPageData = mpFirstPage;
572 [ # # ]: 0 : while ( pPageData )
573 : : {
574 [ # # ]: 0 : if ( pPageData->mpPage == pPage )
575 : : {
576 [ # # ]: 0 : if ( pPrevPageData )
577 : 0 : pPrevPageData->mpNext = pPageData->mpNext;
578 : : else
579 : 0 : mpFirstPage = pPageData->mpNext;
580 [ # # ]: 0 : if ( pPage == mpCurTabPage )
581 : 0 : mpCurTabPage = NULL;
582 : 0 : delete pPageData;
583 : 0 : return;
584 : : }
585 : :
586 : 0 : pPrevPageData = pPageData;
587 : 0 : pPageData = pPageData->mpNext;
588 : : }
589 : :
590 : : OSL_FAIL( "WizardDialog::RemovePage() - Page not in list" );
591 : : }
592 : :
593 : : // -----------------------------------------------------------------------
594 : :
595 : 0 : void WizardDialog::SetPage( sal_uInt16 nLevel, TabPage* pPage )
596 : : {
597 : 0 : sal_uInt16 nTempLevel = 0;
598 : 0 : ImplWizPageData* pPageData = mpFirstPage;
599 [ # # ]: 0 : while ( pPageData )
600 : : {
601 [ # # ][ # # ]: 0 : if ( (nTempLevel == nLevel) || !pPageData->mpNext )
602 : 0 : break;
603 : :
604 : 0 : nTempLevel++;
605 : 0 : pPageData = pPageData->mpNext;
606 : : }
607 : :
608 [ # # ]: 0 : if ( pPageData )
609 : : {
610 [ # # ]: 0 : if ( pPageData->mpPage == mpCurTabPage )
611 : 0 : mpCurTabPage = NULL;
612 : 0 : pPageData->mpPage = pPage;
613 : : }
614 : 0 : }
615 : :
616 : : // -----------------------------------------------------------------------
617 : :
618 : 0 : TabPage* WizardDialog::GetPage( sal_uInt16 nLevel ) const
619 : : {
620 : 0 : sal_uInt16 nTempLevel = 0;
621 : 0 : ImplWizPageData* pPageData = mpFirstPage;
622 [ # # ]: 0 : while ( pPageData )
623 : : {
624 [ # # ]: 0 : if ( nTempLevel == nLevel )
625 : 0 : return pPageData->mpPage;
626 : :
627 : 0 : nTempLevel++;
628 : 0 : pPageData = pPageData->mpNext;
629 : : }
630 : :
631 : 0 : return NULL;
632 : : }
633 : :
634 : : // -----------------------------------------------------------------------
635 : :
636 : 0 : void WizardDialog::AddButton( Button* pButton, long nOffset )
637 : : {
638 : 0 : ImplWizButtonData* pNewBtnData = new ImplWizButtonData;
639 : 0 : pNewBtnData->mpNext = NULL;
640 : 0 : pNewBtnData->mpButton = pButton;
641 : 0 : pNewBtnData->mnOffset = nOffset;
642 : :
643 [ # # ]: 0 : if ( !mpFirstBtn )
644 : 0 : mpFirstBtn = pNewBtnData;
645 : : else
646 : : {
647 : 0 : ImplWizButtonData* pBtnData = mpFirstBtn;
648 [ # # ]: 0 : while ( pBtnData->mpNext )
649 : 0 : pBtnData = pBtnData->mpNext;
650 : 0 : pBtnData->mpNext = pNewBtnData;
651 : : }
652 : 0 : }
653 : :
654 : : // -----------------------------------------------------------------------
655 : :
656 : 0 : void WizardDialog::RemoveButton( Button* pButton )
657 : : {
658 : 0 : ImplWizButtonData* pPrevBtnData = NULL;
659 : 0 : ImplWizButtonData* pBtnData = mpFirstBtn;
660 [ # # ]: 0 : while ( pBtnData )
661 : : {
662 [ # # ]: 0 : if ( pBtnData->mpButton == pButton )
663 : : {
664 [ # # ]: 0 : if ( pPrevBtnData )
665 : 0 : pPrevBtnData->mpNext = pBtnData->mpNext;
666 : : else
667 : 0 : mpFirstBtn = pBtnData->mpNext;
668 : 0 : delete pBtnData;
669 : 0 : return;
670 : : }
671 : :
672 : 0 : pPrevBtnData = pBtnData;
673 : 0 : pBtnData = pBtnData->mpNext;
674 : : }
675 : :
676 : : OSL_FAIL( "WizardDialog::RemoveButton() - Button not in list" );
677 : : }
678 : :
679 : : // -----------------------------------------------------------------------
680 : :
681 : 0 : void WizardDialog::ShowButtonFixedLine( sal_Bool bVisible )
682 : : {
683 [ # # ]: 0 : if ( !mpFixedLine )
684 : : {
685 [ # # ]: 0 : if ( !bVisible )
686 : 0 : return;
687 : :
688 [ # # ]: 0 : mpFixedLine = new FixedLine( this );
689 : : }
690 : :
691 : 0 : mpFixedLine->Show( bVisible );
692 : : }
693 : :
694 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|