~ubuntu-branches/debian/sid/kdevelop/sid

« back to all changes in this revision

Viewing changes to languages/sql/sqlconfigwidget.ui.h

  • Committer: Bazaar Package Importer
  • Author(s): Jeremy Lainé
  • Date: 2006-05-23 18:39:42 UTC
  • Revision ID: james.westby@ubuntu.com-20060523183942-hucifbvh68k2bwz7
Tags: upstream-3.3.2
Import upstream version 3.3.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
** ui.h extension file, included from the uic-generated form implementation.
 
3
**
 
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
*****************************************************************************/
 
9
 
 
10
#include <qsqldatabase.h>
 
11
#include <qcombobox.h>
 
12
#include <qspinbox.h>
 
13
#include <qdom.h>
 
14
#include <qstringlist.h>
 
15
 
 
16
#include <klocale.h>
 
17
#include <klineedit.h>
 
18
#include <kmessagebox.h>
 
19
 
 
20
#include <domutil.h>
 
21
 
 
22
#include "sqlsupport_part.h"
 
23
 
 
24
// displays a ComboBox on edit to let the user choose the plugin
 
25
class PluginTableItem: public QTableItem
 
26
{
 
27
public:
 
28
    PluginTableItem( QTable* table, const QString& text = QString::null ): QTableItem( table, QTableItem::OnTyping, text ) {}
 
29
 
 
30
    virtual QWidget* createEditor() const
 
31
    {
 
32
        QComboBox* combo = new QComboBox( true, table() );
 
33
        combo->insertStringList( QSqlDatabase::drivers() );
 
34
        if ( !text().isEmpty() )
 
35
            combo->setCurrentText( text() );
 
36
        return combo;
 
37
    }
 
38
 
 
39
    virtual void setContentFromEditor( QWidget* w )
 
40
    {
 
41
        if ( w->inherits( "QComboBox" ) )
 
42
            setText( ( (QComboBox*)w )->currentText() );
 
43
        else
 
44
            QTableItem::setContentFromEditor( w );
 
45
    }
 
46
};
 
47
 
 
48
// uses a spinbox to let the user choose the port
 
49
class PortTableItem: public QTableItem
 
50
{
 
51
public:
 
52
    PortTableItem( QTable* table, const QString& text = QString::null ): QTableItem( table, QTableItem::OnTyping, text ) {}
 
53
 
 
54
    virtual QWidget* createEditor() const
 
55
    {
 
56
        QSpinBox* sb = new QSpinBox( -1, 65535, 1, table() );
 
57
        sb->setSpecialValueText( i18n("Default") );
 
58
        if ( !text().isEmpty() )
 
59
            sb->setValue( text().toInt() );
 
60
        return sb;
 
61
    }
 
62
 
 
63
    virtual void setContentFromEditor( QWidget* w )
 
64
    {
 
65
        if ( w->inherits( "QSpinBox" ) )
 
66
            setText( ( (QSpinBox*)w )->text() );
 
67
        else
 
68
            QTableItem::setContentFromEditor( w );
 
69
    }
 
70
};
 
71
 
 
72
// uses a spinbox to let the user choose the port
 
73
class PasswordTableItem: public QTableItem
 
74
{
 
75
public:
 
76
    PasswordTableItem( QTable* table, const QString& text = QString::null ): QTableItem( table, QTableItem::OnTyping, text ) {}
 
77
 
 
78
    virtual QWidget* createEditor() const
 
79
    {
 
80
        KLineEdit* le = new KLineEdit( table() );
 
81
        le->setEchoMode( QLineEdit::Password );
 
82
        return le;
 
83
    }
 
84
 
 
85
    virtual void setContentFromEditor( QWidget* w )
 
86
    {
 
87
        if ( w->inherits( "KLineEdit" ) ) {
 
88
            password = ( (KLineEdit*)w )->text();
 
89
            setText( QString().fill( '*', password.length() ) );
 
90
        } else {
 
91
            QTableItem::setContentFromEditor( w );
 
92
        }
 
93
    }
 
94
 
 
95
    virtual void setText(const QString& bogus)
 
96
    {
 
97
        QTableItem::setText(QString().fill('*', bogus.length()));
 
98
    }
 
99
    QString password;
 
100
};
 
101
 
 
102
static bool isEmptyRow( QTable* tbl, int row )
 
103
{
 
104
    for ( int i = 0; i < tbl->numCols(); i++ ) {
 
105
        if ( !tbl->text( row, i ).isEmpty() )
 
106
            return false;
 
107
    }
 
108
    return true;
 
109
}
 
110
 
 
111
void SqlConfigWidget::init()
 
112
{
 
113
    int w = dbTable->fontMetrics().width( "W" );
 
114
    dbTable->verticalHeader()->hide();
 
115
    dbTable->setLeftMargin( 0 );
 
116
    dbTable->setColumnWidth( 3, w * 5 );
 
117
    updateButtons();
 
118
    valueChanged( 0, 0 );
 
119
    changed = false;
 
120
}
 
121
 
 
122
static void addRow( QTable* dbTable )
 
123
{
 
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 ) );
 
131
}
 
132
 
 
133
void SqlConfigWidget::valueChanged( int, int )
 
134
{
 
135
    int lrow = dbTable->numRows() - 1;
 
136
    if ( lrow < 0 || !isEmptyRow( dbTable, lrow ) ) {
 
137
        addRow( dbTable );
 
138
    }
 
139
    changed = true;
 
140
}
 
141
 
 
142
 
 
143
void SqlConfigWidget::removeDb()
 
144
{
 
145
    if ( dbTable->currentRow() >= 0 )
 
146
        dbTable->removeRow( dbTable->currentRow() );
 
147
    valueChanged( 0, 0 );
 
148
    updateButtons();
 
149
}
 
150
 
 
151
 
 
152
void SqlConfigWidget::updateButtons()
 
153
{
 
154
    if ( dbTable->currentRow() < 0 ) {
 
155
        testBtn->setEnabled( false );
 
156
        removeBtn->setEnabled( false );
 
157
        return;
 
158
    }
 
159
    testBtn->setEnabled( !isEmptyRow( dbTable, dbTable->currentRow() ) );
 
160
    removeBtn->setEnabled( dbTable->currentRow() + 1 < dbTable->numRows() );
 
161
}
 
162
 
 
163
 
 
164
void SqlConfigWidget::testDb()
 
165
{
 
166
    static const QString cName( "SqlConfigWidgetTest" );
 
167
    int cr = dbTable->currentRow();
 
168
    if (cr < 0)
 
169
        return;
 
170
 
 
171
    QSqlDatabase* db = QSqlDatabase::addDatabase( dbTable->text( cr, 0 ), cName );
 
172
    db->setDatabaseName( dbTable->text( cr, 1 ) );
 
173
    db->setHostName( dbTable->text( cr, 2 ) );
 
174
    bool ok;
 
175
    int port = dbTable->text( cr, 3 ).toInt( &ok );
 
176
    if (ok && port >= 0)
 
177
        db->setPort( port );
 
178
    QString pass = ((PasswordTableItem*)dbTable->item( cr, 5 ))->password;
 
179
 
 
180
    if ( db->open( dbTable->text( cr, 4 ), pass ) ) {
 
181
        KMessageBox::information( this, i18n("Connection successful") );
 
182
        db->close();
 
183
    } else {
 
184
        KMessageBox::detailedSorry( this, i18n("Unable to connect to database server"),
 
185
                db->lastError().driverText() + "\n" +
 
186
                db->lastError().databaseText() );
 
187
    }
 
188
 
 
189
    db = 0;
 
190
    QSqlDatabase::removeDatabase( cName );
 
191
}
 
192
 
 
193
 
 
194
void SqlConfigWidget::accept()
 
195
{
 
196
    Q_ASSERT( doc );
 
197
 
 
198
    QDomElement dbElem = DomUtil::createElementByPath( *doc, "/kdevsqlsupport/servers" );
 
199
    DomUtil::makeEmpty( dbElem );
 
200
 
 
201
    for ( int i = 0; i < dbTable->numRows() - 1; i++ ) {
 
202
        QStringList db;
 
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 );
 
207
        
 
208
        DomUtil::writeListEntry( *doc, 
 
209
                                 "/kdevsqlsupport/servers/server" + QString::number( i ), 
 
210
                                 "el", db );
 
211
    }
 
212
    if ( changed )
 
213
        emit newConfigSaved();
 
214
}
 
215
 
 
216
 
 
217
void SqlConfigWidget::setProjectDom( QDomDocument * doc )
 
218
{
 
219
    this->doc = doc;
 
220
}
 
221
 
 
222
 
 
223
void SqlConfigWidget::loadConfig()
 
224
{
 
225
    Q_ASSERT( doc );
 
226
    
 
227
    QStringList db;
 
228
    int i = 0;
 
229
    while ( true ) {
 
230
        QStringList db = DomUtil::readListEntry( *doc, "kdevsqlsupport/servers/server" + QString::number( i ), "el" );
 
231
        if ( db.isEmpty() )
 
232
            return;
 
233
 
 
234
        addRow( dbTable );
 
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] );
 
239
 
 
240
        i++;
 
241
    }
 
242
    updateButtons();
 
243
    changed = false;
 
244
}