summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actorcountmodel.cpp76
-rw-r--r--actorcountmodel.h31
-rw-r--r--editarchiveitemdialog.cpp81
-rw-r--r--editarchiveitemdialog.h12
-rw-r--r--shemov.pro6
-rw-r--r--statisticsdialog.cpp21
6 files changed, 154 insertions, 73 deletions
diff --git a/actorcountmodel.cpp b/actorcountmodel.cpp
new file mode 100644
index 0000000..ac82f97
--- /dev/null
+++ b/actorcountmodel.cpp
@@ -0,0 +1,76 @@
+/*
+ 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 <QSqlQuery>
+#include <QIcon>
+
+#include "actorcountmodel.h"
+
+ActorCountModel::ActorCountModel(QObject *parent) : QAbstractItemModel(parent) {
+ QSqlQuery query("SELECT iactorid, tactorname FROM actor ORDER BY tactorname ASC");
+ QSqlQuery countQuery;
+ countQuery.prepare("SELECT COUNT(*) FROM movieactormap WHERE iactorid = :id");
+ while(query.next()){
+ QVariant *name = new QVariant(query.value(1));
+ countQuery.bindValue(":id", query.value(0));
+ countQuery.exec();
+ QVariant *count;
+ while(countQuery.next()){
+ count = new QVariant(countQuery.value(0));
+ }
+ QList<QVariant*> l;
+ l << name << count;
+ mItems.append(l);
+ }
+ mHeaderData << tr("Model name") << tr("Movies");
+}
+
+ActorCountModel::~ActorCountModel() {
+ foreach(QList<QVariant*> l, mItems){
+ qDeleteAll(l);
+ }
+}
+
+QModelIndex ActorCountModel::index(int row, int column, const QModelIndex &parent) const {
+ if((column > 1) || (row >= mItems.size()) || (row < 0) || (parent != QModelIndex())){
+ return QModelIndex();
+ }
+ return createIndex(row, column, 0);
+}
+
+int ActorCountModel::rowCount(const QModelIndex &) const {
+ return mItems.size();
+}
+
+int ActorCountModel::columnCount(const QModelIndex &) const {
+ return 2;
+}
+
+QVariant ActorCountModel::data(const QModelIndex &idx, int role) const {
+ if(!idx.isValid() || (idx.column() > 1) || (idx.row() > mItems.size())){
+ return QVariant();
+ }
+ switch (role) {
+ case Qt::DisplayRole:
+ return *(mItems.at(idx.row()).at(idx.column()));
+ break;
+ case Qt::DecorationRole:
+ if(idx.column() == 0){
+ return QIcon(":/dildo.png");
+ }
+ break;
+ }
+ return QVariant();
+}
+
+QVariant ActorCountModel::headerData(int section, Qt::Orientation o, int role) const {
+ if((role != Qt::DisplayRole) || (o != Qt::Horizontal) || (section > 1)){
+ return QVariant();
+ }
+ return mHeaderData.at(section);
+}
+
diff --git a/actorcountmodel.h b/actorcountmodel.h
new file mode 100644
index 0000000..aa605aa
--- /dev/null
+++ b/actorcountmodel.h
@@ -0,0 +1,31 @@
+/*
+ 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.
+*/
+
+#ifndef ACTORCOUNTMODEL_H
+#define ACTORCOUNTMODEL_H
+
+#include <QAbstractItemModel>
+
+class ActorCountModel : public QAbstractItemModel {
+ Q_OBJECT
+ public:
+ ActorCountModel(QObject *parent = 0);
+ virtual ~ActorCountModel();
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &idx) const;
+ int columnCount(const QModelIndex &idx) const;
+ QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const;
+ QVariant headerData(int section, Qt::Orientation o, int role = Qt::DisplayRole) const;
+ QModelIndex parent(const QModelIndex &) const { return QModelIndex(); };
+
+ private:
+ QList<QList<QVariant*> >mItems;
+ QList<QVariant> mHeaderData;
+};
+
+#endif
+
diff --git a/editarchiveitemdialog.cpp b/editarchiveitemdialog.cpp
index 20641a5..b10dbb0 100644
--- a/editarchiveitemdialog.cpp
+++ b/editarchiveitemdialog.cpp
@@ -18,7 +18,6 @@
#include <QSplitter>
#include <QApplication>
#include <QModelIndex>
-//#include <QLocale>
#include <QTreeView>
#include "editarchiveitemdialog.h"
@@ -28,6 +27,8 @@
#include "covereditor.h"
#include "coveritem.h"
#include "fileinfomodel.h"
+#include "actorwidget.h"
+#include "actormodel.h"
EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors, MovieModel *movies, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mGenreModel(genre), mActorsModel(actors), mMovieModel(movies){
QWidget *w1 = new QWidget;
@@ -36,9 +37,6 @@ EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors
//movie information
QLabel *l1 = new QLabel(tr("Movie information"));
w1Layout->addWidget(l1);
- /*mMovieInfo = new QTextEdit;
- mMovieInfo->setReadOnly(true);
- mMovieInfo->setFont(QFont("Courier new"));*/
mMovieInfo = new QTreeView;
mFileInfoModel = new FileInfoModel;
mMovieInfo->setModel(mFileInfoModel);
@@ -46,26 +44,12 @@ EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors
//actors
QLabel *l2 = new QLabel(tr("Select actors"));
- mActors = new QComboBox;
- mActors->setModel(mActorsModel);
QHBoxLayout *actorsLayout = new QHBoxLayout;
+ mActorsDisplay = new ActorWidget;
+ mCurrentActors = new ActorModel;
actorsLayout->addWidget(l2);
- actorsLayout->addWidget(mActors);
- w1Layout->addLayout(actorsLayout);
- mActorsDisplay = new QTextEdit;
- mActorsDisplay->setReadOnly(true);
- mActorsDisplay->setFont(QFont("Courier new"));
w1Layout->addWidget(mActorsDisplay);
- QHBoxLayout *actorButtons = new QHBoxLayout;
- mAddActor = new QPushButton(tr("&Add Actor"));
- connect(mAddActor, SIGNAL(clicked()), this, SLOT(addActor()));
- mRemoveActor = new QPushButton(tr("&Remove Actor"));
- connect(mRemoveActor, SIGNAL(clicked()), this, SLOT(removeActor()));
- actorButtons->addStretch();
- actorButtons->addWidget(mAddActor);
- actorButtons->addWidget(mRemoveActor);
- w1Layout->addLayout(actorButtons);
-
+
//genre
QLabel *l3 = new QLabel(tr("Select genre"));
mGenre = new QComboBox;
@@ -155,23 +139,14 @@ void EditArchiveItemDialog::setMovie(const QModelIndex &movie){
return;
}
mMovieId = movie.data(MovieModel::IdRole).toInt();
- mActorMap = movie.data(MovieModel::ActorsMap).value<QHash<QString, QVariant> >();
+ QHash<QString, QVariant> actorMap = movie.data(MovieModel::ActorsMap).value<QHash<QString, QVariant> >();
+ for(QHash<QString, QVariant>::const_iterator it = actorMap.constBegin(); it != actorMap.constEnd(); ++it){
+ mActorsDisplay->addActor(it.key());
+ }
mCovers = movie.data(MovieModel::CoverRole).toList();
- setActors();
setMovieInfo(movie);
}
-void EditArchiveItemDialog::setActors(){
- QString html("<html><body style=\"color:#CD0003\"><ul>");
- QHash<QString, QVariant>::const_iterator it = mActorMap.constBegin();
- while(it != mActorMap.constEnd()){
- html.append(QString("<li>%1</li>").arg(it.key()));
- ++it;
- }
- html.append("</ul></body></html>");
- mActorsDisplay->setHtml(html);
-}
-
void EditArchiveItemDialog::setMovieInfo(const QModelIndex &movie){
QModelIndex idx = mMovieModel->index(movie.row(), MovieItem::Title, QModelIndex());
mTitle->setText(idx.data(MovieModel::TitleBaseRole).toString());
@@ -193,40 +168,20 @@ void EditArchiveItemDialog::setMovieInfo(const QModelIndex &movie){
mMovieInfo->expandAll();
}
-void EditArchiveItemDialog::addActor(){
- QString currentText = mActors->currentText();
- QModelIndex idx = mActorsModel->index(currentText);
- if(idx.isValid()){
- int id = idx.data(ListModel::IdRole).toInt();
- mActorMap.insert(currentText, id);
- setActors();
- }
-}
-
void EditArchiveItemDialog::addActor(const QString &actor){
- int idx = mActors->findText(actor);
- if(idx != -1){
- mActors->setCurrentIndex(idx);
- addActor();
- }
-}
-
-void EditArchiveItemDialog::removeActor(){
- QString currentText = mActors->currentText();
- if(mActorMap.contains(currentText)){
- mActorMap.remove(currentText);
- setActors();
- }
+ mActorsDisplay->addActor(actor);
}
void EditArchiveItemDialog::updateMovie(){
- QHash<QString, QVariant>::const_iterator it = mActorMap.constBegin();
- QList<QVariant> actors;
- while(it != mActorMap.constEnd()){
- actors << it.value();
- ++it;
+ QStringList actors = mActorsDisplay->actors();
+ QList<QVariant> actorIds;
+ foreach(QString a, actors){
+ QModelIndex idx = mActorsModel->index(a);
+ if(idx.isValid()){
+ actorIds << idx.data(ListModel::IdRole);
+ }
}
- mMovieModel->setActors(mMovieId, actors);
+ mMovieModel->setActors(mMovieId, actorIds);
QString genreName = mGenre->currentText();
QModelIndex genreIdx = mGenreModel->index(genreName);
QModelIndex genreMovieIndex = mMovieModel->index(mMovieId, MovieItem::Genre);
diff --git a/editarchiveitemdialog.h b/editarchiveitemdialog.h
index c436c6c..2cf4a2a 100644
--- a/editarchiveitemdialog.h
+++ b/editarchiveitemdialog.h
@@ -22,6 +22,8 @@ class QPushButton;
class QModelIndex;
class QTreeView;
class FileInfoModel;
+class ActorWidget;
+class ActorModel;
class EditArchiveItemDialog : public QDialog {
Q_OBJECT
@@ -31,33 +33,27 @@ class EditArchiveItemDialog : public QDialog {
void setMovie(const QModelIndex &movie);
private slots:
- void addActor();
void addActor(const QString &actor);
- void removeActor();
void updateMovie();
private:
- void setActors();
void setMovieInfo(const QModelIndex &movie);
ListModel *mGenreModel;
ListModel *mActorsModel;
+ ActorModel *mCurrentActors;
FileInfoModel *mFileInfoModel;
MovieModel *mMovieModel;
QComboBox *mGenre;
QComboBox *mActors;
- //QTextEdit *mMovieInfo;
QTreeView *mMovieInfo;
- QTextEdit *mActorsDisplay;
+ ActorWidget *mActorsDisplay;
QSpinBox *mQuality;
QSpinBox *mSeriesNo;
QSpinBox *mPartNo;
QSpinBox *mDvd;
QPushButton *mUpdate;
QPushButton *mClose;
- QPushButton *mAddActor;
- QPushButton *mRemoveActor;
QLineEdit *mTitle;
- QHash<QString, QVariant> mActorMap;
QList<QVariant> mCovers;
int mMovieId;
};
diff --git a/shemov.pro b/shemov.pro
index 0a62789..043d169 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -34,7 +34,8 @@ statisticsdialog.cpp \
actorwidget.cpp \
actormodel.cpp \
fileinfoitem.cpp \
-fileinfomodel.cpp
+fileinfomodel.cpp \
+actorcountmodel.cpp
HEADERS = listitem.h \
listmodel.h \
movieitem.h \
@@ -67,7 +68,8 @@ statisticsdialog.h \
actorwidget.h \
actormodel.h \
fileinfoitem.h \
-fileinfomodel.h
+fileinfomodel.h \
+actorcountmodel.h
LIBS += -lmagic
LIBS += -lcryptopp
INCLUDEPATH += /usr/include/cryptopp
diff --git a/statisticsdialog.cpp b/statisticsdialog.cpp
index 3bae0eb..5a48f63 100644
--- a/statisticsdialog.cpp
+++ b/statisticsdialog.cpp
@@ -19,15 +19,36 @@
#include <QLinearGradient>
#include <QPushButton>
#include <QSqlError>
+#include <QTreeView>
+#include <QSortFilterProxyModel>
#include "statisticsdialog.h"
+#include "actorcountmodel.h"
StatisticsDialog::StatisticsDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){
QVBoxLayout *mainLayout = new QVBoxLayout;
mTab = new QTabWidget;
+
+ // quality distribution
QualityStats * qs = new QualityStats;
mTab->addTab(qs, tr("Quality Distribution"));
mainLayout->addWidget(mTab);
+
+ // 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"));