Browser Class Reference

#include <browser.h>

Inheritance diagram for Browser:

Inheritance graph
[legend]
Collaboration diagram for Browser:

Collaboration graph
[legend]
List of all members.

Detailed Description

Definition at line 36 of file browser.h.

Public Slots

void exec ()
void showTable (const QString &table)
void showMetaData (const QString &table)
void addConnection ()
void currentChanged ()
void on_insertRowAction_triggered ()
void on_deleteRowAction_triggered ()
void on_connectionWidget_tableActivated (const QString &table)
void on_connectionWidget_metaDataRequested (const QString &table)
void on_submitButton_clicked ()
void on_clearButton_clicked ()

Signals

void statusMessage (const QString &message)

Public Member Functions

 Browser (QWidget *parent=0)
virtual ~Browser ()
QSqlError addConnection (const QString &driver, const QString &dbName, const QString &host, const QString &user, const QString &passwd, int port=-1)
void insertRow ()
void deleteRow ()
void updateActions ()


Constructor & Destructor Documentation

Browser::Browser ( QWidget parent = 0  ) 

Definition at line 30 of file browser.cpp.

References QSqlDatabase::drivers(), emit, QMessageBox::information(), isEmpty(), and statusMessage().

00031     : QWidget(parent)
00032 {
00033     setupUi(this);
00034 
00035     table->addAction(insertRowAction);
00036     table->addAction(deleteRowAction);
00037 
00038     if (QSqlDatabase::drivers().isEmpty())
00039         QMessageBox::information(this, tr("No database drivers found"),
00040                                  tr("This demo requires at least one Qt database driver. "
00041                                     "Please check the documentation how to build the "
00042                                     "Qt SQL plugins."));
00043 
00044     emit statusMessage(tr("Ready."));
00045 }

Here is the call graph for this function:

Browser::~Browser (  )  [virtual]

Definition at line 47 of file browser.cpp.

00048 {
00049 }


Member Function Documentation

QSqlError Browser::addConnection ( const QString driver,
const QString dbName,
const QString host,
const QString user,
const QString passwd,
int  port = -1 
)

Definition at line 68 of file browser.cpp.

References QSqlDatabase::addDatabase(), QSqlDatabase::lastError(), QSqlDatabase::open(), QSqlDatabase::removeDatabase(), QSqlDatabase::setDatabaseName(), QSqlDatabase::setHostName(), and QSqlDatabase::setPort().

Referenced by addConnectionsFromCommandline().

00070 {
00071     static int cCount = 0;
00072 
00073     QSqlError err;
00074     QSqlDatabase db = QSqlDatabase::addDatabase(driver, QString("Browser%1").arg(++cCount));
00075     db.setDatabaseName(dbName);
00076     db.setHostName(host);
00077     db.setPort(port);
00078     if (!db.open(user, passwd)) {
00079         err = db.lastError();
00080         db = QSqlDatabase();
00081         QSqlDatabase::removeDatabase(QString("Browser%1").arg(cCount));
00082     }
00083     connectionWidget->refresh();
00084 
00085     return err;
00086 }

Here is the call graph for this function:

void Browser::insertRow (  ) 

Definition at line 180 of file browser.cpp.

References QAbstractTableModel::index(), QAbstractItemModel::insertRow(), QModelIndex::row(), and row.

Referenced by on_insertRowAction_triggered().

00181 {
00182     QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model());
00183     if (!model)
00184         return;
00185 
00186     QModelIndex insertIndex = table->currentIndex();
00187     int row = insertIndex.row() == -1 ? 0 : insertIndex.row();
00188     model->insertRow(row);
00189     insertIndex = model->index(row, 0);
00190     table->setCurrentIndex(insertIndex);
00191     table->edit(insertIndex);
00192 }

Here is the call graph for this function:

void Browser::deleteRow (  ) 

Definition at line 194 of file browser.cpp.

References QList< T >::at(), QList< T >::count(), i, QSqlTableModel::OnManualSubmit, QSqlTableModel::OnRowChange, QAbstractItemModel::removeRow(), QSqlTableModel::setEditStrategy(), QSqlTableModel::submitAll(), and updateActions().

Referenced by on_deleteRowAction_triggered().

00195 {
00196     QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model());
00197     if (!model)
00198         return;
00199 
00200     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
00201 
00202     QModelIndexList currentSelection = table->selectionModel()->selectedIndexes();
00203     for (int i = 0; i < currentSelection.count(); ++i) {
00204         if (currentSelection.at(i).column() != 0)
00205             continue;
00206         model->removeRow(currentSelection.at(i).row());
00207     }
00208 
00209     model->submitAll();
00210     model->setEditStrategy(QSqlTableModel::OnRowChange);
00211 
00212     updateActions();
00213 }

Here is the call graph for this function:

void Browser::updateActions (  ) 

Definition at line 215 of file browser.cpp.

Referenced by currentChanged(), deleteRow(), exec(), showMetaData(), and showTable().

00216 {
00217     bool enableIns = qobject_cast<QSqlTableModel *>(table->model());
00218     bool enableDel = enableIns && table->currentIndex().isValid();
00219 
00220     insertRowAction->setEnabled(enableIns);
00221     deleteRowAction->setEnabled(enableDel);
00222 }

void Browser::exec (  )  [slot]

Definition at line 51 of file browser.cpp.

References emit, QSqlQuery::isSelect(), QSqlQueryModel::lastError(), QSqlError::NoError, QSqlQuery::numRowsAffected(), QSqlQueryModel::query(), QSqlQueryModel::setQuery(), statusMessage(), QSqlError::text(), QSqlError::type(), and updateActions().

Referenced by on_submitButton_clicked().

00052 {
00053     QSqlQueryModel *model = new QSqlQueryModel(table);
00054     model->setQuery(QSqlQuery(sqlEdit->toPlainText(), connectionWidget->currentDatabase()));
00055     table->setModel(model);
00056 
00057     if (model->lastError().type() != QSqlError::NoError)
00058         emit statusMessage(model->lastError().text());
00059     else if (model->query().isSelect())
00060         emit statusMessage(tr("Query OK."));
00061     else
00062         emit statusMessage(tr("Query OK, number of affected rows: %1").arg(
00063                            model->query().numRowsAffected()));
00064 
00065     updateActions();
00066 }

void Browser::showTable ( const QString table  )  [slot]

Definition at line 127 of file browser.cpp.

References QObject::connect(), currentChanged(), QAbstractItemView::DoubleClicked, QAbstractItemView::EditKeyPressed, emit, QSqlQueryModel::lastError(), QSqlError::NoError, QSqlTableModel::OnRowChange, QSqlTableModel::select(), QSqlTableModel::setEditStrategy(), QSqlTableModel::setTable(), SIGNAL, SLOT, statusMessage(), t, QSqlError::text(), QSqlError::type(), and updateActions().

Referenced by on_connectionWidget_tableActivated().

00128 {
00129     QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase());
00130     model->setEditStrategy(QSqlTableModel::OnRowChange);
00131     model->setTable(t);
00132     model->select();
00133     if (model->lastError().type() != QSqlError::NoError)
00134         emit statusMessage(model->lastError().text());
00135     table->setModel(model);
00136     table->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed);
00137 
00138     connect(table->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
00139             this, SLOT(currentChanged()));
00140     updateActions();
00141 }

void Browser::showMetaData ( const QString table  )  [slot]

Definition at line 143 of file browser.cpp.

References QSqlRecord::count(), QSqlRecord::field(), Qt::Horizontal, i, QStandardItemModel::index(), QStandardItemModel::insertColumns(), QStandardItemModel::insertRows(), QAbstractItemView::NoEditTriggers, QStandardItemModel::setData(), QStandardItemModel::setHeaderData(), t, QVariant::typeToName(), and updateActions().

Referenced by on_connectionWidget_metaDataRequested().

00144 {
00145     QSqlRecord rec = connectionWidget->currentDatabase().record(t);
00146     QStandardItemModel *model = new QStandardItemModel(table);
00147 
00148     model->insertRows(0, rec.count());
00149     model->insertColumns(0, 7);
00150 
00151     model->setHeaderData(0, Qt::Horizontal, "Fieldname");
00152     model->setHeaderData(1, Qt::Horizontal, "Type");
00153     model->setHeaderData(2, Qt::Horizontal, "Length");
00154     model->setHeaderData(3, Qt::Horizontal, "Precision");
00155     model->setHeaderData(4, Qt::Horizontal, "Required");
00156     model->setHeaderData(5, Qt::Horizontal, "AutoValue");
00157     model->setHeaderData(6, Qt::Horizontal, "DefaultValue");
00158 
00159 
00160     for (int i = 0; i < rec.count(); ++i) {
00161         QSqlField fld = rec.field(i);
00162         model->setData(model->index(i, 0), fld.name());
00163         model->setData(model->index(i, 1), fld.typeID() == -1
00164                 ? QString(QVariant::typeToName(fld.type()))
00165                 : QString("%1 (%2)").arg(QVariant::typeToName(fld.type())).arg(fld.typeID()));
00166         model->setData(model->index(i, 2), fld.length());
00167         model->setData(model->index(i, 3), fld.precision());
00168         model->setData(model->index(i, 4), fld.requiredStatus() == -1 ? QVariant("?")
00169                 : QVariant(bool(fld.requiredStatus())));
00170         model->setData(model->index(i, 5), fld.isAutoValue());
00171         model->setData(model->index(i, 6), fld.defaultValue());
00172     }
00173 
00174     table->setModel(model);
00175     table->setEditTriggers(QAbstractItemView::NoEditTriggers);
00176 
00177     updateActions();
00178 }

void Browser::addConnection (  )  [slot]

Definition at line 88 of file browser.cpp.

References QDialog::Accepted, QSqlDatabase::addDatabase(), QSqlDatabase::close(), QSqlDatabase::database(), QSqlConnectionDialog::databaseName(), QSqlConnectionDialog::driverName(), QSqlQuery::exec(), QDialog::exec(), QSqlConnectionDialog::hostName(), QSqlDatabase::lastError(), QSqlError::NoError, QSqlDatabase::open(), QSqlConnectionDialog::password(), QSqlConnectionDialog::port(), QSqlDatabase::removeDatabase(), QSqlDatabase::setDatabaseName(), QSqlError::text(), QSqlError::type(), QSqlConnectionDialog::useInMemoryDatabase(), QSqlConnectionDialog::userName(), and QMessageBox::warning().

00089 {
00090     QSqlConnectionDialog dialog(this);
00091     if (dialog.exec() != QDialog::Accepted)
00092         return;
00093 
00094     if (dialog.useInMemoryDatabase()) {
00095         QSqlDatabase::database("in_mem_db", false).close();
00096         QSqlDatabase::removeDatabase("in_mem_db");
00097         QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "in_mem_db");
00098         db.setDatabaseName(":memory:");
00099         if (!db.open())
00100             QMessageBox::warning(this, tr("Unable to open database"), tr("An error occured while "
00101                                                                          "opening the connection: ") + db.lastError().text());
00102         QSqlQuery q("", db);
00103         q.exec("drop table Movies");
00104         q.exec("drop table Names");
00105         q.exec("create table Movies (id integer primary key, Title varchar, Director varchar, Rating number)");
00106         q.exec("insert into Movies values (0, 'Metropolis', 'Fritz Lang', '8.4')");
00107         q.exec("insert into Movies values (1, 'Nosferatu, eine Symphonie des Grauens', 'F.W. Murnau', '8.1')");
00108         q.exec("insert into Movies values (2, 'Bis ans Ende der Welt', 'Wim Wenders', '6.5')");
00109         q.exec("insert into Movies values (3, 'Hardware', 'Richard Stanley', '5.2')");
00110         q.exec("insert into Movies values (4, 'Mitchell', 'Andrew V. McLaglen', '2.1')");
00111         q.exec("create table Names (id integer primary key, Firstname varchar, Lastname varchar, City varchar)");
00112         q.exec("insert into Names values (0, 'Sala', 'Palmer', 'Morristown')");
00113         q.exec("insert into Names values (1, 'Christopher', 'Walker', 'Morristown')");
00114         q.exec("insert into Names values (2, 'Donald', 'Duck', 'Andeby')");
00115         q.exec("insert into Names values (3, 'Buck', 'Rogers', 'Paris')");
00116         q.exec("insert into Names values (4, 'Sherlock', 'Holmes', 'London')");
00117         connectionWidget->refresh();
00118     } else {
00119         QSqlError err = addConnection(dialog.driverName(), dialog.databaseName(), dialog.hostName(),
00120                            dialog.userName(), dialog.password(), dialog.port());
00121         if (err.type() != QSqlError::NoError)
00122             QMessageBox::warning(this, tr("Unable to open database"), tr("An error occured while "
00123                                        "opening the connection: ") + err.text());
00124     }
00125 }

void Browser::currentChanged (  )  [inline, slot]

Definition at line 55 of file browser.h.

References updateActions().

Referenced by showTable().

00055 { updateActions(); }

void Browser::on_insertRowAction_triggered (  )  [inline, slot]

Definition at line 57 of file browser.h.

References insertRow().

00058     { insertRow(); }

void Browser::on_deleteRowAction_triggered (  )  [inline, slot]

Definition at line 59 of file browser.h.

References deleteRow().

00060     { deleteRow(); }

void Browser::on_connectionWidget_tableActivated ( const QString table  )  [inline, slot]

Definition at line 61 of file browser.h.

References showTable().

00062     { showTable(table); }

void Browser::on_connectionWidget_metaDataRequested ( const QString table  )  [inline, slot]

Definition at line 63 of file browser.h.

References showMetaData().

00064     { showMetaData(table); }

void Browser::on_submitButton_clicked (  )  [inline, slot]

Definition at line 65 of file browser.h.

References exec().

00066     {
00067         exec();
00068         sqlEdit->setFocus();
00069     }

void Browser::on_clearButton_clicked (  )  [inline, slot]

Definition at line 70 of file browser.h.

00071     {
00072         sqlEdit->clear();
00073         sqlEdit->setFocus();
00074     }

void Browser::statusMessage ( const QString message  )  [signal]

Referenced by Browser(), exec(), and showTable().


The documentation for this class was generated from the following files:
Generated on Thu Mar 15 14:46:21 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1