1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_extensions.hxx"
30*cdf0e10cSrcweir #include "groupboxwiz.hxx"
31*cdf0e10cSrcweir #include "commonpagesdbp.hxx"
32*cdf0e10cSrcweir #include <tools/debug.hxx>
33*cdf0e10cSrcweir #include <vcl/svapp.hxx>
34*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
35*cdf0e10cSrcweir #include "optiongrouplayouter.hxx"
36*cdf0e10cSrcweir #include "dbpilots.hrc"
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir //#define GBW_STATE_DATASELECTION		0
40*cdf0e10cSrcweir #define GBW_STATE_OPTIONLIST		0
41*cdf0e10cSrcweir #define GBW_STATE_DEFAULTOPTION		1
42*cdf0e10cSrcweir #define GBW_STATE_OPTIONVALUES		2
43*cdf0e10cSrcweir #define GBW_STATE_DBFIELD			3
44*cdf0e10cSrcweir #define GBW_STATE_FINALIZE			4
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir //.........................................................................
47*cdf0e10cSrcweir namespace dbp
48*cdf0e10cSrcweir {
49*cdf0e10cSrcweir //.........................................................................
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir 	using namespace ::com::sun::star::uno;
52*cdf0e10cSrcweir 	using namespace ::com::sun::star::lang;
53*cdf0e10cSrcweir 	using namespace ::com::sun::star::beans;
54*cdf0e10cSrcweir 	using namespace ::com::sun::star::form;
55*cdf0e10cSrcweir 	using namespace ::svt;
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir 	//=====================================================================
58*cdf0e10cSrcweir 	//= OGroupBoxWizard
59*cdf0e10cSrcweir 	//=====================================================================
60*cdf0e10cSrcweir 	//---------------------------------------------------------------------
61*cdf0e10cSrcweir 	OGroupBoxWizard::OGroupBoxWizard( Window* _pParent,
62*cdf0e10cSrcweir 			const Reference< XPropertySet >& _rxObjectModel, const Reference< XMultiServiceFactory >& _rxORB )
63*cdf0e10cSrcweir 		:OControlWizard(_pParent, ModuleRes(RID_DLG_GROUPBOXWIZARD), _rxObjectModel, _rxORB)
64*cdf0e10cSrcweir 		,m_bVisitedDefault(sal_False)
65*cdf0e10cSrcweir 		,m_bVisitedDB(sal_False)
66*cdf0e10cSrcweir 	{
67*cdf0e10cSrcweir 		initControlSettings(&m_aSettings);
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir 		m_pPrevPage->SetHelpId(HID_GROUPWIZARD_PREVIOUS);
70*cdf0e10cSrcweir 		m_pNextPage->SetHelpId(HID_GROUPWIZARD_NEXT);
71*cdf0e10cSrcweir 		m_pCancel->SetHelpId(HID_GROUPWIZARD_CANCEL);
72*cdf0e10cSrcweir 		m_pFinish->SetHelpId(HID_GROUPWIZARD_FINISH);
73*cdf0e10cSrcweir 	}
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir 	//---------------------------------------------------------------------
76*cdf0e10cSrcweir 	sal_Bool OGroupBoxWizard::approveControl(sal_Int16 _nClassId)
77*cdf0e10cSrcweir 	{
78*cdf0e10cSrcweir 		return FormComponentType::GROUPBOX == _nClassId;
79*cdf0e10cSrcweir 	}
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir 	//---------------------------------------------------------------------
82*cdf0e10cSrcweir 	OWizardPage* OGroupBoxWizard::createPage(::svt::WizardTypes::WizardState _nState)
83*cdf0e10cSrcweir 	{
84*cdf0e10cSrcweir 		switch (_nState)
85*cdf0e10cSrcweir 		{
86*cdf0e10cSrcweir //			case GBW_STATE_DATASELECTION:
87*cdf0e10cSrcweir //				return new OTableSelectionPage(this);
88*cdf0e10cSrcweir //
89*cdf0e10cSrcweir 			case GBW_STATE_OPTIONLIST:
90*cdf0e10cSrcweir 				return new ORadioSelectionPage(this);
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir 			case GBW_STATE_DEFAULTOPTION:
93*cdf0e10cSrcweir 				return new ODefaultFieldSelectionPage(this);
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir 			case GBW_STATE_OPTIONVALUES:
96*cdf0e10cSrcweir 				return new OOptionValuesPage(this);
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir 			case GBW_STATE_DBFIELD:
99*cdf0e10cSrcweir 				return new OOptionDBFieldPage(this);
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir 			case GBW_STATE_FINALIZE:
102*cdf0e10cSrcweir 				return new OFinalizeGBWPage(this);
103*cdf0e10cSrcweir 		}
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir 		return NULL;
106*cdf0e10cSrcweir 	}
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir 	//---------------------------------------------------------------------
109*cdf0e10cSrcweir 	WizardTypes::WizardState OGroupBoxWizard::determineNextState( ::svt::WizardTypes::WizardState _nCurrentState ) const
110*cdf0e10cSrcweir 	{
111*cdf0e10cSrcweir 		switch (_nCurrentState)
112*cdf0e10cSrcweir 		{
113*cdf0e10cSrcweir //			case GBW_STATE_DATASELECTION:
114*cdf0e10cSrcweir //				return GBW_STATE_OPTIONLIST;
115*cdf0e10cSrcweir //
116*cdf0e10cSrcweir 			case GBW_STATE_OPTIONLIST:
117*cdf0e10cSrcweir 				return GBW_STATE_DEFAULTOPTION;
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir 			case GBW_STATE_DEFAULTOPTION:
120*cdf0e10cSrcweir 				return GBW_STATE_OPTIONVALUES;
121*cdf0e10cSrcweir 
122*cdf0e10cSrcweir 			case GBW_STATE_OPTIONVALUES:
123*cdf0e10cSrcweir 				if (getContext().aFieldNames.getLength())
124*cdf0e10cSrcweir 					return GBW_STATE_DBFIELD;
125*cdf0e10cSrcweir 				else
126*cdf0e10cSrcweir 					return GBW_STATE_FINALIZE;
127*cdf0e10cSrcweir 
128*cdf0e10cSrcweir 			case GBW_STATE_DBFIELD:
129*cdf0e10cSrcweir 				return GBW_STATE_FINALIZE;
130*cdf0e10cSrcweir 		}
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir 		return WZS_INVALID_STATE;
133*cdf0e10cSrcweir 	}
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir 	//---------------------------------------------------------------------
136*cdf0e10cSrcweir 	void OGroupBoxWizard::enterState(::svt::WizardTypes::WizardState _nState)
137*cdf0e10cSrcweir 	{
138*cdf0e10cSrcweir 		// some stuff to do before calling the base class (modifying our settings)
139*cdf0e10cSrcweir 		switch (_nState)
140*cdf0e10cSrcweir 		{
141*cdf0e10cSrcweir 			case GBW_STATE_DEFAULTOPTION:
142*cdf0e10cSrcweir 				if (!m_bVisitedDefault)
143*cdf0e10cSrcweir 				{	// assume that the first of the radio buttons should be selected
144*cdf0e10cSrcweir 					DBG_ASSERT(m_aSettings.aLabels.size(), "OGroupBoxWizard::enterState: should never have reached this state!");
145*cdf0e10cSrcweir 					m_aSettings.sDefaultField = m_aSettings.aLabels[0];
146*cdf0e10cSrcweir 				}
147*cdf0e10cSrcweir 				m_bVisitedDefault = sal_True;
148*cdf0e10cSrcweir 				break;
149*cdf0e10cSrcweir 
150*cdf0e10cSrcweir 			case GBW_STATE_DBFIELD:
151*cdf0e10cSrcweir 				if (!m_bVisitedDB)
152*cdf0e10cSrcweir 				{	// try to generate a default for the DB field
153*cdf0e10cSrcweir 					// (simply use the first field in the DB names collection)
154*cdf0e10cSrcweir 					if (getContext().aFieldNames.getLength())
155*cdf0e10cSrcweir 						m_aSettings.sDBField = getContext().aFieldNames[0];
156*cdf0e10cSrcweir 				}
157*cdf0e10cSrcweir 				m_bVisitedDB = sal_True;
158*cdf0e10cSrcweir 				break;
159*cdf0e10cSrcweir 		}
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir 		// setting the def button .... to be done before the base class is called, too, 'cause the base class
162*cdf0e10cSrcweir 		// calls the pages, which are allowed to override our def button behaviour
163*cdf0e10cSrcweir 		defaultButton(GBW_STATE_FINALIZE == _nState ? WZB_FINISH : WZB_NEXT);
164*cdf0e10cSrcweir 
165*cdf0e10cSrcweir 		// allow "finish" on the last page only
166*cdf0e10cSrcweir 		enableButtons(WZB_FINISH, GBW_STATE_FINALIZE == _nState);
167*cdf0e10cSrcweir 		// allow previous on all pages but the first one
168*cdf0e10cSrcweir 		enableButtons(WZB_PREVIOUS, GBW_STATE_OPTIONLIST != _nState);
169*cdf0e10cSrcweir 		// allow next on all pages but the last one
170*cdf0e10cSrcweir 		enableButtons(WZB_NEXT, GBW_STATE_FINALIZE != _nState);
171*cdf0e10cSrcweir 
172*cdf0e10cSrcweir 		OControlWizard::enterState(_nState);
173*cdf0e10cSrcweir 	}
174*cdf0e10cSrcweir 
175*cdf0e10cSrcweir 	//---------------------------------------------------------------------
176*cdf0e10cSrcweir 	void OGroupBoxWizard::createRadios()
177*cdf0e10cSrcweir 	{
178*cdf0e10cSrcweir 		try
179*cdf0e10cSrcweir 		{
180*cdf0e10cSrcweir 			OOptionGroupLayouter aLayouter(getServiceFactory());
181*cdf0e10cSrcweir 			aLayouter.doLayout(getContext(), getSettings());
182*cdf0e10cSrcweir 		}
183*cdf0e10cSrcweir 		catch(Exception&)
184*cdf0e10cSrcweir 		{
185*cdf0e10cSrcweir 			DBG_ERROR("OGroupBoxWizard::createRadios: caught an exception while creating the radio shapes!");
186*cdf0e10cSrcweir 		}
187*cdf0e10cSrcweir 	}
188*cdf0e10cSrcweir 
189*cdf0e10cSrcweir 	//---------------------------------------------------------------------
190*cdf0e10cSrcweir 	sal_Bool OGroupBoxWizard::onFinish()
191*cdf0e10cSrcweir 	{
192*cdf0e10cSrcweir 		// commit the basic control setttings
193*cdf0e10cSrcweir 		commitControlSettings(&m_aSettings);
194*cdf0e10cSrcweir 
195*cdf0e10cSrcweir 		// create the radio buttons
196*cdf0e10cSrcweir 		createRadios();
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir 		return OControlWizard::onFinish();
199*cdf0e10cSrcweir 	}
200*cdf0e10cSrcweir 
201*cdf0e10cSrcweir 	//=====================================================================
202*cdf0e10cSrcweir 	//= ORadioSelectionPage
203*cdf0e10cSrcweir 	//=====================================================================
204*cdf0e10cSrcweir 	//---------------------------------------------------------------------
205*cdf0e10cSrcweir 	ORadioSelectionPage::ORadioSelectionPage( OControlWizard* _pParent )
206*cdf0e10cSrcweir 		:OGBWPage(_pParent, ModuleRes(RID_PAGE_GROUPRADIOSELECTION))
207*cdf0e10cSrcweir 		,m_aFrame				(this, ModuleRes(FL_DATA))
208*cdf0e10cSrcweir 		,m_aRadioNameLabel		(this, ModuleRes(FT_RADIOLABELS))
209*cdf0e10cSrcweir 		,m_aRadioName			(this, ModuleRes(ET_RADIOLABELS))
210*cdf0e10cSrcweir 		,m_aMoveRight			(this, ModuleRes(PB_MOVETORIGHT))
211*cdf0e10cSrcweir 		,m_aMoveLeft			(this, ModuleRes(PB_MOVETOLEFT))
212*cdf0e10cSrcweir 		,m_aExistingRadiosLabel	(this, ModuleRes(FT_RADIOBUTTONS))
213*cdf0e10cSrcweir 		,m_aExistingRadios		(this, ModuleRes(LB_RADIOBUTTONS))
214*cdf0e10cSrcweir 	{
215*cdf0e10cSrcweir 		FreeResource();
216*cdf0e10cSrcweir 
217*cdf0e10cSrcweir 		if (getContext().aFieldNames.getLength())
218*cdf0e10cSrcweir 		{
219*cdf0e10cSrcweir 			enableFormDatasourceDisplay();
220*cdf0e10cSrcweir 		}
221*cdf0e10cSrcweir 		else
222*cdf0e10cSrcweir 		{
223*cdf0e10cSrcweir 			adjustControlForNoDSDisplay(&m_aFrame);
224*cdf0e10cSrcweir 			adjustControlForNoDSDisplay(&m_aRadioNameLabel);
225*cdf0e10cSrcweir 			adjustControlForNoDSDisplay(&m_aRadioName);
226*cdf0e10cSrcweir 			adjustControlForNoDSDisplay(&m_aMoveRight);
227*cdf0e10cSrcweir 			adjustControlForNoDSDisplay(&m_aMoveLeft);
228*cdf0e10cSrcweir 			adjustControlForNoDSDisplay(&m_aExistingRadiosLabel);
229*cdf0e10cSrcweir 			adjustControlForNoDSDisplay(&m_aExistingRadios, sal_True);
230*cdf0e10cSrcweir 		}
231*cdf0e10cSrcweir 
232*cdf0e10cSrcweir 		m_aMoveLeft.SetClickHdl(LINK(this, ORadioSelectionPage, OnMoveEntry));
233*cdf0e10cSrcweir 		m_aMoveRight.SetClickHdl(LINK(this, ORadioSelectionPage, OnMoveEntry));
234*cdf0e10cSrcweir 		m_aRadioName.SetModifyHdl(LINK(this, ORadioSelectionPage, OnNameModified));
235*cdf0e10cSrcweir 		m_aExistingRadios.SetSelectHdl(LINK(this, ORadioSelectionPage, OnEntrySelected));
236*cdf0e10cSrcweir 
237*cdf0e10cSrcweir 		implCheckMoveButtons();
238*cdf0e10cSrcweir 		m_aExistingRadios.EnableMultiSelection(sal_True);
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir 		getDialog()->defaultButton(&m_aMoveRight);
241*cdf0e10cSrcweir 
242*cdf0e10cSrcweir 		m_aExistingRadios.SetAccessibleRelationMemberOf(&m_aExistingRadios);
243*cdf0e10cSrcweir 		m_aExistingRadios.SetAccessibleRelationLabeledBy(&m_aExistingRadiosLabel);
244*cdf0e10cSrcweir 	}
245*cdf0e10cSrcweir 
246*cdf0e10cSrcweir 	//---------------------------------------------------------------------
247*cdf0e10cSrcweir 	void ORadioSelectionPage::ActivatePage()
248*cdf0e10cSrcweir 	{
249*cdf0e10cSrcweir 		OGBWPage::ActivatePage();
250*cdf0e10cSrcweir 		m_aRadioName.GrabFocus();
251*cdf0e10cSrcweir 	}
252*cdf0e10cSrcweir 
253*cdf0e10cSrcweir 	//---------------------------------------------------------------------
254*cdf0e10cSrcweir 	void ORadioSelectionPage::initializePage()
255*cdf0e10cSrcweir 	{
256*cdf0e10cSrcweir 		OGBWPage::initializePage();
257*cdf0e10cSrcweir 
258*cdf0e10cSrcweir 		m_aRadioName.SetText(String());
259*cdf0e10cSrcweir 
260*cdf0e10cSrcweir 		// no need to initialize the list of radios here
261*cdf0e10cSrcweir 		// (we're the only one affecting this special setting, so it will be in the same state as last time this
262*cdf0e10cSrcweir 		// page was commited)
263*cdf0e10cSrcweir 
264*cdf0e10cSrcweir 		implCheckMoveButtons();
265*cdf0e10cSrcweir 	}
266*cdf0e10cSrcweir 
267*cdf0e10cSrcweir 	//---------------------------------------------------------------------
268*cdf0e10cSrcweir 	sal_Bool ORadioSelectionPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
269*cdf0e10cSrcweir 	{
270*cdf0e10cSrcweir 		if (!OGBWPage::commitPage(_eReason))
271*cdf0e10cSrcweir 			return sal_False;
272*cdf0e10cSrcweir 
273*cdf0e10cSrcweir 		// copy the names of the radio buttons to be inserted
274*cdf0e10cSrcweir 		// and initialize the values
275*cdf0e10cSrcweir 		OOptionGroupSettings& rSettings = getSettings();
276*cdf0e10cSrcweir 		rSettings.aLabels.clear();
277*cdf0e10cSrcweir 		rSettings.aValues.clear();
278*cdf0e10cSrcweir 		rSettings.aLabels.reserve(m_aExistingRadios.GetEntryCount());
279*cdf0e10cSrcweir 		rSettings.aValues.reserve(m_aExistingRadios.GetEntryCount());
280*cdf0e10cSrcweir 		for (::svt::WizardTypes::WizardState i=0; i<m_aExistingRadios.GetEntryCount(); ++i)
281*cdf0e10cSrcweir 		{
282*cdf0e10cSrcweir 			rSettings.aLabels.push_back(m_aExistingRadios.GetEntry(i));
283*cdf0e10cSrcweir 			rSettings.aValues.push_back(String::CreateFromInt32((sal_Int32)(i + 1)));
284*cdf0e10cSrcweir 		}
285*cdf0e10cSrcweir 
286*cdf0e10cSrcweir 		return sal_True;
287*cdf0e10cSrcweir 	}
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir 	//---------------------------------------------------------------------
290*cdf0e10cSrcweir 	IMPL_LINK( ORadioSelectionPage, OnMoveEntry, PushButton*, _pButton )
291*cdf0e10cSrcweir 	{
292*cdf0e10cSrcweir 		sal_Bool bMoveLeft = (&m_aMoveLeft == _pButton);
293*cdf0e10cSrcweir 		if (bMoveLeft)
294*cdf0e10cSrcweir 		{
295*cdf0e10cSrcweir 			while (m_aExistingRadios.GetSelectEntryCount())
296*cdf0e10cSrcweir 				m_aExistingRadios.RemoveEntry(m_aExistingRadios.GetSelectEntryPos(0));
297*cdf0e10cSrcweir 		}
298*cdf0e10cSrcweir 		else
299*cdf0e10cSrcweir 		{
300*cdf0e10cSrcweir 			m_aExistingRadios.InsertEntry(m_aRadioName.GetText());
301*cdf0e10cSrcweir 			m_aRadioName.SetText(String());
302*cdf0e10cSrcweir 		}
303*cdf0e10cSrcweir 
304*cdf0e10cSrcweir 		implCheckMoveButtons();
305*cdf0e10cSrcweir 
306*cdf0e10cSrcweir 		//adjust the focus
307*cdf0e10cSrcweir 		if (bMoveLeft)
308*cdf0e10cSrcweir 			m_aExistingRadios.GrabFocus();
309*cdf0e10cSrcweir 		else
310*cdf0e10cSrcweir 			m_aRadioName.GrabFocus();
311*cdf0e10cSrcweir 		return 0L;
312*cdf0e10cSrcweir 	}
313*cdf0e10cSrcweir 
314*cdf0e10cSrcweir 	//---------------------------------------------------------------------
315*cdf0e10cSrcweir 	IMPL_LINK( ORadioSelectionPage, OnEntrySelected, ListBox*, /*_pList*/ )
316*cdf0e10cSrcweir 	{
317*cdf0e10cSrcweir 		implCheckMoveButtons();
318*cdf0e10cSrcweir 		return 0L;
319*cdf0e10cSrcweir 	}
320*cdf0e10cSrcweir 
321*cdf0e10cSrcweir 	//---------------------------------------------------------------------
322*cdf0e10cSrcweir 	IMPL_LINK( ORadioSelectionPage, OnNameModified, Edit*, /*_pList*/ )
323*cdf0e10cSrcweir 	{
324*cdf0e10cSrcweir 		implCheckMoveButtons();
325*cdf0e10cSrcweir 		return 0L;
326*cdf0e10cSrcweir 	}
327*cdf0e10cSrcweir 
328*cdf0e10cSrcweir 	//---------------------------------------------------------------------
329*cdf0e10cSrcweir 	bool ORadioSelectionPage::canAdvance() const
330*cdf0e10cSrcweir 	{
331*cdf0e10cSrcweir 		return 0 != m_aExistingRadios.GetEntryCount();
332*cdf0e10cSrcweir 	}
333*cdf0e10cSrcweir 
334*cdf0e10cSrcweir 	//---------------------------------------------------------------------
335*cdf0e10cSrcweir 	void ORadioSelectionPage::implCheckMoveButtons()
336*cdf0e10cSrcweir 	{
337*cdf0e10cSrcweir 		sal_Bool bHaveSome = (0 != m_aExistingRadios.GetEntryCount());
338*cdf0e10cSrcweir 		sal_Bool bSelectedSome = (0 != m_aExistingRadios.GetSelectEntryCount());
339*cdf0e10cSrcweir 		sal_Bool bUnfinishedInput = (0 != m_aRadioName.GetText().Len());
340*cdf0e10cSrcweir 
341*cdf0e10cSrcweir 		m_aMoveLeft.Enable(bSelectedSome);
342*cdf0e10cSrcweir 		m_aMoveRight.Enable(bUnfinishedInput);
343*cdf0e10cSrcweir 
344*cdf0e10cSrcweir 		getDialog()->enableButtons(WZB_NEXT, bHaveSome);
345*cdf0e10cSrcweir 
346*cdf0e10cSrcweir 		if (bUnfinishedInput)
347*cdf0e10cSrcweir 		{
348*cdf0e10cSrcweir 			if (0 == (m_aMoveRight.GetStyle() & WB_DEFBUTTON))
349*cdf0e10cSrcweir 				getDialog()->defaultButton(&m_aMoveRight);
350*cdf0e10cSrcweir 		}
351*cdf0e10cSrcweir 		else
352*cdf0e10cSrcweir 		{
353*cdf0e10cSrcweir 			if (WB_DEFBUTTON == (m_aMoveRight.GetStyle() & WB_DEFBUTTON))
354*cdf0e10cSrcweir 				getDialog()->defaultButton(WZB_NEXT);
355*cdf0e10cSrcweir 		}
356*cdf0e10cSrcweir 	}
357*cdf0e10cSrcweir 
358*cdf0e10cSrcweir 	//=====================================================================
359*cdf0e10cSrcweir 	//= ODefaultFieldSelectionPage
360*cdf0e10cSrcweir 	//=====================================================================
361*cdf0e10cSrcweir 	//---------------------------------------------------------------------
362*cdf0e10cSrcweir 	ODefaultFieldSelectionPage::ODefaultFieldSelectionPage( OControlWizard* _pParent )
363*cdf0e10cSrcweir 		:OMaybeListSelectionPage(_pParent, ModuleRes(RID_PAGE_DEFAULTFIELDSELECTION))
364*cdf0e10cSrcweir 		,m_aFrame					(this, ModuleRes(FL_DEFAULTSELECTION))
365*cdf0e10cSrcweir 		,m_aDefaultSelectionLabel	(this, ModuleRes(FT_DEFAULTSELECTION))
366*cdf0e10cSrcweir 		,m_aDefSelYes				(this, ModuleRes(RB_DEFSELECTION_YES))
367*cdf0e10cSrcweir 		,m_aDefSelNo				(this, ModuleRes(RB_DEFSELECTION_NO))
368*cdf0e10cSrcweir 		,m_aDefSelection			(this, ModuleRes(LB_DEFSELECTIONFIELD))
369*cdf0e10cSrcweir 	{
370*cdf0e10cSrcweir 		FreeResource();
371*cdf0e10cSrcweir 
372*cdf0e10cSrcweir 		announceControls(m_aDefSelYes, m_aDefSelNo, m_aDefSelection);
373*cdf0e10cSrcweir 		m_aDefSelection.SetDropDownLineCount(10);
374*cdf0e10cSrcweir 		m_aDefSelection.SetAccessibleRelationLabeledBy( &m_aDefSelYes );
375*cdf0e10cSrcweir 		m_aDefSelection.SetAccessibleRelationMemberOf(&m_aDefaultSelectionLabel);
376*cdf0e10cSrcweir 	}
377*cdf0e10cSrcweir 
378*cdf0e10cSrcweir 	//---------------------------------------------------------------------
379*cdf0e10cSrcweir 	void ODefaultFieldSelectionPage::initializePage()
380*cdf0e10cSrcweir 	{
381*cdf0e10cSrcweir 		OMaybeListSelectionPage::initializePage();
382*cdf0e10cSrcweir 
383*cdf0e10cSrcweir 		const OOptionGroupSettings& rSettings = getSettings();
384*cdf0e10cSrcweir 
385*cdf0e10cSrcweir 		// fill the listbox
386*cdf0e10cSrcweir 		m_aDefSelection.Clear();
387*cdf0e10cSrcweir 		for	(	ConstStringArrayIterator aLoop = rSettings.aLabels.begin();
388*cdf0e10cSrcweir 				aLoop != rSettings.aLabels.end();
389*cdf0e10cSrcweir 				++aLoop
390*cdf0e10cSrcweir 			)
391*cdf0e10cSrcweir 			m_aDefSelection.InsertEntry(*aLoop);
392*cdf0e10cSrcweir 
393*cdf0e10cSrcweir 
394*cdf0e10cSrcweir 		implInitialize(rSettings.sDefaultField);
395*cdf0e10cSrcweir 	}
396*cdf0e10cSrcweir 
397*cdf0e10cSrcweir 	//---------------------------------------------------------------------
398*cdf0e10cSrcweir 	sal_Bool ODefaultFieldSelectionPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
399*cdf0e10cSrcweir 	{
400*cdf0e10cSrcweir 		if (!OMaybeListSelectionPage::commitPage(_eReason))
401*cdf0e10cSrcweir 			return sal_False;
402*cdf0e10cSrcweir 
403*cdf0e10cSrcweir 		OOptionGroupSettings& rSettings = getSettings();
404*cdf0e10cSrcweir 		implCommit(rSettings.sDefaultField);
405*cdf0e10cSrcweir 
406*cdf0e10cSrcweir 		return sal_True;
407*cdf0e10cSrcweir 	}
408*cdf0e10cSrcweir 
409*cdf0e10cSrcweir 	//=====================================================================
410*cdf0e10cSrcweir 	//= OOptionValuesPage
411*cdf0e10cSrcweir 	//=====================================================================
412*cdf0e10cSrcweir 	//---------------------------------------------------------------------
413*cdf0e10cSrcweir 	OOptionValuesPage::OOptionValuesPage( OControlWizard* _pParent )
414*cdf0e10cSrcweir 		:OGBWPage(_pParent, ModuleRes(RID_PAGE_OPTIONVALUES))
415*cdf0e10cSrcweir 		,m_aFrame				(this, ModuleRes(FL_OPTIONVALUES))
416*cdf0e10cSrcweir 		,m_aDescription			(this, ModuleRes(FT_OPTIONVALUES_EXPL))
417*cdf0e10cSrcweir 		,m_aValueLabel			(this, ModuleRes(FT_OPTIONVALUES))
418*cdf0e10cSrcweir 		,m_aValue				(this, ModuleRes(ET_OPTIONVALUE))
419*cdf0e10cSrcweir 		,m_aOptionsLabel		(this, ModuleRes(FT_RADIOBUTTONS))
420*cdf0e10cSrcweir 		,m_aOptions				(this, ModuleRes(LB_RADIOBUTTONS))
421*cdf0e10cSrcweir 		,m_nLastSelection((::svt::WizardTypes::WizardState)-1)
422*cdf0e10cSrcweir 	{
423*cdf0e10cSrcweir 		FreeResource();
424*cdf0e10cSrcweir 
425*cdf0e10cSrcweir 		m_aOptions.SetSelectHdl(LINK(this, OOptionValuesPage, OnOptionSelected));
426*cdf0e10cSrcweir 
427*cdf0e10cSrcweir 		m_aOptions.SetAccessibleRelationMemberOf(&m_aOptions);
428*cdf0e10cSrcweir 		m_aOptions.SetAccessibleRelationLabeledBy(&m_aOptionsLabel);
429*cdf0e10cSrcweir 	}
430*cdf0e10cSrcweir 
431*cdf0e10cSrcweir 	//---------------------------------------------------------------------
432*cdf0e10cSrcweir 	IMPL_LINK( OOptionValuesPage, OnOptionSelected, ListBox*, /*NOTINTERESTEDIN*/ )
433*cdf0e10cSrcweir 	{
434*cdf0e10cSrcweir 		implTraveledOptions();
435*cdf0e10cSrcweir 		return 0L;
436*cdf0e10cSrcweir 	}
437*cdf0e10cSrcweir 
438*cdf0e10cSrcweir 	//---------------------------------------------------------------------
439*cdf0e10cSrcweir 	void OOptionValuesPage::ActivatePage()
440*cdf0e10cSrcweir 	{
441*cdf0e10cSrcweir 		OGBWPage::ActivatePage();
442*cdf0e10cSrcweir 		m_aValue.GrabFocus();
443*cdf0e10cSrcweir 	}
444*cdf0e10cSrcweir 
445*cdf0e10cSrcweir 	//---------------------------------------------------------------------
446*cdf0e10cSrcweir 	void OOptionValuesPage::implTraveledOptions()
447*cdf0e10cSrcweir 	{
448*cdf0e10cSrcweir 		if ((::svt::WizardTypes::WizardState)-1 != m_nLastSelection)
449*cdf0e10cSrcweir 		{
450*cdf0e10cSrcweir 			// save the value for the last option
451*cdf0e10cSrcweir 			DBG_ASSERT((size_t)m_nLastSelection < m_aUncommittedValues.size(), "OOptionValuesPage::implTraveledOptions: invalid previous selection index!");
452*cdf0e10cSrcweir 			m_aUncommittedValues[m_nLastSelection] = m_aValue.GetText();
453*cdf0e10cSrcweir 		}
454*cdf0e10cSrcweir 
455*cdf0e10cSrcweir 		m_nLastSelection = m_aOptions.GetSelectEntryPos();
456*cdf0e10cSrcweir 		DBG_ASSERT((size_t)m_nLastSelection < m_aUncommittedValues.size(), "OOptionValuesPage::implTraveledOptions: invalid new selection index!");
457*cdf0e10cSrcweir 		m_aValue.SetText(m_aUncommittedValues[m_nLastSelection]);
458*cdf0e10cSrcweir 	}
459*cdf0e10cSrcweir 
460*cdf0e10cSrcweir 	//---------------------------------------------------------------------
461*cdf0e10cSrcweir 	void OOptionValuesPage::initializePage()
462*cdf0e10cSrcweir 	{
463*cdf0e10cSrcweir 		OGBWPage::initializePage();
464*cdf0e10cSrcweir 
465*cdf0e10cSrcweir 		const OOptionGroupSettings& rSettings = getSettings();
466*cdf0e10cSrcweir 		DBG_ASSERT(rSettings.aLabels.size(), "OOptionValuesPage::initializePage: no options!!");
467*cdf0e10cSrcweir 		DBG_ASSERT(rSettings.aLabels.size() == rSettings.aValues.size(), "OOptionValuesPage::initializePage: inconsistent data!");
468*cdf0e10cSrcweir 
469*cdf0e10cSrcweir 		// fill the list with all available options
470*cdf0e10cSrcweir 		m_aOptions.Clear();
471*cdf0e10cSrcweir 		m_nLastSelection = -1;
472*cdf0e10cSrcweir 		for	(	ConstStringArrayIterator aLoop = rSettings.aLabels.begin();
473*cdf0e10cSrcweir 				aLoop != rSettings.aLabels.end();
474*cdf0e10cSrcweir 				++aLoop
475*cdf0e10cSrcweir 			)
476*cdf0e10cSrcweir 			m_aOptions.InsertEntry(*aLoop);
477*cdf0e10cSrcweir 
478*cdf0e10cSrcweir 		// remember the values ... can't set them directly in the settings without the explicit commit call
479*cdf0e10cSrcweir 		// so we need have a copy of the values
480*cdf0e10cSrcweir 		m_aUncommittedValues = rSettings.aValues;
481*cdf0e10cSrcweir 
482*cdf0e10cSrcweir 		// select the first entry
483*cdf0e10cSrcweir 		m_aOptions.SelectEntryPos(0);
484*cdf0e10cSrcweir 		implTraveledOptions();
485*cdf0e10cSrcweir 	}
486*cdf0e10cSrcweir 
487*cdf0e10cSrcweir 	//---------------------------------------------------------------------
488*cdf0e10cSrcweir 	sal_Bool OOptionValuesPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
489*cdf0e10cSrcweir 	{
490*cdf0e10cSrcweir 		if (!OGBWPage::commitPage(_eReason))
491*cdf0e10cSrcweir 			return sal_False;
492*cdf0e10cSrcweir 
493*cdf0e10cSrcweir 		OOptionGroupSettings& rSettings = getSettings();
494*cdf0e10cSrcweir 
495*cdf0e10cSrcweir 		// commit the current value
496*cdf0e10cSrcweir 		implTraveledOptions();
497*cdf0e10cSrcweir 		// copy the uncommitted values
498*cdf0e10cSrcweir 		rSettings.aValues = m_aUncommittedValues;
499*cdf0e10cSrcweir 
500*cdf0e10cSrcweir 		return sal_True;
501*cdf0e10cSrcweir 	}
502*cdf0e10cSrcweir 
503*cdf0e10cSrcweir 	//=====================================================================
504*cdf0e10cSrcweir 	//= OOptionDBFieldPage
505*cdf0e10cSrcweir 	//=====================================================================
506*cdf0e10cSrcweir 	//---------------------------------------------------------------------
507*cdf0e10cSrcweir 	OOptionDBFieldPage::OOptionDBFieldPage( OControlWizard* _pParent )
508*cdf0e10cSrcweir 		:ODBFieldPage(_pParent)
509*cdf0e10cSrcweir 	{
510*cdf0e10cSrcweir 		setDescriptionText(String(ModuleRes(RID_STR_GROUPWIZ_DBFIELD)));
511*cdf0e10cSrcweir 	}
512*cdf0e10cSrcweir 
513*cdf0e10cSrcweir 	//---------------------------------------------------------------------
514*cdf0e10cSrcweir 	String& OOptionDBFieldPage::getDBFieldSetting()
515*cdf0e10cSrcweir 	{
516*cdf0e10cSrcweir 		return getSettings().sDBField;
517*cdf0e10cSrcweir 	}
518*cdf0e10cSrcweir 
519*cdf0e10cSrcweir 	//=====================================================================
520*cdf0e10cSrcweir 	//= OFinalizeGBWPage
521*cdf0e10cSrcweir 	//=====================================================================
522*cdf0e10cSrcweir 	//---------------------------------------------------------------------
523*cdf0e10cSrcweir 	OFinalizeGBWPage::OFinalizeGBWPage( OControlWizard* _pParent )
524*cdf0e10cSrcweir 		:OGBWPage(_pParent, ModuleRes(RID_PAGE_OPTIONS_FINAL))
525*cdf0e10cSrcweir 		,m_aFrame			(this, ModuleRes(FL_NAMEIT))
526*cdf0e10cSrcweir 		,m_aNameLabel		(this, ModuleRes(FT_NAMEIT))
527*cdf0e10cSrcweir 		,m_aName			(this, ModuleRes(ET_NAMEIT))
528*cdf0e10cSrcweir 		,m_aThatsAll		(this, ModuleRes(FT_THATSALL))
529*cdf0e10cSrcweir 	{
530*cdf0e10cSrcweir 		FreeResource();
531*cdf0e10cSrcweir 	}
532*cdf0e10cSrcweir 
533*cdf0e10cSrcweir 	//---------------------------------------------------------------------
534*cdf0e10cSrcweir 	void OFinalizeGBWPage::ActivatePage()
535*cdf0e10cSrcweir 	{
536*cdf0e10cSrcweir 		OGBWPage::ActivatePage();
537*cdf0e10cSrcweir 		m_aName.GrabFocus();
538*cdf0e10cSrcweir 	}
539*cdf0e10cSrcweir 
540*cdf0e10cSrcweir 	//---------------------------------------------------------------------
541*cdf0e10cSrcweir 	bool OFinalizeGBWPage::canAdvance() const
542*cdf0e10cSrcweir 	{
543*cdf0e10cSrcweir 		return false;
544*cdf0e10cSrcweir 	}
545*cdf0e10cSrcweir 
546*cdf0e10cSrcweir 	//---------------------------------------------------------------------
547*cdf0e10cSrcweir 	void OFinalizeGBWPage::initializePage()
548*cdf0e10cSrcweir 	{
549*cdf0e10cSrcweir 		OGBWPage::initializePage();
550*cdf0e10cSrcweir 
551*cdf0e10cSrcweir 		const OOptionGroupSettings& rSettings = getSettings();
552*cdf0e10cSrcweir 		m_aName.SetText(rSettings.sControlLabel);
553*cdf0e10cSrcweir 	}
554*cdf0e10cSrcweir 
555*cdf0e10cSrcweir 	//---------------------------------------------------------------------
556*cdf0e10cSrcweir 	sal_Bool OFinalizeGBWPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
557*cdf0e10cSrcweir 	{
558*cdf0e10cSrcweir 		if (!OGBWPage::commitPage(_eReason))
559*cdf0e10cSrcweir 			return sal_False;
560*cdf0e10cSrcweir 
561*cdf0e10cSrcweir 		getSettings().sControlLabel = m_aName.GetText();
562*cdf0e10cSrcweir 
563*cdf0e10cSrcweir 		return sal_True;
564*cdf0e10cSrcweir 	}
565*cdf0e10cSrcweir 
566*cdf0e10cSrcweir //.........................................................................
567*cdf0e10cSrcweir }	// namespace dbp
568*cdf0e10cSrcweir //.........................................................................
569*cdf0e10cSrcweir 
570