/****************************************************************************+ −
**+ −
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).+ −
** All rights reserved.+ −
** Contact: Nokia Corporation (qt-info@nokia.com)+ −
**+ −
** This file is part of the demonstration applications of the Qt Toolkit.+ −
**+ −
** $QT_BEGIN_LICENSE:LGPL$+ −
** No Commercial Usage+ −
** This file contains pre-release code and may not be distributed.+ −
** You may use this file in accordance with the terms and conditions+ −
** contained in the Technology Preview License Agreement accompanying+ −
** this package.+ −
**+ −
** GNU Lesser General Public License Usage+ −
** Alternatively, this file may be used under the terms of the GNU Lesser+ −
** General Public License version 2.1 as published by the Free Software+ −
** Foundation and appearing in the file LICENSE.LGPL included in the+ −
** packaging of this file. Please review the following information to+ −
** ensure the GNU Lesser General Public License version 2.1 requirements+ −
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.+ −
**+ −
** In addition, as a special exception, Nokia gives you certain additional+ −
** rights. These rights are described in the Nokia Qt LGPL Exception+ −
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.+ −
**+ −
** If you have questions regarding the use of this file, please contact+ −
** Nokia at qt-info@nokia.com.+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
** $QT_END_LICENSE$+ −
**+ −
****************************************************************************/+ −
+ −
#include "bookwindow.h"+ −
#include "bookdelegate.h"+ −
#include "initdb.h"+ −
+ −
#include <QtSql>+ −
+ −
BookWindow::BookWindow()+ −
{+ −
ui.setupUi(this);+ −
+ −
if (!QSqlDatabase::drivers().contains("QSQLITE"))+ −
QMessageBox::critical(this, "Unable to load database", "This demo needs the SQLITE driver");+ −
+ −
// initialize the database+ −
QSqlError err = initDb();+ −
if (err.type() != QSqlError::NoError) {+ −
showError(err);+ −
return;+ −
}+ −
+ −
// Create the data model+ −
model = new QSqlRelationalTableModel(ui.bookTable);+ −
model->setEditStrategy(QSqlTableModel::OnManualSubmit);+ −
model->setTable("books");+ −
+ −
// Remeber the indexes of the columns+ −
authorIdx = model->fieldIndex("author");+ −
genreIdx = model->fieldIndex("genre");+ −
+ −
// Set the relations to the other database tables+ −
model->setRelation(authorIdx, QSqlRelation("authors", "id", "name"));+ −
model->setRelation(genreIdx, QSqlRelation("genres", "id", "name"));+ −
+ −
// Set the localized header captions+ −
model->setHeaderData(authorIdx, Qt::Horizontal, tr("Author Name"));+ −
model->setHeaderData(genreIdx, Qt::Horizontal, tr("Genre"));+ −
model->setHeaderData(model->fieldIndex("title"), Qt::Horizontal, tr("Title"));+ −
model->setHeaderData(model->fieldIndex("year"), Qt::Horizontal, tr("Year"));+ −
model->setHeaderData(model->fieldIndex("rating"), Qt::Horizontal, tr("Rating"));+ −
+ −
// Populate the model+ −
if (!model->select()) {+ −
showError(model->lastError());+ −
return;+ −
}+ −
+ −
// Set the model and hide the ID column+ −
ui.bookTable->setModel(model);+ −
ui.bookTable->setItemDelegate(new BookDelegate(ui.bookTable));+ −
ui.bookTable->setColumnHidden(model->fieldIndex("id"), true);+ −
ui.bookTable->setSelectionMode(QAbstractItemView::SingleSelection);+ −
+ −
// Initialize the Author combo box+ −
ui.authorEdit->setModel(model->relationModel(authorIdx));+ −
ui.authorEdit->setModelColumn(model->relationModel(authorIdx)->fieldIndex("name"));+ −
+ −
ui.genreEdit->setModel(model->relationModel(genreIdx));+ −
ui.genreEdit->setModelColumn(model->relationModel(genreIdx)->fieldIndex("name"));+ −
+ −
QDataWidgetMapper *mapper = new QDataWidgetMapper(this);+ −
mapper->setModel(model);+ −
mapper->setItemDelegate(new BookDelegate(this));+ −
mapper->addMapping(ui.titleEdit, model->fieldIndex("title"));+ −
mapper->addMapping(ui.yearEdit, model->fieldIndex("year"));+ −
mapper->addMapping(ui.authorEdit, authorIdx);+ −
mapper->addMapping(ui.genreEdit, genreIdx);+ −
mapper->addMapping(ui.ratingEdit, model->fieldIndex("rating"));+ −
+ −
connect(ui.bookTable->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),+ −
mapper, SLOT(setCurrentModelIndex(QModelIndex)));+ −
+ −
ui.bookTable->setCurrentIndex(model->index(0, 0));+ −
}+ −
+ −
void BookWindow::showError(const QSqlError &err)+ −
{+ −
QMessageBox::critical(this, "Unable to initialize Database",+ −
"Error initializing database: " + err.text());+ −
}+ −
+ −