00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "bookwindow.h"
00025 #include "bookdelegate.h"
00026 #include "initdb.h"
00027
00028 #include <QtSql>
00029
00030 BookWindow::BookWindow()
00031 {
00032 ui.setupUi(this);
00033
00034 if (!QSqlDatabase::drivers().contains("QSQLITE"))
00035 QMessageBox::critical(this, "Unable to load database", "This demo needs the SQLITE driver");
00036
00037
00038 QSqlError err = initDb();
00039 if (err.type() != QSqlError::NoError) {
00040 showError(err);
00041 return;
00042 }
00043
00044
00045 model = new QSqlRelationalTableModel(ui.bookTable);
00046 model->setEditStrategy(QSqlTableModel::OnManualSubmit);
00047 model->setTable("books");
00048
00049
00050 authorIdx = model->fieldIndex("author");
00051 genreIdx = model->fieldIndex("genre");
00052
00053
00054 model->setRelation(authorIdx, QSqlRelation("authors", "id", "name"));
00055 model->setRelation(genreIdx, QSqlRelation("genres", "id", "name"));
00056
00057
00058 model->setHeaderData(authorIdx, Qt::Horizontal, tr("Author Name"));
00059 model->setHeaderData(genreIdx, Qt::Horizontal, tr("Genre"));
00060 model->setHeaderData(model->fieldIndex("title"), Qt::Horizontal, tr("Title"));
00061 model->setHeaderData(model->fieldIndex("year"), Qt::Horizontal, tr("Year"));
00062 model->setHeaderData(model->fieldIndex("rating"), Qt::Horizontal, tr("Rating"));
00063
00064
00065 if (!model->select()) {
00066 showError(model->lastError());
00067 return;
00068 }
00069
00070
00071 ui.bookTable->setModel(model);
00072 ui.bookTable->setItemDelegate(new BookDelegate(ui.bookTable));
00073 ui.bookTable->setColumnHidden(model->fieldIndex("id"), true);
00074
00075
00076 ui.authorEdit->setModel(model->relationModel(authorIdx));
00077 ui.authorEdit->setModelColumn(model->relationModel(authorIdx)->fieldIndex("name"));
00078
00079 ui.genreEdit->setModel(model->relationModel(genreIdx));
00080 ui.genreEdit->setModelColumn(model->relationModel(genreIdx)->fieldIndex("name"));
00081
00082 QDataWidgetMapper *mapper = new QDataWidgetMapper(this);
00083 mapper->setModel(model);
00084 mapper->setItemDelegate(new BookDelegate(this));
00085 mapper->addMapping(ui.titleEdit, model->fieldIndex("title"));
00086 mapper->addMapping(ui.yearEdit, model->fieldIndex("year"));
00087 mapper->addMapping(ui.authorEdit, authorIdx);
00088 mapper->addMapping(ui.genreEdit, genreIdx);
00089 mapper->addMapping(ui.ratingEdit, model->fieldIndex("rating"));
00090
00091 connect(ui.bookTable->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
00092 mapper, SLOT(setCurrentModelIndex(QModelIndex)));
00093
00094 ui.bookTable->setCurrentIndex(model->index(0, 0));
00095 }
00096
00097 void BookWindow::showError(const QSqlError &err)
00098 {
00099 QMessageBox::critical(this, "Unable to initialize Database",
00100 "Error initializing database: " + err.text());
00101 }
00102