/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "statisticsdialog.h" #include "actorcountmodel.h" #include "graphbarwidget.h" StatisticsDialog::StatisticsDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ QVBoxLayout *mainLayout = new QVBoxLayout; mTab = new QTabWidget; // quality distribution QList > qualityData; QSqlQuery q("SELECT DISTINCT(iquality), COUNT(iquality) FROM movies GROUP BY iquality ORDER BY iquality"); while(q.next()){ QList d; d << q.value(0) << q.value(1) << q.value(1); qualityData << d; } GraphBarWidget *qs = new GraphBarWidget(qualityData); qs->setCaption(tr("Movie qualities")); mTab->addTab(qs, tr("Quality Distribution")); mainLayout->addWidget(mTab); // genre distribution QList > genreData; QSqlQuery q2("SELECT DISTINCT(genre.igenreid), genre.tgenrename, COUNT(movies.imovid) FROM movies, genre WHERE movies.igenreid = genre.igenreid GROUP by genre.igenreid, genre.tgenrename ORDER by genre.tgenrename"); while(q2.next()){ QList d; d << q2.value(1) << q2.value(2) << q2.value(2); genreData << d; } GraphBarWidget *gs = new GraphBarWidget(genreData); gs->setCaption(tr("Genre Distribution")); mTab->addTab(gs, tr("Genre Distribution")); // top ten actors QList > actorData; QSqlQuery q3("SELECT DISTINCT(actor.iactorid), actor.tactorname, COUNT(DISTINCT(movies.ttitle)) AS num FROM movies, actor, movieactormap WHERE actor.iactorid = movieactormap.iactorid AND movieactormap.imovid = movies.imovid GROUP BY actor.iactorid, actor.tactorname ORDER BY num DESC LIMIT 10"); while(q3.next()){ QList d; d << q3.value(1) << q3.value(2) << q3.value(2); actorData << d; } GraphBarWidget *as = new GraphBarWidget(actorData); as->setCaption(tr("Top 10 actors")); mTab->addTab(as, tr("Top 10 actors")); // actor count QWidget *actorWidget = new QWidget; QHBoxLayout *actorLayout = new QHBoxLayout; QTreeView *actorView = new QTreeView; actorView->setRootIsDecorated(false); ActorCountModel *aModel = new ActorCountModel; QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this); proxy->setSourceModel(aModel); actorView->setModel(proxy); actorView->resizeColumnToContents(0); actorLayout->addWidget(actorView); actorWidget->setLayout(actorLayout); actorView->setSortingEnabled(true); mTab->addTab(actorWidget, tr("Actor overview")); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->setAlignment(Qt::AlignHCenter); mOk = new QPushButton(tr("Ok")); connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); buttonLayout->addWidget(mOk); mainLayout->addLayout(buttonLayout); QString title = QString(tr("%1 - Statistics")).arg(qApp->applicationName()); setLayout(mainLayout); setWindowTitle(title); }