diff -r ef0373b55136 -r 758a864f9613 tests/qtp/qtp_masterdetail/dialog.cpp --- a/tests/qtp/qtp_masterdetail/dialog.cpp Fri Sep 17 08:34:18 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples 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 "dialog.h" - -int uniqueAlbumId; -int uniqueArtistId; - -Dialog::Dialog(QSqlRelationalTableModel *albums, QDomDocument details, - QFile *output, QWidget *parent) - : QDialog(parent) -{ - model = albums; - albumDetails = details; - outputFile = output; - - QGroupBox *inputWidgetBox = createInputWidgets(); - QDialogButtonBox *buttonBox = createButtons(); - - QVBoxLayout *layout = new QVBoxLayout; - layout->addWidget(inputWidgetBox); - layout->addWidget(buttonBox); - setLayout(layout); - - setWindowTitle(tr("Add Album")); -} - -void Dialog::submit() -{ - QString artist = artistEditor->text(); - QString title = titleEditor->text(); - - if (artist.isEmpty() || title.isEmpty()) { - QString message(tr("Please provide both the name of the artist " - "and the title of the album.")); - QMessageBox::information(this, tr("Add Album"), message); - } else { - int artistId = findArtistId(artist); - int albumId = addNewAlbum(title, artistId); - - QStringList tracks; - tracks = tracksEditor->text().split(',', QString::SkipEmptyParts); - addTracks(albumId, tracks); - - increaseAlbumCount(indexOfArtist(artist)); - accept(); - } -} - -int Dialog::findArtistId(const QString &artist) -{ - QSqlTableModel *artistModel = model->relationModel(2); - int row = 0; - - while (row < artistModel->rowCount()) { - QSqlRecord record = artistModel->record(row); - if (record.value("artist") == artist) - return record.value("id").toInt(); - else - row++; - } - return addNewArtist(artist); -} - - -int Dialog::addNewArtist(const QString &name) -{ - QSqlTableModel *artistModel = model->relationModel(2); - QSqlRecord record; - - int id = generateArtistId(); - - QSqlField f1("id", QVariant::Int); - QSqlField f2("artist", QVariant::String); - QSqlField f3("albumcount", QVariant::Int); - - f1.setValue(QVariant(id)); - f2.setValue(QVariant(name)); - f3.setValue(QVariant(0)); - record.append(f1); - record.append(f2); - record.append(f3); - - artistModel->insertRecord(-1, record); - return id; -} - -int Dialog::addNewAlbum(const QString &title, int artistId) -{ - int id = generateAlbumId(); - QSqlRecord record; - - QSqlField f1("albumid", QVariant::Int); - QSqlField f2("title", QVariant::String); - QSqlField f3("artistid", QVariant::Int); - QSqlField f4("year", QVariant::Int); - - f1.setValue(QVariant(id)); - f2.setValue(QVariant(title)); - f3.setValue(QVariant(artistId)); - f4.setValue(QVariant(yearEditor->value())); - record.append(f1); - record.append(f2); - record.append(f3); - record.append(f4); - - model->insertRecord(-1, record); - return id; -} - -void Dialog::addTracks(int albumId, QStringList tracks) -{ - QDomElement albumNode = albumDetails.createElement("album"); - albumNode.setAttribute("id", albumId); - - for (int i = 0; i < tracks.count(); i++) { - QString trackNumber = QString::number(i); - if (i < 10) - trackNumber.prepend("0"); - - QDomText textNode = albumDetails.createTextNode(tracks.at(i)); - - QDomElement trackNode = albumDetails.createElement("track"); - trackNode.setAttribute("number", trackNumber); - trackNode.appendChild(textNode); - - albumNode.appendChild(trackNode); - } - - QDomNodeList archive = albumDetails.elementsByTagName("archive"); - archive.item(0).appendChild(albumNode); - -/* - The following code is commented out since the example uses an in - memory database, i.e., altering the XML file will bring the data - out of sync. - - if (!outputFile->open(QIODevice::WriteOnly)) { - return; - } else { - QTextStream stream(outputFile); - archive.item(0).save(stream, 4); - outputFile->close(); - } -*/ -} - -void Dialog::increaseAlbumCount(QModelIndex artistIndex) -{ - QSqlTableModel *artistModel = model->relationModel(2); - - QModelIndex albumCountIndex; - albumCountIndex = artistIndex.sibling(artistIndex.row(), 2); - - int albumCount = albumCountIndex.data().toInt(); - artistModel->setData(albumCountIndex, QVariant(albumCount + 1)); -} - - -void Dialog::revert() -{ - artistEditor->clear(); - titleEditor->clear(); - yearEditor->setValue(QDate::currentDate().year()); - tracksEditor->clear(); -} - -QGroupBox *Dialog::createInputWidgets() -{ - QGroupBox *box = new QGroupBox(tr("Add Album")); - - QLabel *artistLabel = new QLabel(tr("Artist:")); - QLabel *titleLabel = new QLabel(tr("Title:")); - QLabel *yearLabel = new QLabel(tr("Year:")); - QLabel *tracksLabel = new QLabel(tr("Tracks (separated by comma):")); - - artistEditor = new QLineEdit; - titleEditor = new QLineEdit; - - yearEditor = new QSpinBox; - yearEditor->setMinimum(1900); - yearEditor->setMaximum(QDate::currentDate().year()); - yearEditor->setValue(yearEditor->maximum()); - yearEditor->setReadOnly(false); - - tracksEditor = new QLineEdit; - - QGridLayout *layout = new QGridLayout; - layout->addWidget(artistLabel, 0, 0); - layout->addWidget(artistEditor, 0, 1); - layout->addWidget(titleLabel, 1, 0); - layout->addWidget(titleEditor, 1, 1); - layout->addWidget(yearLabel, 2, 0); - layout->addWidget(yearEditor, 2, 1); - layout->addWidget(tracksLabel, 3, 0, 1, 2); - layout->addWidget(tracksEditor, 4, 0, 1, 2); - box->setLayout(layout); - - return box; -} - -QDialogButtonBox *Dialog::createButtons() -{ - QPushButton *closeButton = new QPushButton(tr("&Close")); - QPushButton *revertButton = new QPushButton(tr("&Revert")); - QPushButton *submitButton = new QPushButton(tr("&Submit")); - - closeButton->setDefault(true); - - connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); - connect(revertButton, SIGNAL(clicked()), this, SLOT(revert())); - connect(submitButton, SIGNAL(clicked()), this, SLOT(submit())); - - QDialogButtonBox *buttonBox = new QDialogButtonBox; - buttonBox->addButton(submitButton, QDialogButtonBox::ResetRole); - buttonBox->addButton(revertButton, QDialogButtonBox::ResetRole); - buttonBox->addButton(closeButton, QDialogButtonBox::RejectRole); - - return buttonBox; -} - -QModelIndex Dialog::indexOfArtist(const QString &artist) -{ - QSqlTableModel *artistModel = model->relationModel(2); - - for (int i = 0; i < artistModel->rowCount(); i++) { - QSqlRecord record = artistModel->record(i); - if (record.value("artist") == artist) - return artistModel->index(i, 1); - } - - return QModelIndex(); -} - -int Dialog::generateArtistId() -{ - uniqueArtistId += 1; - return uniqueArtistId; -} - -int Dialog::generateAlbumId() -{ - uniqueAlbumId += 1; - return uniqueAlbumId; -}