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