summaryrefslogtreecommitdiffstats
path: root/statisticsdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'statisticsdialog.cpp')
-rw-r--r--statisticsdialog.cpp118
1 files changed, 34 insertions, 84 deletions
diff --git a/statisticsdialog.cpp b/statisticsdialog.cpp
index 5a48f63..ba93726 100644
--- a/statisticsdialog.cpp
+++ b/statisticsdialog.cpp
@@ -24,16 +24,49 @@
#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
- QualityStats * qs = new QualityStats;
+ QList<QList<QVariant> > qualityData;
+ QSqlQuery q("SELECT DISTINCT(iquality), COUNT(iquality) FROM movies GROUP BY iquality ORDER BY iquality");
+ while(q.next()){
+ QList<QVariant> 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<QList<QVariant> > 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<QVariant> 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<QList<QVariant> > 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<QVariant> 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;
@@ -59,86 +92,3 @@ StatisticsDialog::StatisticsDialog(QWidget *parent, Qt::WindowFlags f) : QDialog
setLayout(mainLayout);
setWindowTitle(title);
}
-
-QualityStats::QualityStats(QWidget *parent) : QWidget(parent), mMargin(10), mMaxValue(0) {
- QSqlQuery q("SELECT DISTINCT(iquality), COUNT(iquality) FROM movies GROUP BY iquality");
- while(q.next()){
- mQualityDistrib[q.value(0).toInt()] = q.value(1).toInt();
- if(q.value(1).toInt() > mMaxValue){
- mMaxValue = q.value(1).toInt();
- }
- }
- QFontMetrics fm(qApp->font());
- mBarHeight = fm.height();
-}
-
-void QualityStats::paintEvent(QPaintEvent *){
- QPainter p(this);
- QMap<int, qreal> length;
- QMap<int, int>::const_iterator it;
- QMap<int, qreal>::const_iterator itr;
-
- //draw background
- QPen pen(Qt::red, 2);
- p.setPen(pen);
- QLinearGradient bgGradient(QPointF(0.0, height() / 2), QPointF(width(), height() / 2));
- bgGradient.setColorAt(0, QColor(221, 107, 80));
- bgGradient.setColorAt(1, QColor(251, 179, 150));
- QBrush brush(bgGradient);
- p.setBrush(brush);
- p.drawRect(contentsRect());
-
- //draw caption
- QFont f = qApp->font();
- f.setUnderline(true);
- f.setBold(true);
- p.setFont(f);
- QString caption(tr("Quality Distribution"));
- QFontMetrics fm(f);
- int captionStartx = (width() - fm.width(caption)) / 2;
- int captionStarty = fm.height();
- p.drawText(captionStartx, captionStarty, caption);
-
- //prepare drawing data
- int barsStarty = fm.height() + 2 * mMargin;
- f.setUnderline(false);
- f.setBold(true);
- p.setFont(f);
- int maxKey = (--mQualityDistrib.end()).key();
- int barsStartx = p.fontMetrics().width(QString::number(maxKey)) + 2 * mMargin;
- int marginRight = p.fontMetrics().width(QString(tr("(%1")).arg(QString::number(mMaxValue))) + 2 * mMargin;
- int maxWidth = width() - barsStartx - marginRight;
- p.setRenderHints(QPainter::Antialiasing);
- p.setPen(QPen(Qt::red, 1));
-
- //calculate real lengths based on widget width
- for(it = mQualityDistrib.constBegin(); it != mQualityDistrib.constEnd(); ++it){
- qreal value = it.value();
- value = static_cast<qreal>(value) / mMaxValue * maxWidth;
- length[it.key()] = value;
- }
-
- //draw the bars and numbers
- int ctr(0);
- for(itr = length.constBegin(); itr != length.constEnd(); ++itr, ++ctr){
- int starty = barsStarty + ctr * p.fontMetrics().height() + ctr * mMargin;
- p.drawText(mMargin, starty, QString::number(itr.key()));
- QLinearGradient barGradient(QPointF(barsStartx, starty), QPointF(width(), starty));
- barGradient.setColorAt(0, QColor(0, 128, 170));
- barGradient.setColorAt(1, QColor(131, 205, 214));
- QBrush b(barGradient);
- p.setBrush(b);
- QRect bar(barsStartx, starty - p.fontMetrics().height() + p.fontMetrics().descent(), itr.value(), p.fontMetrics().height());
- p.drawRect(bar);
- int nStartx = barsStartx + itr.value() + mMargin;
- p.drawText(nStartx, starty, QString(tr("(%1)")).arg(QString::number(mQualityDistrib[itr.key()])));
- }
-}
-
-QSize QualityStats::sizeHint() const {
- int height = mQualityDistrib.count() * mBarHeight;
- height += mQualityDistrib.count() * mMargin;
- height += mBarHeight + mMargin;
- return QSize(400, height);
-}
-