summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archiveviewwidget.cpp1
-rw-r--r--shemov.cpp4
-rw-r--r--statisticsdialog.cpp85
-rw-r--r--statisticsdialog.h3
4 files changed, 86 insertions, 7 deletions
diff --git a/archiveviewwidget.cpp b/archiveviewwidget.cpp
index cc018b2..d95c122 100644
--- a/archiveviewwidget.cpp
+++ b/archiveviewwidget.cpp
@@ -58,6 +58,7 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo
filterLayout->addWidget(mName);
mFilter = new QPushButton(tr("Filter"));
connect(mFilter, SIGNAL(clicked()), this, SLOT(setFilter()));
+ connect(mName, SIGNAL(returnPressed()), this, SLOT(setFilter()));
filterLayout->addWidget(mFilter);
mClearFilter = new QPushButton(tr("Clear filter"));
filterLayout->addWidget(mClearFilter);
diff --git a/shemov.cpp b/shemov.cpp
index 4d6f4fc..449846c 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -38,6 +38,7 @@
#include "archiveviewwidget.h"
#include "editarchiveitemdialog.h"
#include "coverarchiveeditor.h"
+#include "statisticsdialog.h"
SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) {
qApp->setWindowIcon(QIcon(":/shemov.png"));
@@ -211,7 +212,8 @@ void SheMov::aboutShemov(){
}
void SheMov::showStatistics(){
-
+ StatisticsDialog dlg(this);
+ dlg.exec();
}
void SheMov::createStatusbar(){
diff --git a/statisticsdialog.cpp b/statisticsdialog.cpp
index 09b9d15..3bae0eb 100644
--- a/statisticsdialog.cpp
+++ b/statisticsdialog.cpp
@@ -7,6 +7,7 @@
#include <QTabWidget>
#include <QPainter>
+#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSqlQuery>
#include <QVariant>
@@ -15,20 +16,36 @@
#include <QPainter>
#include <QPen>
#include <QBrush>
-#include <QGradient>
+#include <QLinearGradient>
+#include <QPushButton>
+#include <QSqlError>
#include "statisticsdialog.h"
StatisticsDialog::StatisticsDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){
- QHBoxLayout *mainLayout = new QHBoxLayout;
+ QVBoxLayout *mainLayout = new QVBoxLayout;
mTab = new QTabWidget;
+ QualityStats * qs = new QualityStats;
+ mTab->addTab(qs, tr("Quality Distribution"));
+ mainLayout->addWidget(mTab);
+ 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);
}
-QualityStats::QualityStats(QWidget *parent) : QWidget(parent), mMargin(10) {
+QualityStats::QualityStats(QWidget *parent) : QWidget(parent), mMargin(10), mMaxValue(0) {
QSqlQuery q("SELECT DISTINCT(iquality), COUNT(iquality) FROM movies GROUP BY iquality");
- q.exec();
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();
@@ -36,9 +53,65 @@ QualityStats::QualityStats(QWidget *parent) : QWidget(parent), mMargin(10) {
void QualityStats::paintEvent(QPaintEvent *){
QPainter p(this);
- int width = size().width();
- QPen pen(Qt::red);
+ 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 {
diff --git a/statisticsdialog.h b/statisticsdialog.h
index 7dd78c2..115d6c9 100644
--- a/statisticsdialog.h
+++ b/statisticsdialog.h
@@ -14,6 +14,7 @@
class QTabWidget;
class QPaintEvent;
class QSize;
+class QPushButton;
class StatisticsDialog : public QDialog {
Q_OBJECT
@@ -23,6 +24,7 @@ class StatisticsDialog : public QDialog {
private:
QTabWidget *mTab;
+ QPushButton *mOk;
};
class QualityStats : public QWidget {
@@ -38,6 +40,7 @@ class QualityStats : public QWidget {
private:
int mBarHeight;
const int mMargin;
+ int mMaxValue;
QMap<int, int> mQualityDistrib;
};