20#include "KexiConnSelector.h"
22#include <kexidb/drivermanager.h>
23#include <kexidb/connectiondata.h>
26#include "KexiConnSelectorBase.h"
28#include <widget/kexiprjtypeselector.h>
29#include <widget/kexidbconnectionwidget.h>
31#include <tdeapplication.h>
32#include <kiconloader.h>
37#include <kurlcombobox.h>
38#include <tdetoolbar.h>
39#include <tdepopupmenu.h>
40#include <tdetoolbarbutton.h>
41#include <tdeactionclasses.h>
44#include <tqpushbutton.h>
46#include <tqcheckbox.h>
48#include <tqtextedit.h>
49#include <tqgroupbox.h>
50#include <tqwidgetstack.h>
51#include <tqbuttongroup.h>
55 : TQListViewItem(list)
61ConnectionDataLVItem::~ConnectionDataLVItem()
67 setText(0, m_data->caption+
" ");
68 const TQString &sfile = i18n(
"File");
69 TQString drvname = info.caption.isEmpty() ? m_data->driverName : info.caption;
71 setText(1, sfile +
" ("+drvname+
") " );
73 setText(1, drvname+
" " );
74 setText(2, (info.
fileBased ? (TQString(
"<")+sfile.lower()+
">") : m_data->serverInfoString(
true))+
" " );
80class KexiConnSelectorWidgetPrivate
83 KexiConnSelectorWidgetPrivate()
84 : conn_sel_shown(false)
85 , file_sel_shown(false)
86 , confirmOverwrites(true)
90 TQWidget* openExistingWidget;
91 KexiPrjTypeSelector* prjTypeSelector;
92 TQString startDirOrVariable;
94 TQGuardedPtr<KexiDBConnectionSet> conn_set;
95 KexiDB::DriverManager manager;
98 bool confirmOverwrites;
104 const TQString& startDirOrVariable, TQWidget* parent,
const char* name )
105 : TQWidget( parent, name )
106 ,d(new KexiConnSelectorWidgetPrivate())
108 d->conn_set = &conn_set;
109 d->startDirOrVariable = startDirOrVariable;
111 const TQPixmap &icon = TDEGlobal::iconLoader()->loadIcon( iconname, TDEIcon::Desktop );
114 TQVBoxLayout* globalLyr =
new TQVBoxLayout(
this );
117 d->openExistingWidget =
new TQWidget(
this,
"openExistingWidget");
118 TQVBoxLayout* openExistingWidgetLyr =
new TQVBoxLayout( d->openExistingWidget );
122 connect(d->prjTypeSelector->buttonGroup,TQ_SIGNAL(clicked(
int)),
this,TQ_SLOT(slotPrjTypeSelected(
int)));
123 openExistingWidgetLyr->addWidget( d->prjTypeSelector );
124 openExistingWidgetLyr->addSpacing( KDialogBase::spacingHint() );
125 TQFrame* line =
new TQFrame( d->openExistingWidget,
"line" );
126 line->setFrameShape( TQFrame::HLine );
127 line->setFrameShadow( TQFrame::Sunken );
128 openExistingWidgetLyr->addWidget( line );
129 globalLyr->addWidget(d->openExistingWidget);
131 d->stack =
new TQWidgetStack(
this,
"stack");
132 globalLyr->addWidget(d->stack);
141 m_remote =
new KexiConnSelectorBase(d->stack,
"conn_sel");
142 m_remote->icon->setPixmap( DesktopIcon(
"network") );
143 m_remote->icon->setFixedSize( m_remote->icon->pixmap()->size() );
147 connect(m_remote->btn_remove, TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotRemoteRemoveBtnClicked()));
148 TQToolTip::add(m_remote->btn_add, i18n(
"Add a new database connection"));
149 TQToolTip::add(m_remote->btn_edit, i18n(
"Edit selected database connection"));
150 TQToolTip::add(m_remote->btn_remove, i18n(
"Remove selected database connections"));
151 d->stack->addWidget(m_remote);
152 if (m_remote->layout())
153 m_remote->layout()->setMargin(0);
155 connect(m_remote->list,TQ_SIGNAL(doubleClicked(TQListViewItem*)),
156 this,TQ_SLOT(slotConnectionItemExecuted(TQListViewItem*)));
157 connect(m_remote->list,TQ_SIGNAL(returnPressed(TQListViewItem*)),
158 this,TQ_SLOT(slotConnectionItemExecuted(TQListViewItem*)));
159 connect(m_remote->list,TQ_SIGNAL(selectionChanged()),
160 this,TQ_SLOT(slotConnectionSelectionChanged()));
163KexiConnSelectorWidget::~KexiConnSelectorWidget()
173void KexiConnSelectorWidget::showAdvancedConn()
175 slotPrjTypeSelected(2);
176 d->prjTypeSelector->buttonGroup->setButton(2);
180void KexiConnSelectorWidget::slotPrjTypeSelected(
int id)
186 if (!d->conn_sel_shown) {
187 d->conn_sel_shown=
true;
190 for (KexiDB::ConnectionData::ListIterator it(d->conn_set->list()); it.current(); ++it) {
191 addConnectionData( it.current() );
197 if (m_remote->list->firstChild()) {
198 m_remote->list->setSelected(m_remote->list->firstChild(),
true);
200 m_remote->descriptionEdit->setPaletteBackgroundColor(palette().active().background());
201 m_remote->descGroupBox->layout()->setMargin(2);
202 m_remote->list->setFocus();
203 slotConnectionSelectionChanged();
205 d->stack->raiseWidget(m_remote);
211 const KexiDB::Driver::Info info( d->manager.driverInfo(data->
driverName) );
213 return new ConnectionDataLVItem(data, info, m_remote->list);
217void KexiConnSelectorWidget::showSimpleConn()
219 d->prjTypeSelector->buttonGroup->setButton(1);
220 if (!d->file_sel_shown) {
221 d->file_sel_shown=
true;
222 m_fileDlg =
new KexiStartupFileDialog( d->startDirOrVariable, KexiStartupFileDialog::Opening,
223 d->stack,
"openExistingFileDlg");
224 m_fileDlg->setConfirmOverwrites( d->confirmOverwrites );
226 d->stack->addWidget(m_fileDlg);
228 for (TQWidget *w = parentWidget(
true);w;w=w->parentWidget(
true)) {
231 connect(m_fileDlg,TQ_SIGNAL(rejected()),
static_cast<TQDialog*
>(w),TQ_SLOT(reject()));
238 d->stack->raiseWidget(m_fileDlg);
243 return (d->stack->visibleWidget()==m_fileDlg) ? FileBased : ServerBased;
273 return m_fileDlg->currentFileName();
280 return m_fileDlg->setSelection(fileName);
283void KexiConnSelectorWidget::slotConnectionItemExecuted(TQListViewItem *item)
288void KexiConnSelectorWidget::slotConnectionSelectionChanged()
290 ConnectionDataLVItem* item =
static_cast<ConnectionDataLVItem*
>(m_remote->list->selectedItem());
305 m_remote->btn_edit->setEnabled(item);
306 m_remote->btn_remove->setEnabled(item);
307 m_remote->descriptionEdit->setText(item ? item->data()->
description : TQString());
308 emit connectionItemHighlighted(item);
311TQListView* KexiConnSelectorWidget::connectionsList()
const
313 return m_remote->list;
316void KexiConnSelectorWidget::setFocus()
318 TQWidget::setFocus();
319 if (d->stack->visibleWidget()==m_fileDlg)
320 m_fileDlg->setFocus();
322 m_remote->list->setFocus();
327 d->openExistingWidget->hide();
341 d->confirmOverwrites = set;
343 m_fileDlg->setConfirmOverwrites( d->confirmOverwrites );
346bool KexiConnSelectorWidget::confirmOverwrites()
const
348 return d->confirmOverwrites;
361 KexiDBConnectionDialog dlg(data, TQString(),
362 KGuiItem(i18n(
"&Add"),
"button_ok", i18n(
"Add database connection")) );
363 dlg.setCaption(i18n(
"Add New Database Connection"));
364 if (TQDialog::Accepted!=dlg.exec())
369 if (!d->conn_set->addConnectionData(newData)) {
377 m_remote->list->setSelected(item,
true);
378 slotConnectionSelectionChanged();
386 KexiDBConnectionDialog dlg(*item->data(), TQString(),
387 KGuiItem(i18n(
"&Save"),
"document-save", i18n(
"Save changes made to this database connection")) );
388 dlg.setCaption(i18n(
"Edit Database Connection"));
389 if (TQDialog::Accepted!=dlg.exec())
393 if (!d->conn_set->saveConnectionData(item->data(), newData)) {
400 slotConnectionSelectionChanged();
403void KexiConnSelectorWidget::slotRemoteRemoveBtnClicked()
408 if (KMessageBox::Continue!=KMessageBox::warningContinueCancel(0,
409 i18n(
"Do you want to remove database connection \"%1\" from the list of available connections?")
410 .arg(item->data()->
serverInfoString(
true)), TQString(), KStdGuiItem::del(), TQString(),
411 KMessageBox::Notify|KMessageBox::Dangerous))
414 TQListViewItem* nextItem = item->itemBelow();
416 nextItem = item->itemAbove();
417 if (!d->conn_set->removeConnectionData(item->data()))
420 m_remote->list->removeItem(item);
422 m_remote->list->setSelected(nextItem,
true);
423 slotConnectionSelectionChanged();
426void KexiConnSelectorWidget::hideConnectonIcon()
428 m_remote->icon->setFixedWidth(0);
429 m_remote->icon->setPixmap(TQPixmap());
432#include "KexiConnSelector.moc"
TQString description
The additional description for the connection.
TQString driverName
the name of the driver that should be used to create a connection
Database specific connection data, e.g. host, port.
TQString serverInfoString(bool addUser=true) const
A user-friendly string for the server.
bool fileBased
true is the driver is for file-based database backend
static TQString defaultFileBasedDriverMimeType()
A simple widget with radio buttons with "show file/server-based projects" options.