xref: /trunk/main/dbaccess/source/ui/dlg/dsselect.cxx (revision b63233d8)
196de5490SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
396de5490SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
496de5490SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
596de5490SAndrew Rist  * distributed with this work for additional information
696de5490SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
796de5490SAndrew Rist  * to you under the Apache License, Version 2.0 (the
896de5490SAndrew Rist  * "License"); you may not use this file except in compliance
996de5490SAndrew Rist  * with the License.  You may obtain a copy of the License at
1096de5490SAndrew Rist  *
1196de5490SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1296de5490SAndrew Rist  *
1396de5490SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1496de5490SAndrew Rist  * software distributed under the License is distributed on an
1596de5490SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1696de5490SAndrew Rist  * KIND, either express or implied.  See the License for the
1796de5490SAndrew Rist  * specific language governing permissions and limitations
1896de5490SAndrew Rist  * under the License.
1996de5490SAndrew Rist  *
2096de5490SAndrew Rist  *************************************************************/
2196de5490SAndrew Rist 
2296de5490SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25*b63233d8Sdamjan #include "precompiled_dbui.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #ifndef _DBAUI_DSSELECT_HXX_
28cdf0e10cSrcweir #include "dsselect.hxx"
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir #ifndef _DBAUI_DSSELECT_HRC_
31cdf0e10cSrcweir #include "dsselect.hrc"
32cdf0e10cSrcweir #endif
33cdf0e10cSrcweir #ifndef _DBU_DLG_HRC_
34cdf0e10cSrcweir #include "dbu_dlg.hrc"
35cdf0e10cSrcweir #endif
36cdf0e10cSrcweir #ifndef _SV_MSGBOX_HXX
37cdf0e10cSrcweir #include <vcl/msgbox.hxx>
38cdf0e10cSrcweir #endif
39cdf0e10cSrcweir #ifndef _DBAUI_LOCALRESACCESS_HXX_
40cdf0e10cSrcweir #include "localresaccess.hxx"
41cdf0e10cSrcweir #endif
42cdf0e10cSrcweir #ifndef _TOOLS_RCID_H
43cdf0e10cSrcweir #include <tools/rcid.h>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir 
46cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XCREATECATALOG_HPP_
47cdf0e10cSrcweir #include <com/sun/star/sdbcx/XCreateCatalog.hpp>
48cdf0e10cSrcweir #endif
49cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
50cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
51cdf0e10cSrcweir #endif
52cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP_
53cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
54cdf0e10cSrcweir #endif
55cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UI_DIALOGS_XEXECUTABLEDIALOG_HPP_
56cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
57cdf0e10cSrcweir #endif
58cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_XWINDOW_HPP_
59cdf0e10cSrcweir #include <com/sun/star/awt/XWindow.hpp>
60cdf0e10cSrcweir #endif
61cdf0e10cSrcweir #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
62cdf0e10cSrcweir #include "dbustrings.hrc"
63cdf0e10cSrcweir #endif
64cdf0e10cSrcweir #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
65cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
66cdf0e10cSrcweir #endif
67cdf0e10cSrcweir #ifndef _COMPHELPER_EXTRACT_HXX_
68cdf0e10cSrcweir #include <comphelper/extract.hxx>
69cdf0e10cSrcweir #endif
70cdf0e10cSrcweir #ifndef _COMPHELPER_TYPES_HXX_
71cdf0e10cSrcweir #include <comphelper/types.hxx>
72cdf0e10cSrcweir #endif
73cdf0e10cSrcweir #ifndef _COMPHELPER_PROCESSFACTORY_HXX_
74cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
75cdf0e10cSrcweir #endif
76cdf0e10cSrcweir #ifndef _DBAUI_DATASOURCEITEMS_HXX_
77cdf0e10cSrcweir #include "dsitems.hxx"
78cdf0e10cSrcweir #endif
79cdf0e10cSrcweir #ifndef _SFXSTRITEM_HXX
80cdf0e10cSrcweir #include <svl/stritem.hxx>
81cdf0e10cSrcweir #endif
82cdf0e10cSrcweir #ifndef _SFXINTITEM_HXX
83cdf0e10cSrcweir #include <svl/intitem.hxx>
84cdf0e10cSrcweir #endif
85cdf0e10cSrcweir #ifndef _SFXENUMITEM_HXX
86cdf0e10cSrcweir #include <svl/eitem.hxx>
87cdf0e10cSrcweir #endif
88cdf0e10cSrcweir #ifndef _SFXITEMSET_HXX
89cdf0e10cSrcweir #include <svl/itemset.hxx>
90cdf0e10cSrcweir #endif
91cdf0e10cSrcweir 
92cdf0e10cSrcweir //.........................................................................
93cdf0e10cSrcweir namespace dbaui
94cdf0e10cSrcweir {
95cdf0e10cSrcweir //.........................................................................
96cdf0e10cSrcweir using namespace ::com::sun::star::uno;
97cdf0e10cSrcweir using namespace ::com::sun::star::beans;
98cdf0e10cSrcweir using namespace ::com::sun::star::sdbc;
99cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx;
100cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs;
101cdf0e10cSrcweir using namespace ::comphelper;
102cdf0e10cSrcweir //==================================================================
ODatasourceSelectDialog(Window * _pParent,const StringBag & _rDatasources,bool _bAdabas,SfxItemSet * _pOutputSet)103cdf0e10cSrcweir ODatasourceSelectDialog::ODatasourceSelectDialog(Window* _pParent, const StringBag& _rDatasources, bool _bAdabas,SfxItemSet* _pOutputSet)
104cdf0e10cSrcweir 	 :ModalDialog(_pParent, ModuleRes(DLG_DATASOURCE_SELECTION))
105cdf0e10cSrcweir 	 ,m_aDescription		(this, ModuleRes(FT_DESCRIPTION))
106cdf0e10cSrcweir 	 ,m_aDatasource			(this, ModuleRes(LB_DATASOURCE))
107cdf0e10cSrcweir 	 ,m_aOk					(this, ModuleRes(PB_OK))
108cdf0e10cSrcweir 	 ,m_aCancel				(this, ModuleRes(PB_CANCEL))
109cdf0e10cSrcweir 	 ,m_aHelp				(this, ModuleRes(PB_HELP))
110cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
111cdf0e10cSrcweir 	 ,m_aManageDatasources	(this, ModuleRes(PB_MANAGE))
112cdf0e10cSrcweir #endif
113cdf0e10cSrcweir 	 ,m_aCreateAdabasDB		(this, ModuleRes(PB_CREATE))
114cdf0e10cSrcweir 	 ,m_pOutputSet(_pOutputSet)
115cdf0e10cSrcweir {
116cdf0e10cSrcweir 	if ( _bAdabas )
117cdf0e10cSrcweir 	{	// set a new title (indicating that we're browsing local data sources only)
118cdf0e10cSrcweir 		SetText(ModuleRes(STR_LOCAL_DATASOURCES));
119cdf0e10cSrcweir 		m_aDescription.SetText(ModuleRes(STR_DESCRIPTION2));
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 		m_aCreateAdabasDB.Show();
122cdf0e10cSrcweir 		m_aCreateAdabasDB.SetClickHdl(LINK(this,ODatasourceSelectDialog,CreateDBClickHdl));
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 		// resize the dialog a little bit, 'cause Adabas data source names are usually somewhat shorter
125cdf0e10cSrcweir 		// than ODBC ones are
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 		// shrink the listbox
128cdf0e10cSrcweir 		Size aOldSize = m_aDatasource.GetSizePixel();
129cdf0e10cSrcweir 		Size aNewSize(3 * aOldSize.Width() / 4, aOldSize.Height());
130cdf0e10cSrcweir 		m_aDatasource.SetSizePixel(aNewSize);
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 		sal_Int32 nLostPixels = aOldSize.Width() - aNewSize.Width();
133cdf0e10cSrcweir 
134cdf0e10cSrcweir 		// shrink the fixed text
135cdf0e10cSrcweir 		aOldSize = m_aDescription.GetSizePixel();
136cdf0e10cSrcweir 		m_aDescription.SetSizePixel(Size(aOldSize.Width() - nLostPixels, aOldSize.Height()));
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 		// move the buttons
139cdf0e10cSrcweir 		PushButton* pButtons[] = { &m_aOk, &m_aCancel, &m_aHelp ,&m_aCreateAdabasDB};
140cdf0e10cSrcweir 		for (size_t i=0; i<sizeof(pButtons)/sizeof(pButtons[0]); ++i)
141cdf0e10cSrcweir 		{
142cdf0e10cSrcweir 			Point aOldPos = pButtons[i]->GetPosPixel();
143cdf0e10cSrcweir 			pButtons[i]->SetPosPixel(Point(aOldPos.X() - nLostPixels, aOldPos.Y()));
144cdf0e10cSrcweir 		}
145cdf0e10cSrcweir 
146cdf0e10cSrcweir 		// resize the dialog itself
147cdf0e10cSrcweir 		aOldSize = GetSizePixel();
148cdf0e10cSrcweir 		SetSizePixel(Size(aOldSize.Width() - nLostPixels, aOldSize.Height()));
149cdf0e10cSrcweir 	}
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 	fillListBox(_rDatasources);
152cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
153cdf0e10cSrcweir 	// allow ODBC datasource managenment
154cdf0e10cSrcweir 	if (  !_bAdabas )
155cdf0e10cSrcweir 	{
156cdf0e10cSrcweir 		m_aManageDatasources.Show();
157cdf0e10cSrcweir 		m_aManageDatasources.Enable();
158cdf0e10cSrcweir 		m_aManageDatasources.SetClickHdl(LINK(this,ODatasourceSelectDialog,ManageClickHdl));
159cdf0e10cSrcweir 	}
160cdf0e10cSrcweir #endif
161cdf0e10cSrcweir 	m_aDatasource.SetDoubleClickHdl(LINK(this,ODatasourceSelectDialog,ListDblClickHdl));
162cdf0e10cSrcweir 	FreeResource();
163cdf0e10cSrcweir }
164cdf0e10cSrcweir 
165cdf0e10cSrcweir // -----------------------------------------------------------------------
~ODatasourceSelectDialog()166cdf0e10cSrcweir ODatasourceSelectDialog::~ODatasourceSelectDialog()
167cdf0e10cSrcweir {
168cdf0e10cSrcweir }
169cdf0e10cSrcweir 
170cdf0e10cSrcweir // -----------------------------------------------------------------------
IMPL_LINK(ODatasourceSelectDialog,ListDblClickHdl,ListBox *,pListBox)171cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, ListDblClickHdl, ListBox *, pListBox )
172cdf0e10cSrcweir {
173cdf0e10cSrcweir 	if (pListBox->GetSelectEntryCount())
174cdf0e10cSrcweir 		EndDialog(RET_OK);
175cdf0e10cSrcweir 	return 0;
176cdf0e10cSrcweir }
177cdf0e10cSrcweir // -----------------------------------------------------------------------
178cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, CreateDBClickHdl, PushButton*, /*pButton*/ )
179cdf0e10cSrcweir {
180cdf0e10cSrcweir 	try
181cdf0e10cSrcweir 	{
182cdf0e10cSrcweir 		OSL_ENSURE(m_pOutputSet,"No itemset given!");
183cdf0e10cSrcweir 		Reference< ::com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory();
184cdf0e10cSrcweir 		Reference<XCreateCatalog> xCatalog(xORB->createInstance(SERVICE_EXTENDED_ADABAS_DRIVER),UNO_QUERY);
185cdf0e10cSrcweir 		if ( xCatalog.is() && m_pOutputSet )
186cdf0e10cSrcweir 		{
187cdf0e10cSrcweir 			Sequence< Any > aArgs(2);
188cdf0e10cSrcweir 			aArgs[0] <<= PropertyValue(::rtl::OUString::createFromAscii("CreateCatalog"), 0,makeAny(xCatalog) , PropertyState_DIRECT_VALUE);
189cdf0e10cSrcweir 			aArgs[1] <<= PropertyValue(PROPERTY_PARENTWINDOW, 0, makeAny(VCLUnoHelper::GetInterface(this)), PropertyState_DIRECT_VALUE);
190cdf0e10cSrcweir 
191cdf0e10cSrcweir 			Reference< XExecutableDialog > xDialog(
192cdf0e10cSrcweir 				xORB->createInstanceWithArguments(SERVICE_SDB_ADABASCREATIONDIALOG, aArgs), UNO_QUERY);
193cdf0e10cSrcweir 			if (!xDialog.is())
194cdf0e10cSrcweir 			{
195cdf0e10cSrcweir 				//	ShowServiceNotAvailableError(this, String(SERVICE_SDB_ADABASCREATIONDIALOG), sal_True);
196cdf0e10cSrcweir 				return 0L;
197cdf0e10cSrcweir 			}
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 			if ( xDialog->execute() == RET_OK )
200cdf0e10cSrcweir 			{
201cdf0e10cSrcweir 				Reference<XPropertySet> xProp(xDialog,UNO_QUERY);
202cdf0e10cSrcweir 				if(xProp.is())
203cdf0e10cSrcweir 				{
204cdf0e10cSrcweir 					Reference<XPropertySetInfo> xPropInfo(xProp->getPropertySetInfo());
205cdf0e10cSrcweir 					if(xPropInfo->hasPropertyByName(PROPERTY_DATABASENAME))
206cdf0e10cSrcweir 					{
207cdf0e10cSrcweir 						String sDatabaseName;
208cdf0e10cSrcweir 						sDatabaseName = String(::comphelper::getString(xProp->getPropertyValue(PROPERTY_DATABASENAME)));
209cdf0e10cSrcweir 						m_aDatasource.SelectEntryPos(m_aDatasource.InsertEntry( sDatabaseName ));
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 					}
212cdf0e10cSrcweir 					if ( xPropInfo->hasPropertyByName(PROPERTY_CONTROLUSER) )
213cdf0e10cSrcweir 						m_pOutputSet->Put(SfxStringItem(DSID_CONN_CTRLUSER, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_CONTROLUSER))));
214cdf0e10cSrcweir 					if ( xPropInfo->hasPropertyByName(PROPERTY_CONTROLPASSWORD) )
215cdf0e10cSrcweir 						m_pOutputSet->Put(SfxStringItem(DSID_CONN_CTRLPWD, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_CONTROLPASSWORD))));
216cdf0e10cSrcweir 					if ( xPropInfo->hasPropertyByName(PROPERTY_USER) )
217cdf0e10cSrcweir 						m_pOutputSet->Put(SfxStringItem(DSID_USER, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_USER))));
218cdf0e10cSrcweir 					if ( xPropInfo->hasPropertyByName(PROPERTY_PASSWORD) )
219cdf0e10cSrcweir                     {
220cdf0e10cSrcweir 						m_pOutputSet->Put(SfxStringItem(DSID_PASSWORD, ::comphelper::getString(xProp->getPropertyValue(PROPERTY_PASSWORD))));
221cdf0e10cSrcweir                         m_pOutputSet->Put(SfxBoolItem(DSID_PASSWORDREQUIRED, sal_True));
222cdf0e10cSrcweir                     }
223cdf0e10cSrcweir 					if ( xPropInfo->hasPropertyByName(PROPERTY_CACHESIZE) )
224cdf0e10cSrcweir 						m_pOutputSet->Put(SfxInt32Item(DSID_CONN_CACHESIZE, ::comphelper::getINT32(xProp->getPropertyValue(PROPERTY_CACHESIZE))));
225cdf0e10cSrcweir 				}
226cdf0e10cSrcweir 			}
227cdf0e10cSrcweir 		}
228cdf0e10cSrcweir 	}
229cdf0e10cSrcweir 	catch(Exception&)
230cdf0e10cSrcweir 	{
231cdf0e10cSrcweir 	}
232cdf0e10cSrcweir 	return 0L;
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir // -----------------------------------------------------------------------
Close()236cdf0e10cSrcweir sal_Bool ODatasourceSelectDialog::Close()
237cdf0e10cSrcweir {
238cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
239cdf0e10cSrcweir     if ( m_pODBCManagement.get() && m_pODBCManagement->isRunning() )
240cdf0e10cSrcweir         return sal_False;
241cdf0e10cSrcweir #endif
242cdf0e10cSrcweir 
243cdf0e10cSrcweir     return ModalDialog::Close();
244cdf0e10cSrcweir }
245cdf0e10cSrcweir 
246cdf0e10cSrcweir // -----------------------------------------------------------------------
247cdf0e10cSrcweir #ifdef HAVE_ODBC_ADMINISTRATION
IMPL_LINK(ODatasourceSelectDialog,ManageClickHdl,PushButton *,EMPTYARG)248cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, ManageClickHdl, PushButton*, EMPTYARG )
249cdf0e10cSrcweir {
250cdf0e10cSrcweir     if ( !m_pODBCManagement.get() )
251cdf0e10cSrcweir         m_pODBCManagement.reset( new OOdbcManagement( LINK( this, ODatasourceSelectDialog, ManageProcessFinished ) ) );
252cdf0e10cSrcweir 
253cdf0e10cSrcweir     if ( !m_pODBCManagement->manageDataSources_async() )
254cdf0e10cSrcweir 	{
255cdf0e10cSrcweir 		// TODO: error message
256cdf0e10cSrcweir 		m_aDatasource.GrabFocus();
257cdf0e10cSrcweir 		m_aManageDatasources.Disable();
258cdf0e10cSrcweir 		return 1L;
259cdf0e10cSrcweir 	}
260cdf0e10cSrcweir 
261cdf0e10cSrcweir     m_aDatasource.Disable();
262cdf0e10cSrcweir     m_aOk.Disable();
263cdf0e10cSrcweir     m_aCancel.Disable();
264cdf0e10cSrcweir     m_aManageDatasources.Disable();
265cdf0e10cSrcweir 
266cdf0e10cSrcweir     OSL_POSTCOND( m_pODBCManagement->isRunning(), "ODatasourceSelectDialog::ManageClickHdl: success, but not running - you were *fast*!" );
267cdf0e10cSrcweir     return 0L;
268cdf0e10cSrcweir }
269cdf0e10cSrcweir 
270cdf0e10cSrcweir IMPL_LINK( ODatasourceSelectDialog, ManageProcessFinished, void*, /**/ )
271cdf0e10cSrcweir {
272cdf0e10cSrcweir 	StringBag aOdbcDatasources;
273cdf0e10cSrcweir 	OOdbcEnumeration aEnumeration;
274cdf0e10cSrcweir 	aEnumeration.getDatasourceNames( aOdbcDatasources );
275cdf0e10cSrcweir 	fillListBox( aOdbcDatasources );
276cdf0e10cSrcweir 
277cdf0e10cSrcweir     m_aDatasource.Enable();
278cdf0e10cSrcweir     m_aOk.Enable();
279cdf0e10cSrcweir     m_aCancel.Enable();
280cdf0e10cSrcweir     m_aManageDatasources.Enable();
281cdf0e10cSrcweir 
282cdf0e10cSrcweir     return 0L;
283cdf0e10cSrcweir }
284cdf0e10cSrcweir 
285cdf0e10cSrcweir #endif
286cdf0e10cSrcweir // -----------------------------------------------------------------------------
fillListBox(const StringBag & _rDatasources)287cdf0e10cSrcweir void ODatasourceSelectDialog::fillListBox(const StringBag& _rDatasources)
288cdf0e10cSrcweir {
289cdf0e10cSrcweir 	::rtl::OUString sSelected;
290cdf0e10cSrcweir 	if (m_aDatasource.GetEntryCount())
291cdf0e10cSrcweir 		 sSelected = m_aDatasource.GetSelectEntry();
292cdf0e10cSrcweir 	m_aDatasource.Clear();
293cdf0e10cSrcweir 	// fill the list
294cdf0e10cSrcweir 	for (	ConstStringBagIterator aDS = _rDatasources.begin();
295cdf0e10cSrcweir 			aDS != _rDatasources.end();
296cdf0e10cSrcweir 			++aDS
297cdf0e10cSrcweir 		)
298cdf0e10cSrcweir 	{
299cdf0e10cSrcweir 		m_aDatasource.InsertEntry( *aDS );
300cdf0e10cSrcweir 	}
301cdf0e10cSrcweir 
302cdf0e10cSrcweir 	if (m_aDatasource.GetEntryCount())
303cdf0e10cSrcweir 	{
304cdf0e10cSrcweir 		if (sSelected.getLength())
305cdf0e10cSrcweir 			m_aDatasource.SelectEntry(sSelected);
306cdf0e10cSrcweir 		else  		// select the first entry
307cdf0e10cSrcweir 			m_aDatasource.SelectEntryPos(0);
308cdf0e10cSrcweir 	}
309cdf0e10cSrcweir }
310cdf0e10cSrcweir 
311cdf0e10cSrcweir //.........................................................................
312cdf0e10cSrcweir }	// namespace dbaui
313cdf0e10cSrcweir //.........................................................................
314cdf0e10cSrcweir 
315