1*2a97ec55SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2a97ec55SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2a97ec55SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2a97ec55SAndrew Rist  * distributed with this work for additional information
6*2a97ec55SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2a97ec55SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2a97ec55SAndrew Rist  * "License"); you may not use this file except in compliance
9*2a97ec55SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2a97ec55SAndrew Rist  *
11*2a97ec55SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2a97ec55SAndrew Rist  *
13*2a97ec55SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2a97ec55SAndrew Rist  * software distributed under the License is distributed on an
15*2a97ec55SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2a97ec55SAndrew Rist  * KIND, either express or implied.  See the License for the
17*2a97ec55SAndrew Rist  * specific language governing permissions and limitations
18*2a97ec55SAndrew Rist  * under the License.
19*2a97ec55SAndrew Rist  *
20*2a97ec55SAndrew Rist  *************************************************************/
21*2a97ec55SAndrew Rist 
22*2a97ec55SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_extensions.hxx"
26cdf0e10cSrcweir #include "listcombowizard.hxx"
27cdf0e10cSrcweir #include "commonpagesdbp.hxx"
28cdf0e10cSrcweir #include <com/sun/star/sdbc/XConnection.hpp>
29cdf0e10cSrcweir #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
30cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
31cdf0e10cSrcweir #include <com/sun/star/form/ListSourceType.hpp>
32cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
33cdf0e10cSrcweir #include <tools/debug.hxx>
34cdf0e10cSrcweir #include <vcl/msgbox.hxx>
35cdf0e10cSrcweir #include <connectivity/dbtools.hxx>
36cdf0e10cSrcweir #include "dbpilots.hrc"
37cdf0e10cSrcweir #include <comphelper/extract.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir //.........................................................................
40cdf0e10cSrcweir namespace dbp
41cdf0e10cSrcweir {
42cdf0e10cSrcweir //.........................................................................
43cdf0e10cSrcweir 
44cdf0e10cSrcweir 	using namespace ::com::sun::star::uno;
45cdf0e10cSrcweir 	using namespace ::com::sun::star::lang;
46cdf0e10cSrcweir 	using namespace ::com::sun::star::beans;
47cdf0e10cSrcweir 	using namespace ::com::sun::star::sdbc;
48cdf0e10cSrcweir 	using namespace ::com::sun::star::sdbcx;
49cdf0e10cSrcweir 	using namespace ::com::sun::star::container;
50cdf0e10cSrcweir 	using namespace ::com::sun::star::form;
51cdf0e10cSrcweir 	using namespace ::svt;
52cdf0e10cSrcweir 	using namespace ::dbtools;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir 	//=====================================================================
55cdf0e10cSrcweir 	//= OListComboWizard
56cdf0e10cSrcweir 	//=====================================================================
57cdf0e10cSrcweir 	//---------------------------------------------------------------------
OListComboWizard(Window * _pParent,const Reference<XPropertySet> & _rxObjectModel,const Reference<XMultiServiceFactory> & _rxORB)58cdf0e10cSrcweir 	OListComboWizard::OListComboWizard( Window* _pParent,
59cdf0e10cSrcweir 			const Reference< XPropertySet >& _rxObjectModel, const Reference< XMultiServiceFactory >& _rxORB )
60cdf0e10cSrcweir 		:OControlWizard(_pParent, ModuleRes(RID_DLG_LISTCOMBOWIZARD), _rxObjectModel, _rxORB)
61cdf0e10cSrcweir 		,m_bListBox(sal_False)
62cdf0e10cSrcweir 		,m_bHadDataSelection(sal_True)
63cdf0e10cSrcweir 	{
64cdf0e10cSrcweir 		initControlSettings(&m_aSettings);
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 		m_pPrevPage->SetHelpId(HID_LISTWIZARD_PREVIOUS);
67cdf0e10cSrcweir 		m_pNextPage->SetHelpId(HID_LISTWIZARD_NEXT);
68cdf0e10cSrcweir 		m_pCancel->SetHelpId(HID_LISTWIZARD_CANCEL);
69cdf0e10cSrcweir 		m_pFinish->SetHelpId(HID_LISTWIZARD_FINISH);
70cdf0e10cSrcweir 
71cdf0e10cSrcweir 		// if we do not need the data source selection page ...
72cdf0e10cSrcweir 		if (!needDatasourceSelection())
73cdf0e10cSrcweir 		{	// ... skip it!
74cdf0e10cSrcweir 			skip(1);
75cdf0e10cSrcweir 			m_bHadDataSelection = sal_False;
76cdf0e10cSrcweir 		}
77cdf0e10cSrcweir 	}
78cdf0e10cSrcweir 
79cdf0e10cSrcweir 	//---------------------------------------------------------------------
approveControl(sal_Int16 _nClassId)80cdf0e10cSrcweir 	sal_Bool OListComboWizard::approveControl(sal_Int16 _nClassId)
81cdf0e10cSrcweir 	{
82cdf0e10cSrcweir 		switch (_nClassId)
83cdf0e10cSrcweir 		{
84cdf0e10cSrcweir 			case FormComponentType::LISTBOX:
85cdf0e10cSrcweir 				m_bListBox = sal_True;
86cdf0e10cSrcweir 				setTitleBase(String(ModuleRes(RID_STR_LISTWIZARD_TITLE)));
87cdf0e10cSrcweir 				return sal_True;
88cdf0e10cSrcweir 			case FormComponentType::COMBOBOX:
89cdf0e10cSrcweir 				m_bListBox = sal_False;
90cdf0e10cSrcweir 				setTitleBase(String(ModuleRes(RID_STR_COMBOWIZARD_TITLE)));
91cdf0e10cSrcweir 				return sal_True;
92cdf0e10cSrcweir 		}
93cdf0e10cSrcweir 		return sal_False;
94cdf0e10cSrcweir 	}
95cdf0e10cSrcweir 
96cdf0e10cSrcweir 	//---------------------------------------------------------------------
createPage(WizardState _nState)97cdf0e10cSrcweir 	OWizardPage* OListComboWizard::createPage(WizardState _nState)
98cdf0e10cSrcweir 	{
99cdf0e10cSrcweir 		switch (_nState)
100cdf0e10cSrcweir 		{
101cdf0e10cSrcweir 			case LCW_STATE_DATASOURCE_SELECTION:
102cdf0e10cSrcweir 				return new OTableSelectionPage(this);
103cdf0e10cSrcweir 			case LCW_STATE_TABLESELECTION:
104cdf0e10cSrcweir 				return new OContentTableSelection(this);
105cdf0e10cSrcweir 			case LCW_STATE_FIELDSELECTION:
106cdf0e10cSrcweir 				return new OContentFieldSelection(this);
107cdf0e10cSrcweir 			case LCW_STATE_FIELDLINK:
108cdf0e10cSrcweir 				return new OLinkFieldsPage(this);
109cdf0e10cSrcweir 			case LCW_STATE_COMBODBFIELD:
110cdf0e10cSrcweir 				return new OComboDBFieldPage(this);
111cdf0e10cSrcweir 		}
112cdf0e10cSrcweir 
113cdf0e10cSrcweir 		return NULL;
114cdf0e10cSrcweir 	}
115cdf0e10cSrcweir 
116cdf0e10cSrcweir 	//---------------------------------------------------------------------
determineNextState(WizardState _nCurrentState) const117cdf0e10cSrcweir     WizardTypes::WizardState OListComboWizard::determineNextState( WizardState _nCurrentState ) const
118cdf0e10cSrcweir 	{
119cdf0e10cSrcweir 		switch (_nCurrentState)
120cdf0e10cSrcweir 		{
121cdf0e10cSrcweir 			case LCW_STATE_DATASOURCE_SELECTION:
122cdf0e10cSrcweir 				return LCW_STATE_TABLESELECTION;
123cdf0e10cSrcweir 			case LCW_STATE_TABLESELECTION:
124cdf0e10cSrcweir 				return LCW_STATE_FIELDSELECTION;
125cdf0e10cSrcweir 			case LCW_STATE_FIELDSELECTION:
126cdf0e10cSrcweir 				return getFinalState();
127cdf0e10cSrcweir 		}
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 		return WZS_INVALID_STATE;
130cdf0e10cSrcweir 	}
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 	//---------------------------------------------------------------------
enterState(WizardState _nState)133cdf0e10cSrcweir 	void OListComboWizard::enterState(WizardState _nState)
134cdf0e10cSrcweir 	{
135cdf0e10cSrcweir 		OControlWizard::enterState(_nState);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 		enableButtons(WZB_PREVIOUS, m_bHadDataSelection ? (LCW_STATE_DATASOURCE_SELECTION < _nState) : LCW_STATE_TABLESELECTION < _nState);
138cdf0e10cSrcweir 		enableButtons(WZB_NEXT, getFinalState() != _nState);
139cdf0e10cSrcweir 		if (_nState < getFinalState())
140cdf0e10cSrcweir 			enableButtons(WZB_FINISH, sal_False);
141cdf0e10cSrcweir 
142cdf0e10cSrcweir 		if (getFinalState() == _nState)
143cdf0e10cSrcweir 			defaultButton(WZB_FINISH);
144cdf0e10cSrcweir 	}
145cdf0e10cSrcweir 
146cdf0e10cSrcweir 	//---------------------------------------------------------------------
leaveState(WizardState _nState)147cdf0e10cSrcweir 	sal_Bool OListComboWizard::leaveState(WizardState _nState)
148cdf0e10cSrcweir 	{
149cdf0e10cSrcweir 		if (!OControlWizard::leaveState(_nState))
150cdf0e10cSrcweir 			return sal_False;
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 		if (getFinalState() == _nState)
153cdf0e10cSrcweir 			defaultButton(WZB_NEXT);
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 		return sal_True;
156cdf0e10cSrcweir 	}
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 	//---------------------------------------------------------------------
implApplySettings()159cdf0e10cSrcweir 	void OListComboWizard::implApplySettings()
160cdf0e10cSrcweir 	{
161cdf0e10cSrcweir 		try
162cdf0e10cSrcweir 		{
163cdf0e10cSrcweir 			// for quoting identifiers, we need the connection meta data
164cdf0e10cSrcweir             Reference< XConnection > xConn = getFormConnection();
165cdf0e10cSrcweir 			DBG_ASSERT(xConn.is(), "OListComboWizard::implApplySettings: no connection, unable to quote!");
166cdf0e10cSrcweir 			Reference< XDatabaseMetaData > xMetaData;
167cdf0e10cSrcweir 			if (xConn.is())
168cdf0e10cSrcweir 				xMetaData = xConn->getMetaData();
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 			// do some quotings
171cdf0e10cSrcweir 			if (xMetaData.is())
172cdf0e10cSrcweir 			{
173cdf0e10cSrcweir 				::rtl::OUString sQuoteString = xMetaData->getIdentifierQuoteString();
174cdf0e10cSrcweir 				if (isListBox()) // only when we have a listbox this should be not empty
175cdf0e10cSrcweir 					getSettings().sLinkedListField = quoteName(sQuoteString, getSettings().sLinkedListField);
176cdf0e10cSrcweir 
177cdf0e10cSrcweir                 ::rtl::OUString sCatalog, sSchema, sName;
178cdf0e10cSrcweir                 ::dbtools::qualifiedNameComponents( xMetaData, getSettings().sListContentTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation );
179cdf0e10cSrcweir                 getSettings().sListContentTable = ::dbtools::composeTableNameForSelect( xConn, sCatalog, sSchema, sName );
180cdf0e10cSrcweir 
181cdf0e10cSrcweir 				getSettings().sListContentField = quoteName(sQuoteString, getSettings().sListContentField);
182cdf0e10cSrcweir 			}
183cdf0e10cSrcweir 
184cdf0e10cSrcweir 			// ListSourceType: SQL
185cdf0e10cSrcweir 			getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("ListSourceType"), makeAny((sal_Int32)ListSourceType_SQL));
186cdf0e10cSrcweir 
187cdf0e10cSrcweir 			if (isListBox())
188cdf0e10cSrcweir 			{
189cdf0e10cSrcweir 				// BoundColumn: 1
190cdf0e10cSrcweir 				getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("BoundColumn"), makeAny((sal_Int16)1));
191cdf0e10cSrcweir 
192cdf0e10cSrcweir 				// build the statement to set as list source
193cdf0e10cSrcweir 				String sStatement;
194cdf0e10cSrcweir 				sStatement.AppendAscii("SELECT ");
195cdf0e10cSrcweir 				sStatement += getSettings().sListContentField;
196cdf0e10cSrcweir 				sStatement.AppendAscii(", ");
197cdf0e10cSrcweir 				sStatement += getSettings().sLinkedListField;
198cdf0e10cSrcweir 				sStatement.AppendAscii(" FROM ");
199cdf0e10cSrcweir 				sStatement += getSettings().sListContentTable;
200cdf0e10cSrcweir 				Sequence< ::rtl::OUString > aListSource(1);
201cdf0e10cSrcweir 				aListSource[0] = sStatement;
202cdf0e10cSrcweir 				getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("ListSource"), makeAny(aListSource));
203cdf0e10cSrcweir 			}
204cdf0e10cSrcweir 			else
205cdf0e10cSrcweir 			{
206cdf0e10cSrcweir 				// build the statement to set as list source
207cdf0e10cSrcweir 				String sStatement;
208cdf0e10cSrcweir 				sStatement.AppendAscii("SELECT DISTINCT ");
209cdf0e10cSrcweir 				sStatement += getSettings().sListContentField;
210cdf0e10cSrcweir 				sStatement.AppendAscii(" FROM ");
211cdf0e10cSrcweir 				sStatement += getSettings().sListContentTable;
212cdf0e10cSrcweir 				getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("ListSource"), makeAny(::rtl::OUString(sStatement)));
213cdf0e10cSrcweir 			}
214cdf0e10cSrcweir 
215cdf0e10cSrcweir 			// the bound field
216cdf0e10cSrcweir 			getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("DataField"), makeAny(::rtl::OUString(getSettings().sLinkedFormField)));
217cdf0e10cSrcweir 		}
218cdf0e10cSrcweir 		catch(Exception&)
219cdf0e10cSrcweir 		{
220cdf0e10cSrcweir 			DBG_ERROR("OListComboWizard::implApplySettings: could not set the property values for the listbox!");
221cdf0e10cSrcweir 		}
222cdf0e10cSrcweir 	}
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 	//---------------------------------------------------------------------
onFinish()225cdf0e10cSrcweir 	sal_Bool OListComboWizard::onFinish()
226cdf0e10cSrcweir 	{
227cdf0e10cSrcweir 		if ( !OControlWizard::onFinish() )
228cdf0e10cSrcweir 			return sal_False;
229cdf0e10cSrcweir 
230cdf0e10cSrcweir 		implApplySettings();
231cdf0e10cSrcweir 		return sal_True;
232cdf0e10cSrcweir 	}
233cdf0e10cSrcweir 
234cdf0e10cSrcweir 	//=====================================================================
235cdf0e10cSrcweir 	//= OLCPage
236cdf0e10cSrcweir 	//=====================================================================
237cdf0e10cSrcweir 	//---------------------------------------------------------------------
getTables(sal_Bool _bNeedIt)238cdf0e10cSrcweir 	Reference< XNameAccess > OLCPage::getTables(sal_Bool _bNeedIt)
239cdf0e10cSrcweir 	{
240cdf0e10cSrcweir 		Reference< XConnection > xConn = getFormConnection();
241cdf0e10cSrcweir 		DBG_ASSERT(!_bNeedIt || xConn.is(), "OLCPage::getTables: should have an active connection when reaching this page!");
242cdf0e10cSrcweir         (void)_bNeedIt;
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 		Reference< XTablesSupplier > xSuppTables(xConn, UNO_QUERY);
245cdf0e10cSrcweir 		Reference< XNameAccess > xTables;
246cdf0e10cSrcweir 		if (xSuppTables.is())
247cdf0e10cSrcweir 			xTables = xSuppTables->getTables();
248cdf0e10cSrcweir 
249cdf0e10cSrcweir 		DBG_ASSERT(!_bNeedIt || xTables.is() || !xConn.is(), "OLCPage::getTables: got no tables from the connection!");
250cdf0e10cSrcweir 
251cdf0e10cSrcweir 		return xTables;
252cdf0e10cSrcweir 	}
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 	//---------------------------------------------------------------------
getTableFields(sal_Bool _bNeedIt)255cdf0e10cSrcweir 	Sequence< ::rtl::OUString > OLCPage::getTableFields(sal_Bool _bNeedIt)
256cdf0e10cSrcweir 	{
257cdf0e10cSrcweir 		Reference< XNameAccess > xTables = getTables(_bNeedIt);
258cdf0e10cSrcweir 		Sequence< ::rtl::OUString > aColumnNames;
259cdf0e10cSrcweir 		if (xTables.is())
260cdf0e10cSrcweir 		{
261cdf0e10cSrcweir 			try
262cdf0e10cSrcweir 			{
263cdf0e10cSrcweir 				// the list table as XColumnsSupplier
264cdf0e10cSrcweir 				Reference< XColumnsSupplier > xSuppCols;
265cdf0e10cSrcweir 				xTables->getByName(getSettings().sListContentTable) >>= xSuppCols;
266cdf0e10cSrcweir 				DBG_ASSERT(!_bNeedIt || xSuppCols.is(), "OLCPage::getTableFields: no columns supplier!");
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 				// the columns
269cdf0e10cSrcweir 				Reference< XNameAccess > xColumns;
270cdf0e10cSrcweir 				if (xSuppCols.is())
271cdf0e10cSrcweir 					xColumns = xSuppCols->getColumns();
272cdf0e10cSrcweir 
273cdf0e10cSrcweir 				// the column names
274cdf0e10cSrcweir 				if (xColumns.is())
275cdf0e10cSrcweir 					aColumnNames = xColumns->getElementNames();
276cdf0e10cSrcweir 			}
277cdf0e10cSrcweir 			catch(Exception&)
278cdf0e10cSrcweir 			{
279cdf0e10cSrcweir 				DBG_ASSERT(!_bNeedIt, "OLinkFieldsPage::initializePage: caught an exception while retrieving the columns!");
280cdf0e10cSrcweir 			}
281cdf0e10cSrcweir 		}
282cdf0e10cSrcweir 		return aColumnNames;
283cdf0e10cSrcweir 	}
284cdf0e10cSrcweir 
285cdf0e10cSrcweir 	//=====================================================================
286cdf0e10cSrcweir 	//= OContentTableSelection
287cdf0e10cSrcweir 	//=====================================================================
288cdf0e10cSrcweir 	//---------------------------------------------------------------------
OContentTableSelection(OListComboWizard * _pParent)289cdf0e10cSrcweir 	OContentTableSelection::OContentTableSelection( OListComboWizard* _pParent )
290cdf0e10cSrcweir 		:OLCPage(_pParent, ModuleRes(RID_PAGE_LCW_CONTENTSELECTION_TABLE))
291cdf0e10cSrcweir 		,m_aFrame				(this, ModuleRes(FL_FRAME))
292cdf0e10cSrcweir 		,m_aSelectTableLabel	(this, ModuleRes(FT_SELECTTABLE_LABEL))
293cdf0e10cSrcweir 		,m_aSelectTable			(this, ModuleRes(LB_SELECTTABLE))
294cdf0e10cSrcweir 	{
295cdf0e10cSrcweir 		FreeResource();
296cdf0e10cSrcweir 
297cdf0e10cSrcweir 		enableFormDatasourceDisplay();
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 		m_aSelectTable.SetDoubleClickHdl(LINK(this, OContentTableSelection, OnTableDoubleClicked));
300cdf0e10cSrcweir 		m_aSelectTable.SetSelectHdl(LINK(this, OContentTableSelection, OnTableSelected));
301cdf0e10cSrcweir 	}
302cdf0e10cSrcweir 
303cdf0e10cSrcweir 	//---------------------------------------------------------------------
ActivatePage()304cdf0e10cSrcweir 	void OContentTableSelection::ActivatePage()
305cdf0e10cSrcweir 	{
306cdf0e10cSrcweir 		OLCPage::ActivatePage();
307cdf0e10cSrcweir 		m_aSelectTable.GrabFocus();
308cdf0e10cSrcweir 	}
309cdf0e10cSrcweir 
310cdf0e10cSrcweir 	//---------------------------------------------------------------------
canAdvance() const311cdf0e10cSrcweir 	bool OContentTableSelection::canAdvance() const
312cdf0e10cSrcweir 	{
313cdf0e10cSrcweir 		if (!OLCPage::canAdvance())
314cdf0e10cSrcweir 			return false;
315cdf0e10cSrcweir 
316cdf0e10cSrcweir 		return 0 != m_aSelectTable.GetSelectEntryCount();
317cdf0e10cSrcweir 	}
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 	//---------------------------------------------------------------------
320cdf0e10cSrcweir 	IMPL_LINK( OContentTableSelection, OnTableSelected, ListBox*, /*_pListBox*/ )
321cdf0e10cSrcweir 	{
322cdf0e10cSrcweir 		updateDialogTravelUI();
323cdf0e10cSrcweir 		return 0L;
324cdf0e10cSrcweir 	}
325cdf0e10cSrcweir 
326cdf0e10cSrcweir 	//---------------------------------------------------------------------
IMPL_LINK(OContentTableSelection,OnTableDoubleClicked,ListBox *,_pListBox)327cdf0e10cSrcweir 	IMPL_LINK( OContentTableSelection, OnTableDoubleClicked, ListBox*, _pListBox )
328cdf0e10cSrcweir 	{
329cdf0e10cSrcweir 		if (_pListBox->GetSelectEntryCount())
330cdf0e10cSrcweir 			getDialog()->travelNext();
331cdf0e10cSrcweir 		return 0L;
332cdf0e10cSrcweir 	}
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 	//---------------------------------------------------------------------
initializePage()335cdf0e10cSrcweir 	void OContentTableSelection::initializePage()
336cdf0e10cSrcweir 	{
337cdf0e10cSrcweir 		OLCPage::initializePage();
338cdf0e10cSrcweir 
339cdf0e10cSrcweir 		// fill the list with the table name
340cdf0e10cSrcweir 		m_aSelectTable.Clear();
341cdf0e10cSrcweir 		try
342cdf0e10cSrcweir 		{
343cdf0e10cSrcweir 			Reference< XNameAccess > xTables = getTables(sal_True);
344cdf0e10cSrcweir 			Sequence< ::rtl::OUString > aTableNames;
345cdf0e10cSrcweir 			if (xTables.is())
346cdf0e10cSrcweir 				aTableNames = xTables->getElementNames();
347cdf0e10cSrcweir 			fillListBox(m_aSelectTable, aTableNames);
348cdf0e10cSrcweir 		}
349cdf0e10cSrcweir 		catch(Exception&)
350cdf0e10cSrcweir 		{
351cdf0e10cSrcweir 			DBG_ERROR("OContentTableSelection::initializePage: could not retrieve the table names!");
352cdf0e10cSrcweir 		}
353cdf0e10cSrcweir 
354cdf0e10cSrcweir 		m_aSelectTable.SelectEntry(getSettings().sListContentTable);
355cdf0e10cSrcweir 	}
356cdf0e10cSrcweir 
357cdf0e10cSrcweir 	//---------------------------------------------------------------------
commitPage(::svt::WizardTypes::CommitPageReason _eReason)358cdf0e10cSrcweir 	sal_Bool OContentTableSelection::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
359cdf0e10cSrcweir 	{
360cdf0e10cSrcweir 		if (!OLCPage::commitPage(_eReason))
361cdf0e10cSrcweir 			return sal_False;
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 		OListComboSettings& rSettings = getSettings();
364cdf0e10cSrcweir 		rSettings.sListContentTable = m_aSelectTable.GetSelectEntry();
365cdf0e10cSrcweir 		if (!rSettings.sListContentTable.Len() && (::svt::WizardTypes::eTravelBackward != _eReason))
366cdf0e10cSrcweir 			// need to select a table
367cdf0e10cSrcweir 			return sal_False;
368cdf0e10cSrcweir 
369cdf0e10cSrcweir 		return sal_True;
370cdf0e10cSrcweir 	}
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 	//=====================================================================
373cdf0e10cSrcweir 	//= OContentFieldSelection
374cdf0e10cSrcweir 	//=====================================================================
375cdf0e10cSrcweir 	//---------------------------------------------------------------------
OContentFieldSelection(OListComboWizard * _pParent)376cdf0e10cSrcweir 	OContentFieldSelection::OContentFieldSelection( OListComboWizard* _pParent )
377cdf0e10cSrcweir 		:OLCPage(_pParent, ModuleRes(RID_PAGE_LCW_CONTENTSELECTION_FIELD))
378cdf0e10cSrcweir 		,m_aFrame				(this, ModuleRes(FL_FRAME))
379cdf0e10cSrcweir 		,m_aTableFields			(this, ModuleRes(FT_TABLEFIELDS))
380cdf0e10cSrcweir 		,m_aSelectTableField	(this, ModuleRes(LB_SELECTFIELD))
381cdf0e10cSrcweir 		,m_aDisplayedFieldLabel	(this, ModuleRes(FT_DISPLAYEDFIELD))
382cdf0e10cSrcweir 		,m_aDisplayedField		(this, ModuleRes(ET_DISPLAYEDFIELD))
383cdf0e10cSrcweir 		,m_aInfo				(this, ModuleRes(FT_CONTENTFIELD_INFO))
384cdf0e10cSrcweir 	{
385cdf0e10cSrcweir 		m_aInfo.SetText(String(ModuleRes( isListBox() ? STR_FIELDINFO_LISTBOX : STR_FIELDINFO_COMBOBOX)));
386cdf0e10cSrcweir 		FreeResource();
387cdf0e10cSrcweir 		m_aSelectTableField.SetSelectHdl(LINK(this, OContentFieldSelection, OnFieldSelected));
388cdf0e10cSrcweir 		m_aSelectTableField.SetDoubleClickHdl(LINK(this, OContentFieldSelection, OnTableDoubleClicked));
389cdf0e10cSrcweir 	}
390cdf0e10cSrcweir 
391cdf0e10cSrcweir 	//---------------------------------------------------------------------
ActivatePage()392cdf0e10cSrcweir 	void OContentFieldSelection::ActivatePage()
393cdf0e10cSrcweir 	{
394cdf0e10cSrcweir 		OLCPage::ActivatePage();
395cdf0e10cSrcweir 		m_aTableFields.GrabFocus();
396cdf0e10cSrcweir 	}
397cdf0e10cSrcweir 
398cdf0e10cSrcweir 	//---------------------------------------------------------------------
initializePage()399cdf0e10cSrcweir 	void OContentFieldSelection::initializePage()
400cdf0e10cSrcweir 	{
401cdf0e10cSrcweir 		OLCPage::initializePage();
402cdf0e10cSrcweir 
403cdf0e10cSrcweir 		// fill the list of fields
404cdf0e10cSrcweir 		fillListBox(m_aSelectTableField, getTableFields(sal_True));
405cdf0e10cSrcweir 
406cdf0e10cSrcweir 		m_aSelectTableField.SelectEntry(getSettings().sListContentField);
407cdf0e10cSrcweir 		m_aDisplayedField.SetText(getSettings().sListContentField);
408cdf0e10cSrcweir 	}
409cdf0e10cSrcweir 
410cdf0e10cSrcweir 	//---------------------------------------------------------------------
canAdvance() const411cdf0e10cSrcweir 	bool OContentFieldSelection::canAdvance() const
412cdf0e10cSrcweir 	{
413cdf0e10cSrcweir 		if (!OLCPage::canAdvance())
414cdf0e10cSrcweir 			return false;
415cdf0e10cSrcweir 
416cdf0e10cSrcweir 		return 0 != m_aSelectTableField.GetSelectEntryCount();
417cdf0e10cSrcweir 	}
418cdf0e10cSrcweir 
419cdf0e10cSrcweir 	//---------------------------------------------------------------------
420cdf0e10cSrcweir 	IMPL_LINK( OContentFieldSelection, OnTableDoubleClicked, ListBox*, /*NOTINTERESTEDIN*/ )
421cdf0e10cSrcweir 	{
422cdf0e10cSrcweir 		if (m_aSelectTableField.GetSelectEntryCount())
423cdf0e10cSrcweir 			getDialog()->travelNext();
424cdf0e10cSrcweir 		return 0L;
425cdf0e10cSrcweir 	}
426cdf0e10cSrcweir 
427cdf0e10cSrcweir 	//---------------------------------------------------------------------
428cdf0e10cSrcweir 	IMPL_LINK( OContentFieldSelection, OnFieldSelected, ListBox*, /*NOTINTERESTEDIN*/ )
429cdf0e10cSrcweir 	{
430cdf0e10cSrcweir 		updateDialogTravelUI();
431cdf0e10cSrcweir 		m_aDisplayedField.SetText(m_aSelectTableField.GetSelectEntry());
432cdf0e10cSrcweir 		return 0L;
433cdf0e10cSrcweir 	}
434cdf0e10cSrcweir 
435cdf0e10cSrcweir 	//---------------------------------------------------------------------
commitPage(::svt::WizardTypes::CommitPageReason _eReason)436cdf0e10cSrcweir 	sal_Bool OContentFieldSelection::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
437cdf0e10cSrcweir 	{
438cdf0e10cSrcweir 		if (!OLCPage::commitPage(_eReason))
439cdf0e10cSrcweir 			return sal_False;
440cdf0e10cSrcweir 
441cdf0e10cSrcweir 		getSettings().sListContentField = m_aSelectTableField.GetSelectEntry();
442cdf0e10cSrcweir 
443cdf0e10cSrcweir 		return sal_True;
444cdf0e10cSrcweir 	}
445cdf0e10cSrcweir 
446cdf0e10cSrcweir 	//=====================================================================
447cdf0e10cSrcweir 	//= OLinkFieldsPage
448cdf0e10cSrcweir 	//=====================================================================
449cdf0e10cSrcweir 	//---------------------------------------------------------------------
OLinkFieldsPage(OListComboWizard * _pParent)450cdf0e10cSrcweir 	OLinkFieldsPage::OLinkFieldsPage( OListComboWizard* _pParent )
451cdf0e10cSrcweir 		:OLCPage(_pParent, ModuleRes(RID_PAGE_LCW_FIELDLINK))
452cdf0e10cSrcweir 		,m_aDescription			(this, ModuleRes(FT_FIELDLINK_DESC))
453cdf0e10cSrcweir 		,m_aFrame				(this, ModuleRes(FL_FRAME))
454cdf0e10cSrcweir 		,m_aValueListFieldLabel	(this, ModuleRes(FT_VALUELISTFIELD))
455cdf0e10cSrcweir 		,m_aValueListField		(this, ModuleRes(CMB_VALUELISTFIELD))
456cdf0e10cSrcweir 		,m_aTableFieldLabel		(this, ModuleRes(FT_TABLEFIELD))
457cdf0e10cSrcweir 		,m_aTableField			(this, ModuleRes(CMB_TABLEFIELD))
458cdf0e10cSrcweir 	{
459cdf0e10cSrcweir 		FreeResource();
460cdf0e10cSrcweir 
461cdf0e10cSrcweir 		m_aValueListField.SetModifyHdl(LINK(this, OLinkFieldsPage, OnSelectionModified));
462cdf0e10cSrcweir 		m_aTableField.SetModifyHdl(LINK(this, OLinkFieldsPage, OnSelectionModified));
463cdf0e10cSrcweir 		m_aValueListField.SetSelectHdl(LINK(this, OLinkFieldsPage, OnSelectionModified));
464cdf0e10cSrcweir 		m_aTableField.SetSelectHdl(LINK(this, OLinkFieldsPage, OnSelectionModified));
465cdf0e10cSrcweir 	}
466cdf0e10cSrcweir 
467cdf0e10cSrcweir 	//---------------------------------------------------------------------
ActivatePage()468cdf0e10cSrcweir 	void OLinkFieldsPage::ActivatePage()
469cdf0e10cSrcweir 	{
470cdf0e10cSrcweir 		OLCPage::ActivatePage();
471cdf0e10cSrcweir 		m_aValueListField.GrabFocus();
472cdf0e10cSrcweir 	}
473cdf0e10cSrcweir 
474cdf0e10cSrcweir 	//---------------------------------------------------------------------
initializePage()475cdf0e10cSrcweir 	void OLinkFieldsPage::initializePage()
476cdf0e10cSrcweir 	{
477cdf0e10cSrcweir 		OLCPage::initializePage();
478cdf0e10cSrcweir 
479cdf0e10cSrcweir 		// fill the value list
480cdf0e10cSrcweir 		fillListBox(m_aValueListField, getContext().aFieldNames);
481cdf0e10cSrcweir 		// fill the table field list
482cdf0e10cSrcweir 		fillListBox(m_aTableField, getTableFields(sal_True));
483cdf0e10cSrcweir 
484cdf0e10cSrcweir 		// the initial selections
485cdf0e10cSrcweir 		m_aValueListField.SetText(getSettings().sLinkedFormField);
486cdf0e10cSrcweir 		m_aTableField.SetText(getSettings().sLinkedListField);
487cdf0e10cSrcweir 
488cdf0e10cSrcweir 		implCheckFinish();
489cdf0e10cSrcweir 	}
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 	//---------------------------------------------------------------------
canAdvance() const492cdf0e10cSrcweir 	bool OLinkFieldsPage::canAdvance() const
493cdf0e10cSrcweir 	{
494cdf0e10cSrcweir 		// we're on the last page here, no travelNext allowed ...
495cdf0e10cSrcweir 		return false;
496cdf0e10cSrcweir 	}
497cdf0e10cSrcweir 
498cdf0e10cSrcweir 	//---------------------------------------------------------------------
implCheckFinish()499cdf0e10cSrcweir 	void OLinkFieldsPage::implCheckFinish()
500cdf0e10cSrcweir 	{
501cdf0e10cSrcweir 		sal_Bool bInvalidSelection = (COMBOBOX_ENTRY_NOTFOUND == m_aValueListField.GetEntryPos(m_aValueListField.GetText()));
502cdf0e10cSrcweir 		bInvalidSelection |= (COMBOBOX_ENTRY_NOTFOUND == m_aTableField.GetEntryPos(m_aTableField.GetText()));
503cdf0e10cSrcweir 		getDialog()->enableButtons(WZB_FINISH, !bInvalidSelection);
504cdf0e10cSrcweir 	}
505cdf0e10cSrcweir 
506cdf0e10cSrcweir 	//---------------------------------------------------------------------
IMPL_LINK(OLinkFieldsPage,OnSelectionModified,void *,EMPTYARG)507cdf0e10cSrcweir 	IMPL_LINK(OLinkFieldsPage, OnSelectionModified, void*, EMPTYARG)
508cdf0e10cSrcweir 	{
509cdf0e10cSrcweir 		implCheckFinish();
510cdf0e10cSrcweir 		return 0L;
511cdf0e10cSrcweir 	}
512cdf0e10cSrcweir 
513cdf0e10cSrcweir 	//---------------------------------------------------------------------
commitPage(::svt::WizardTypes::CommitPageReason _eReason)514cdf0e10cSrcweir 	sal_Bool OLinkFieldsPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
515cdf0e10cSrcweir 	{
516cdf0e10cSrcweir 		if (!OLCPage::commitPage(_eReason))
517cdf0e10cSrcweir 			return sal_False;
518cdf0e10cSrcweir 
519cdf0e10cSrcweir 		getSettings().sLinkedFormField = m_aValueListField.GetText();
520cdf0e10cSrcweir 		getSettings().sLinkedListField = m_aTableField.GetText();
521cdf0e10cSrcweir 
522cdf0e10cSrcweir 		return sal_True;
523cdf0e10cSrcweir 	}
524cdf0e10cSrcweir 
525cdf0e10cSrcweir 	//=====================================================================
526cdf0e10cSrcweir 	//= OComboDBFieldPage
527cdf0e10cSrcweir 	//=====================================================================
528cdf0e10cSrcweir 	//---------------------------------------------------------------------
OComboDBFieldPage(OControlWizard * _pParent)529cdf0e10cSrcweir 	OComboDBFieldPage::OComboDBFieldPage( OControlWizard* _pParent )
530cdf0e10cSrcweir 		:ODBFieldPage(_pParent)
531cdf0e10cSrcweir 	{
532cdf0e10cSrcweir 		setDescriptionText(String(ModuleRes(RID_STR_COMBOWIZ_DBFIELD)));
533cdf0e10cSrcweir 	}
534cdf0e10cSrcweir 
535cdf0e10cSrcweir 	//---------------------------------------------------------------------
getDBFieldSetting()536cdf0e10cSrcweir 	String& OComboDBFieldPage::getDBFieldSetting()
537cdf0e10cSrcweir 	{
538cdf0e10cSrcweir 		return getSettings().sLinkedFormField;
539cdf0e10cSrcweir 	}
540cdf0e10cSrcweir 
541cdf0e10cSrcweir 	//---------------------------------------------------------------------
ActivatePage()542cdf0e10cSrcweir 	void OComboDBFieldPage::ActivatePage()
543cdf0e10cSrcweir 	{
544cdf0e10cSrcweir 		ODBFieldPage::ActivatePage();
545cdf0e10cSrcweir 		getDialog()->enableButtons(WZB_FINISH, sal_True);
546cdf0e10cSrcweir 	}
547cdf0e10cSrcweir 
548cdf0e10cSrcweir 	//---------------------------------------------------------------------
canAdvance() const549cdf0e10cSrcweir 	bool OComboDBFieldPage::canAdvance() const
550cdf0e10cSrcweir 	{
551cdf0e10cSrcweir 		// we're on the last page here, no travelNext allowed ...
552cdf0e10cSrcweir 		return false;
553cdf0e10cSrcweir 	}
554cdf0e10cSrcweir 
555cdf0e10cSrcweir //.........................................................................
556cdf0e10cSrcweir }	// namespace dbp
557cdf0e10cSrcweir //.........................................................................
558cdf0e10cSrcweir 
559