20#include "kexidbconnectionwidget.h"
21#include "kexidbconnectionwidgetdetailsbase.h"
24#include <kexiguimsghandler.h>
25#include <kexidb/connection.h>
26#include <kexidb/utils.h>
27#include "kexidbdrivercombobox.h"
30#include <kiconloader.h>
34#include <kurlrequester.h>
39#include <tqcheckbox.h>
40#include <tqbuttongroup.h>
41#include <tqwidgetstack.h>
45#include <tqwhatsthis.h>
47#include <tqradiobutton.h>
51#define NO_LOAD_DB_LIST
54class KexiDBConnectionWidget::Private
58 : connectionOnly(false)
62 KPushButton *btnSaveChanges, *btnTestConnection;
63 bool connectionOnly : 1;
68KexiDBConnectionWidget::KexiDBConnectionWidget( TQWidget* parent,
const char* name )
69 : KexiDBConnectionWidgetBase( parent, name )
72 iconLabel->setPixmap(DesktopIcon(
"network"));
74 TQVBoxLayout *driversComboLyr =
new TQVBoxLayout(frmEngine);
76 KexiDBDriverComboBox::ShowServerDrivers);
77 lblEngine->setBuddy( m_driversCombo );
78 lblEngine->setFocusProxy( m_driversCombo );
79 driversComboLyr->addWidget( m_driversCombo );
82 btnLoadDBList->hide();
84 btnLoadDBList->setIconSet(SmallIconSet(
"reload"));
85 TQToolTip::add(btnLoadDBList, i18n(
"Load database list from the server"));
86 TQWhatsThis::add(btnLoadDBList,
87 i18n(
"Loads database list from the server, so you can select one using the \"Name\" combo box."));
89 TQHBoxLayout *hbox =
new TQHBoxLayout(frmBottom);
91 d->btnSaveChanges =
new KPushButton(KGuiItem(i18n(
"Save Changes"),
"document-save",
92 i18n(
"Save all changes made to this connection information"),
93 i18n(
"Save all changes made to this connection information. You can later reuse this information.")),
94 frmBottom,
"savechanges");
95 hbox->addWidget( d->btnSaveChanges );
96 hbox->addSpacing( KDialogBase::spacingHint() );
97 TQWidget::setTabOrder(titleEdit, d->btnSaveChanges);
98 d->btnSaveChanges->setSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed );
100 d->btnTestConnection =
new KPushButton(KGuiItem(i18n(
"&Test Connection"),
"",
101 i18n(
"Test database connection"),
102 i18n(
"Tests database connection. You can ensure that valid connection information is provided.")),
103 frmBottom,
"testConnection");
104 hbox->addWidget( d->btnTestConnection );
105 TQWidget::setTabOrder(d->btnSaveChanges, d->btnTestConnection);
106 d->btnTestConnection->setSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed );
108 connect( locationBGrp, TQ_SIGNAL(clicked(
int)),
this, TQ_SLOT(slotLocationBGrpClicked(
int)) );
109 connect( chkPortDefault, TQ_SIGNAL(toggled(
bool)),
this , TQ_SLOT(slotCBToggled(
bool)) );
110 connect( btnLoadDBList, TQ_SIGNAL(clicked()),
this, TQ_SIGNAL(loadDBList()) );
111 connect( d->btnSaveChanges, TQ_SIGNAL(clicked()),
this, TQ_SIGNAL(saveChanges()) );
114KexiDBConnectionWidget::~KexiDBConnectionWidget()
119bool KexiDBConnectionWidget::connectionOnly()
const
120{
return d->connectionOnly; }
122void KexiDBConnectionWidget::setDataInternal(
const KexiProjectData& data,
bool connectionOnly,
123 const TQString& shortcutFileName)
126 d->connectionOnly = connectionOnly;
128 if (d->connectionOnly) {
131 btnLoadDBList->hide();
132 dbGroupBox->setTitle(i18n(
"Database Connection"));
137#ifndef NO_LOAD_DB_LIST
138 btnLoadDBList->show();
140 nameCombo->setCurrentText(m_data.databaseName());
141 dbGroupBox->setTitle(i18n(
"Database"));
144 m_driversCombo->setDriverName(m_data.connectionData()->driverName);
145 hostEdit->setText(m_data.connectionData()->hostName);
146 locationBGrp->setButton( m_data.connectionData()->hostName.isEmpty() ? 0 : 1 );
147 slotLocationBGrpClicked( locationBGrp->selectedId() );
148 if (m_data.connectionData()->port!=0) {
149 chkPortDefault->setChecked(
false);
150 customPortEdit->setValue(m_data.connectionData()->port);
153 chkPortDefault->setChecked(
true);
155 customPortEdit->setValue(0);
157 userEdit->setText(m_data.connectionData()->userName);
158 passwordEdit->setText(m_data.connectionData()->password);
159 if (d->connectionOnly)
160 titleEdit->setText(m_data.connectionData()->caption);
162 titleEdit->setText(m_data.caption());
164 if (shortcutFileName.isEmpty()) {
165 d->btnSaveChanges->hide();
169 if (!TQFileInfo(shortcutFileName).isWritable()) {
170 d->btnSaveChanges->setEnabled(
false);
174 chkSavePassword->setChecked(m_data.connectionData()->savePassword);
178void KexiDBConnectionWidget::setData(
const KexiProjectData& data,
const TQString& shortcutFileName)
180 setDataInternal(data,
false , shortcutFileName);
186 setDataInternal(pdata,
true , shortcutFileName);
189KPushButton* KexiDBConnectionWidget::saveChangesButton()
const
191 return d->btnSaveChanges;
194KPushButton* KexiDBConnectionWidget::testConnectionButton()
const
196 return d->btnTestConnection;
204void KexiDBConnectionWidget::slotLocationBGrpClicked(
int id)
206 if (
id != 0 &&
id != 1)
208 hostLbl->setEnabled(
id==1);
209 hostEdit->setEnabled(
id==1);
212void KexiDBConnectionWidget::slotCBToggled(
bool on)
214 if (sender()==chkPortDefault) {
215 customPortEdit->setEnabled(!on);
224KexiDBConnectionTabWidget::KexiDBConnectionTabWidget( TQWidget* parent,
const char* name )
225 : KTabWidget( parent, name )
227 mainWidget =
new KexiDBConnectionWidget(
this,
"mainWidget" );
228 mainWidget->layout()->setMargin(KDialog::marginHint());
229 addTab( mainWidget, i18n(
"Parameters") );
237 detailsWidget =
new KexiDBConnectionWidgetDetailsBase(
this,
"detailsWidget");
238 addTab( detailsWidget, i18n(
"Details") );
240 connect( mainWidget->testConnectionButton(), TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotTestConnection()) );
243KexiDBConnectionTabWidget::~KexiDBConnectionTabWidget()
247void KexiDBConnectionTabWidget::setData(
const KexiProjectData& data,
const TQString& shortcutFileName)
249 mainWidget->setData( data, shortcutFileName );
250 detailsWidget->chkUseSocket->setChecked( data.constConnectionData()->
useLocalSocketFile );
251 detailsWidget->customSocketEdit->setURL( data.constConnectionData()->
localSocketFileName );
252 detailsWidget->customSocketEdit->setEnabled( detailsWidget->chkUseSocket->isChecked() );
253 detailsWidget->chkSocketDefault->setChecked( data.constConnectionData()->
localSocketFileName.isEmpty() );
254 detailsWidget->chkSocketDefault->setEnabled( detailsWidget->chkUseSocket->isChecked() );
255 detailsWidget->descriptionEdit->setText( data.description() );
259 const TQString& shortcutFileName)
261 mainWidget->setData( data, shortcutFileName );
264 detailsWidget->customSocketEdit->setEnabled( detailsWidget->chkUseSocket->isChecked() );
266 detailsWidget->chkSocketDefault->setEnabled( detailsWidget->chkUseSocket->isChecked() );
267 detailsWidget->descriptionEdit->setText( data.
description );
278 if (mainWidget->connectionOnly()) {
279 data.connectionData()->
caption = mainWidget->titleEdit->text();
280 data.setCaption( TQString() );
281 data.connectionData()->
description = detailsWidget->descriptionEdit->text();
282 data.setDatabaseName( TQString() );
285 data.connectionData()->
caption = TQString();
286 data.setCaption( mainWidget->titleEdit->text() );
287 data.setDescription( detailsWidget->descriptionEdit->text() );
288 data.setDatabaseName( mainWidget->nameCombo->currentText() );
298 data.connectionData()->
driverName = mainWidget->driversCombo()->selectedDriverName();
305 (mainWidget->remotehostRBtn->isChecked()) ? mainWidget->hostEdit->text()
307 data.connectionData()->
port = mainWidget->chkPortDefault->isChecked()
308 ? 0 : mainWidget->customPortEdit->value();
310 ? TQString() : detailsWidget->customSocketEdit->url();
313 data.connectionData()->
userName = mainWidget->userEdit->text();
314 data.connectionData()->
password = mainWidget->passwordEdit->text();
315 data.connectionData()->
savePassword = mainWidget->chkSavePassword->isChecked();
320bool KexiDBConnectionTabWidget::savePasswordOptionSelected()
const
322 return mainWidget->chkSavePassword->isChecked();
328void KexiDBConnectionTabWidget::slotTestConnection()
330 KexiGUIMessageHandler msgHandler;
339KexiDBConnectionDialog::KexiDBConnectionDialog(
const KexiProjectData& data,
340 const TQString& shortcutFileName,
const KGuiItem& acceptButtonGuiItem)
341 : KDialogBase(0,
"dlg", true, i18n(
"Open Database"),
342 KDialogBase::User1|KDialogBase::Cancel|KDialogBase::Help,
343 KDialogBase::User1, false,
344 acceptButtonGuiItem.text().isEmpty()
345 ? KGuiItem(i18n(
"&Open"),
"document-open", i18n(
"Open Database Connection"))
346 : acceptButtonGuiItem
349 tabWidget =
new KexiDBConnectionTabWidget(
this,
"tabWidget");
350 tabWidget->setData(data, shortcutFileName);
355 const TQString& shortcutFileName,
const KGuiItem& acceptButtonGuiItem)
356 : KDialogBase(0,
"dlg", true, i18n(
"Connect to a Database Server"),
357 KDialogBase::User1|KDialogBase::Cancel|KDialogBase::Help,
358 KDialogBase::User1, false,
359 acceptButtonGuiItem.text().isEmpty()
360 ? KGuiItem(i18n(
"&Open"),
"document-open", i18n(
"Open Database Connection"))
361 : acceptButtonGuiItem
364 tabWidget =
new KexiDBConnectionTabWidget(
this,
"tabWidget");
365 tabWidget->setData(data, shortcutFileName);
369KexiDBConnectionDialog::~KexiDBConnectionDialog()
373void KexiDBConnectionDialog::init()
375 connect(
this, TQ_SIGNAL(user1Clicked()),
this, TQ_SLOT(accept()));
376 setMainWidget(tabWidget);
377 connect(tabWidget->mainWidget, TQ_SIGNAL(saveChanges()),
this, TQ_SIGNAL(saveChanges()));
378 connect(tabWidget, TQ_SIGNAL(testConnection()),
this, TQ_SIGNAL(testConnection()));
381 resize(width(), tabWidget->height());
382 if (tabWidget->mainWidget->connectionOnly())
383 tabWidget->mainWidget->driversCombo()->setFocus();
384 else if (tabWidget->mainWidget->nameCombo->currentText().isEmpty())
385 tabWidget->mainWidget->nameCombo->setFocus();
386 else if (tabWidget->mainWidget->userEdit->text().isEmpty())
387 tabWidget->mainWidget->userEdit->setFocus();
388 else if (tabWidget->mainWidget->passwordEdit->text().isEmpty())
389 tabWidget->mainWidget->passwordEdit->setFocus();
391 tabWidget->mainWidget->nameCombo->setFocus();
395{
return tabWidget->currentProjectData(); }
397bool KexiDBConnectionDialog::savePasswordOptionSelected()
const
398{
return tabWidget->savePasswordOptionSelected(); }
400KexiDBConnectionWidget* KexiDBConnectionDialog::mainWidget()
const
401{
return tabWidget->mainWidget; }
403KexiDBConnectionWidgetDetailsBase* KexiDBConnectionDialog::detailsWidget()
const
404{
return tabWidget->detailsWidget; }
406#include "kexidbconnectionwidget.moc"
Combo box widget for selecting a database driver.
bool savePassword
True if password should be saved to a file for the connection.
TQString caption
The caption of the connection.
TQString localSocketFileName
Name of local (named) socket file.
TQString description
The additional description for the connection.
TQString userName
Username used for the connection.
TQString password
Password used for the connection.
TQString driverName
the name of the driver that should be used to create a connection
unsigned short int port
Port used for the remote connection.
TQString hostName
Host name used for the remote connection.
bool useLocalSocketFile
True if local socket file should be used instead of TCP/IP port.
Database specific connection data, e.g. host, port.
Kexi project core data member.
KEXI_DB_EXPORT void connectionTestDialog(TQWidget *parent, const ConnectionData &data, MessageHandler &msgHandler)
KEXICORE_EXPORT KexiDB::DriverManager & driverManager()
shared driver manager