1
/****************************************************************************
2
** ui.h extension file, included from the uic-generated form implementation.
4
** If you wish to add, delete or rename functions or slots use
5
** Qt Designer which will update this file, preserving your code. Create an
6
** init() function in place of a constructor, and a destroy() function in
7
** place of a destructor.
8
*****************************************************************************/
10
#include <qsqldatabase.h>
11
#include <qcombobox.h>
14
#include <qstringlist.h>
17
#include <klineedit.h>
18
#include <kmessagebox.h>
22
#include "sqlsupport_part.h"
24
// displays a ComboBox on edit to let the user choose the plugin
25
class PluginTableItem: public QTableItem
28
PluginTableItem( QTable* table, const QString& text = QString::null ): QTableItem( table, QTableItem::OnTyping, text ) {}
30
virtual QWidget* createEditor() const
32
QComboBox* combo = new QComboBox( true, table() );
33
combo->insertStringList( QSqlDatabase::drivers() );
34
if ( !text().isEmpty() )
35
combo->setCurrentText( text() );
39
virtual void setContentFromEditor( QWidget* w )
41
if ( w->inherits( "QComboBox" ) )
42
setText( ( (QComboBox*)w )->currentText() );
44
QTableItem::setContentFromEditor( w );
48
// uses a spinbox to let the user choose the port
49
class PortTableItem: public QTableItem
52
PortTableItem( QTable* table, const QString& text = QString::null ): QTableItem( table, QTableItem::OnTyping, text ) {}
54
virtual QWidget* createEditor() const
56
QSpinBox* sb = new QSpinBox( -1, 65535, 1, table() );
57
sb->setSpecialValueText( i18n("Default") );
58
if ( !text().isEmpty() )
59
sb->setValue( text().toInt() );
63
virtual void setContentFromEditor( QWidget* w )
65
if ( w->inherits( "QSpinBox" ) )
66
setText( ( (QSpinBox*)w )->text() );
68
QTableItem::setContentFromEditor( w );
72
// uses a spinbox to let the user choose the port
73
class PasswordTableItem: public QTableItem
76
PasswordTableItem( QTable* table, const QString& text = QString::null ): QTableItem( table, QTableItem::OnTyping, text ) {}
78
virtual QWidget* createEditor() const
80
KLineEdit* le = new KLineEdit( table() );
81
le->setEchoMode( QLineEdit::Password );
85
virtual void setContentFromEditor( QWidget* w )
87
if ( w->inherits( "KLineEdit" ) ) {
88
password = ( (KLineEdit*)w )->text();
89
setText( QString().fill( '*', password.length() ) );
91
QTableItem::setContentFromEditor( w );
95
virtual void setText(const QString& bogus)
97
QTableItem::setText(QString().fill('*', bogus.length()));
102
static bool isEmptyRow( QTable* tbl, int row )
104
for ( int i = 0; i < tbl->numCols(); i++ ) {
105
if ( !tbl->text( row, i ).isEmpty() )
111
void SqlConfigWidget::init()
113
int w = dbTable->fontMetrics().width( "W" );
114
dbTable->verticalHeader()->hide();
115
dbTable->setLeftMargin( 0 );
116
dbTable->setColumnWidth( 3, w * 5 );
118
valueChanged( 0, 0 );
122
static void addRow( QTable* dbTable )
124
dbTable->insertRows( dbTable->numRows() );
125
dbTable->setItem( dbTable->numRows() - 1, 0,
126
new PluginTableItem( dbTable ) );
127
dbTable->setItem( dbTable->numRows() - 1, 3,
128
new PortTableItem( dbTable ) );
129
dbTable->setItem( dbTable->numRows() - 1, 5,
130
new PasswordTableItem( dbTable ) );
133
void SqlConfigWidget::valueChanged( int, int )
135
int lrow = dbTable->numRows() - 1;
136
if ( lrow < 0 || !isEmptyRow( dbTable, lrow ) ) {
143
void SqlConfigWidget::removeDb()
145
if ( dbTable->currentRow() >= 0 )
146
dbTable->removeRow( dbTable->currentRow() );
147
valueChanged( 0, 0 );
152
void SqlConfigWidget::updateButtons()
154
if ( dbTable->currentRow() < 0 ) {
155
testBtn->setEnabled( false );
156
removeBtn->setEnabled( false );
159
testBtn->setEnabled( !isEmptyRow( dbTable, dbTable->currentRow() ) );
160
removeBtn->setEnabled( dbTable->currentRow() + 1 < dbTable->numRows() );
164
void SqlConfigWidget::testDb()
166
static const QString cName( "SqlConfigWidgetTest" );
167
int cr = dbTable->currentRow();
171
QSqlDatabase* db = QSqlDatabase::addDatabase( dbTable->text( cr, 0 ), cName );
172
db->setDatabaseName( dbTable->text( cr, 1 ) );
173
db->setHostName( dbTable->text( cr, 2 ) );
175
int port = dbTable->text( cr, 3 ).toInt( &ok );
178
QString pass = ((PasswordTableItem*)dbTable->item( cr, 5 ))->password;
180
if ( db->open( dbTable->text( cr, 4 ), pass ) ) {
181
KMessageBox::information( this, i18n("Connection successful") );
184
KMessageBox::detailedSorry( this, i18n("Unable to connect to database server"),
185
db->lastError().driverText() + "\n" +
186
db->lastError().databaseText() );
190
QSqlDatabase::removeDatabase( cName );
194
void SqlConfigWidget::accept()
198
QDomElement dbElem = DomUtil::createElementByPath( *doc, "/kdevsqlsupport/servers" );
199
DomUtil::makeEmpty( dbElem );
201
for ( int i = 0; i < dbTable->numRows() - 1; i++ ) {
203
db << dbTable->text( i, 0 ) << dbTable->text( i, 1 )
204
<< dbTable->text( i, 2 ) << dbTable->text( i, 3 )
205
<< dbTable->text( i, 4 )
206
<< SQLSupportPart::cryptStr( ((PasswordTableItem*)dbTable->item( i, 5 ))->password );
208
DomUtil::writeListEntry( *doc,
209
"/kdevsqlsupport/servers/server" + QString::number( i ),
213
emit newConfigSaved();
217
void SqlConfigWidget::setProjectDom( QDomDocument * doc )
223
void SqlConfigWidget::loadConfig()
230
QStringList db = DomUtil::readListEntry( *doc, "kdevsqlsupport/servers/server" + QString::number( i ), "el" );
235
int row = dbTable->numRows() - 2;
236
for ( int ii = 0; ii < 6; ii++ )
237
dbTable->setText( row, ii, db[ii] );
238
((PasswordTableItem*)dbTable->item( row, 5 ))->password = SQLSupportPart::cryptStr( db[5] );