tests/qtp/qtp_masterdetail/mainwindow.cpp
changeset 37 758a864f9613
parent 36 ef0373b55136
--- a/tests/qtp/qtp_masterdetail/mainwindow.cpp	Fri Sep 17 08:34:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,429 +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 "mainwindow.h"
-#include "dialog.h"
-
-#include <QtGui>
-#include <QtSql>
-#include <QtXml>
-
-extern int uniqueAlbumId;
-extern int uniqueArtistId;
-
-MainWindow::MainWindow(const QString &artistTable, const QString &albumTable,
-                       QFile *albumDetails, QWidget *parent)
-     : QMainWindow(parent)
-{
-    file = albumDetails;
-    readAlbumData();
-
-    model = new QSqlRelationalTableModel(this);
-    model->setTable(albumTable);
-    model->setRelation(2, QSqlRelation(artistTable, "id", "artist"));
-    model->select();
-
-    QGroupBox *artists = createArtistGroupBox();
-    QGroupBox *albums = createAlbumGroupBox();
-    QGroupBox *details = createDetailsGroupBox();
-
-    artistView->setCurrentIndex(0);
-    uniqueAlbumId = model->rowCount();
-    uniqueArtistId = artistView->count();
-
-    connect(model, SIGNAL(rowsInserted(QModelIndex, int, int)),
-            this, SLOT(updateHeader(QModelIndex, int, int)));
-    connect(model, SIGNAL(rowsRemoved(QModelIndex, int, int)),
-            this, SLOT(updateHeader(QModelIndex, int, int)));
-
-    QGridLayout *layout = new QGridLayout;
-    layout->addWidget(artists, 0, 0);
-    layout->addWidget(albums, 1, 0);
-    layout->addWidget(details, 0, 1, 2, 1);
-    layout->setColumnStretch(1, 1);
-    layout->setColumnMinimumWidth(0, 500);
-
-    QWidget *widget = new QWidget;
-    widget->setLayout(layout);
-    setCentralWidget(widget);
-    createMenuBar();
-
-    showImageLabel();
-    resize(850, 400);
-    setWindowTitle(tr("Music Archive"));
-}
-
-void MainWindow::changeArtist(int row)
-{
-    if (row > 0) {
-        QModelIndex index = model->relationModel(2)->index(row, 1);
-        model->setFilter("artist = '" + index.data().toString() + '\'') ;
-        showArtistProfile(index);
-    } else if (row == 0) {
-        model->setFilter(QString());
-        showImageLabel();
-    } else {
-        return;
-    }
-}
-
-void MainWindow::showArtistProfile(QModelIndex index)
-{
-    QSqlRecord record = model->relationModel(2)->record(index.row());
-
-    QString name = record.value("artist").toString();
-    QString count = record.value("albumcount").toString();
-    profileLabel->setText(tr("Artist : %1 \n" \
-                             "Number of Albums: %2").arg(name).arg(count));
-
-    profileLabel->show();
-    iconLabel->show();
-
-    titleLabel->hide();
-    trackList->hide();
-    imageLabel->hide();
-}
-
-void MainWindow::showAlbumDetails(QModelIndex index)
-{
-    QSqlRecord record = model->record(index.row());
-
-    QString artist = record.value("artist").toString();
-    QString title = record.value("title").toString();
-    QString year = record.value("year").toString();
-    QString albumId = record.value("albumid").toString();
-
-    showArtistProfile(indexOfArtist(artist));
-    titleLabel->setText(tr("Title: %1 (%2)").arg(title).arg(year));
-    titleLabel->show();
-
-    QDomNodeList albums = albumData.elementsByTagName("album");
-    for (int i = 0; i < albums.count(); i++) {
-        QDomNode album = albums.item(i);
-        if (album.toElement().attribute("id") == albumId) {
-            getTrackList(album.toElement());
-            break;
-        }
-    }
-    if (!trackList->count() == 0)
-        trackList->show();
-}
-
-void MainWindow::getTrackList(QDomNode album)
-{
-    trackList->clear();
-
-    QDomNodeList tracks = album.childNodes();
-    QDomNode track;
-    QString trackNumber;
-
-    for (int j = 0; j < tracks.count(); j++) {
-
-        track = tracks.item(j);
-        trackNumber = track.toElement().attribute("number");
-
-        QListWidgetItem *item = new QListWidgetItem(trackList);
-        item->setText(trackNumber + ": " + track.toElement().text());
-    }
-}
-
-void MainWindow::addAlbum()
-{
-    Dialog *dialog = new Dialog(model, albumData, file, this);
-    int accepted = dialog->exec();
-
-    if (accepted == 1) {
-        int lastRow = model->rowCount() - 1;
-        albumView->selectRow(lastRow);
-        albumView->scrollToBottom();
-        showAlbumDetails(model->index(lastRow, 0));
-    }
-}
-
-void MainWindow::deleteAlbum()
-{
-    QModelIndexList selection = albumView->selectionModel()->selectedRows(0);
-
-    if (!selection.empty()) {
-        QModelIndex idIndex = selection.at(0);
-        int id = idIndex.data().toInt();
-        QString title = idIndex.sibling(idIndex.row(), 1).data().toString();
-        QString artist = idIndex.sibling(idIndex.row(), 2).data().toString();
-
-        QMessageBox::StandardButton button;
-        button = QMessageBox::question(this, tr("Delete Album"),
-                                       QString(tr("Are you sure you want to " \
-                                                  "delete '%1' by '%2'?"))
-                                              .arg(title).arg(artist),
-                                       QMessageBox::Yes | QMessageBox::No);
-
-        if (button == QMessageBox::Yes) {
-            removeAlbumFromFile(id);
-            removeAlbumFromDatabase(idIndex);
-            decreaseAlbumCount(indexOfArtist(artist));
-
-            showImageLabel();
-        }
-    } else {
-        QMessageBox::information(this, tr("Delete Album"),
-                                 tr("Select the album you want to delete."));
-    }
-}
-
-void MainWindow::removeAlbumFromFile(int id)
-{
-
-    QDomNodeList albums = albumData.elementsByTagName("album");
-
-    for (int i = 0; i < albums.count(); i++) {
-        QDomNode node = albums.item(i);
-        if (node.toElement().attribute("id").toInt() == id) {
-            albumData.elementsByTagName("archive").item(0).removeChild(node);
-            break;
-        }
-    }
-/*
-    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 (!file->open(QIODevice::WriteOnly)) {
-        return;
-    } else {
-        QTextStream stream(file);
-        albumData.elementsByTagName("archive").item(0).save(stream, 4);
-        file->close();
-    }
-*/
-}
-
-void MainWindow::removeAlbumFromDatabase(QModelIndex index)
-{
-    model->removeRow(index.row());
-}
-
-void MainWindow::decreaseAlbumCount(QModelIndex artistIndex)
-{
-    int row = artistIndex.row();
-    QModelIndex albumCountIndex = artistIndex.sibling(row, 2);
-    int albumCount = albumCountIndex.data().toInt();
-
-    QSqlTableModel *artists = model->relationModel(2);
-
-    if (albumCount == 1) {
-        artists->removeRow(row);
-        showImageLabel();
-    } else {
-        artists->setData(albumCountIndex, QVariant(albumCount - 1));
-    }
-}
-
-void MainWindow::readAlbumData()
-{
-    if (!file->open(QIODevice::ReadOnly))
-        return;
-
-    if (!albumData.setContent(file)) {
-        file->close();
-        return;
-    }
-    file->close();
-}
-
-QGroupBox* MainWindow::createArtistGroupBox()
-{
-    artistView = new QComboBox;
-    artistView->setModel(model->relationModel(2));
-    artistView->setModelColumn(1);
-
-    connect(artistView, SIGNAL(currentIndexChanged(int)),
-            this, SLOT(changeArtist(int)));
-
-    QGroupBox *box = new QGroupBox(tr("Artist"));
-
-    QGridLayout *layout = new QGridLayout;
-    layout->addWidget(artistView, 0, 0);
-    box->setLayout(layout);
-
-    return box;
-}
-
-QGroupBox* MainWindow::createAlbumGroupBox()
-{
-    QGroupBox *box = new QGroupBox(tr("Album"));
-
-    albumView = new QTableView;
-    albumView->setEditTriggers(QAbstractItemView::NoEditTriggers);
-    albumView->setSortingEnabled(true);
-    albumView->setSelectionBehavior(QAbstractItemView::SelectRows);
-    albumView->setSelectionMode(QAbstractItemView::SingleSelection);
-    albumView->setShowGrid(false);
-    albumView->verticalHeader()->hide();
-    albumView->setAlternatingRowColors(true);
-    albumView->setModel(model);
-    adjustHeader();
-
-    QLocale locale = albumView->locale();
-    locale.setNumberOptions(QLocale::OmitGroupSeparator);
-    albumView->setLocale(locale);
-
-    connect(albumView, SIGNAL(clicked(QModelIndex)),
-            this, SLOT(showAlbumDetails(QModelIndex)));
-    connect(albumView, SIGNAL(activated(QModelIndex)),
-            this, SLOT(showAlbumDetails(QModelIndex)));
-
-    QVBoxLayout *layout = new QVBoxLayout;
-    layout->addWidget(albumView, 0, 0);
-    box->setLayout(layout);
-
-    return box;
-}
-
-QGroupBox* MainWindow::createDetailsGroupBox()
-{
-    QGroupBox *box = new QGroupBox(tr("Details"));
-
-    profileLabel = new QLabel;
-    profileLabel->setWordWrap(true);
-    profileLabel->setAlignment(Qt::AlignBottom);
-
-    titleLabel = new QLabel;
-    titleLabel->setWordWrap(true);
-    titleLabel->setAlignment(Qt::AlignBottom);
-
-    iconLabel = new QLabel();
-    iconLabel->setAlignment(Qt::AlignBottom | Qt::AlignRight);
-    iconLabel->setPixmap(QPixmap(":/images/icon.png"));
-
-    imageLabel = new QLabel;
-    imageLabel->setWordWrap(true);
-    imageLabel->setAlignment(Qt::AlignCenter);
-    imageLabel->setPixmap(QPixmap(":/images/image.png"));
-
-    trackList = new QListWidget;
-
-    QGridLayout *layout = new QGridLayout;
-    layout->addWidget(imageLabel, 0, 0, 3, 2);
-    layout->addWidget(profileLabel, 0, 0);
-    layout->addWidget(iconLabel, 0, 1);
-    layout->addWidget(titleLabel, 1, 0, 1, 2);
-    layout->addWidget(trackList, 2, 0, 1, 2);
-    layout->setRowStretch(2, 1);
-    box->setLayout(layout);
-
-    return box;
-}
-
-void MainWindow::createMenuBar()
-{
-    QAction *addAction = new QAction(tr("&Add album..."), this);
-    QAction *deleteAction = new QAction(tr("&Delete album..."), this);
-    QAction *quitAction = new QAction(tr("&Quit"), this);
-    QAction *aboutAction = new QAction(tr("&About"), this);
-    QAction *aboutQtAction = new QAction(tr("About &Qt"), this);
-
-    addAction->setShortcut(tr("Ctrl+A"));
-    deleteAction->setShortcut(tr("Ctrl+D"));
-    quitAction->setShortcuts(QKeySequence::Quit);
-
-    QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
-    fileMenu->addAction(addAction);
-    fileMenu->addAction(deleteAction);
-    fileMenu->addSeparator();
-    fileMenu->addAction(quitAction);
-
-    QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
-    helpMenu->addAction(aboutAction);
-    helpMenu->addAction(aboutQtAction);
-
-    connect(addAction, SIGNAL(triggered(bool)), this, SLOT(addAlbum()));
-    connect(deleteAction, SIGNAL(triggered(bool)), this, SLOT(deleteAlbum()));
-    connect(quitAction, SIGNAL(triggered(bool)), this, SLOT(close()));
-    connect(aboutAction, SIGNAL(triggered(bool)), this, SLOT(about()));
-    connect(aboutQtAction, SIGNAL(triggered(bool)), qApp, SLOT(aboutQt()));
-}
-
-void MainWindow::showImageLabel()
-{
-    profileLabel->hide();
-    titleLabel->hide();
-    iconLabel->hide();
-    trackList->hide();
-
-    imageLabel->show();
-}
-
-QModelIndex MainWindow::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();
-}
-
-void MainWindow::updateHeader(QModelIndex, int, int)
-{
-    adjustHeader();
-}
-
-void MainWindow::adjustHeader()
-{
-    albumView->hideColumn(0);
-    albumView->resizeColumnToContents(2);
-    albumView->resizeColumnToContents(3);
-}
-
-void MainWindow::about()
-{
-    QMessageBox::about(this, tr("About Music Archive"),
-            tr("<p>The <b>Music Archive</b> example shows how to present "
-               "data from different data sources in the same application. "
-               "The album titles, and the corresponding artists and release dates, "
-               "are kept in a database, while each album's tracks are stored "
-               "in an XML file. </p><p>The example also shows how to add as "
-               "well as remove data from both the database and the "
-               "associated XML file using the API provided by the QtSql and "
-               "QtXml modules, respectively.</p>"));
-}