summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-09-16 08:16:43 +0200
committerArno <arno@disconnect.de>2016-09-16 08:16:43 +0200
commitdf6126e9444a6ab88c2c20f8da980795e3418781 (patch)
treea8edd95ca0953f6c955555518afc29b5fc13fc9c
parent15e4220aada49707be8333402c0cd8acba1a94ce (diff)
downloadShemovCleaner-df6126e9444a6ab88c2c20f8da980795e3418781.tar.gz
ShemovCleaner-df6126e9444a6ab88c2c20f8da980795e3418781.tar.bz2
ShemovCleaner-df6126e9444a6ab88c2c20f8da980795e3418781.zip
Basic ActorWidget done
Next: Menubar and Toolbar...
-rw-r--r--ShemovCleaner.pro6
-rw-r--r--actorwidget.cpp212
-rw-r--r--actorwidget.h53
-rw-r--r--higheels.pngbin0 -> 722 bytes
-rw-r--r--hourglass_figure.pngbin0 -> 925 bytes
-rw-r--r--shemovcleaner.cpp9
-rw-r--r--shemovcleaner.h2
-rw-r--r--shemovcleaner.qrc2
8 files changed, 281 insertions, 3 deletions
diff --git a/ShemovCleaner.pro b/ShemovCleaner.pro
index ffdd7e3..1b3ea3b 100644
--- a/ShemovCleaner.pro
+++ b/ShemovCleaner.pro
@@ -24,7 +24,8 @@ SOURCES += main.cpp\
filewidget.cpp \
helper.cpp \
filedisplay.cpp \
- globals.cpp
+ globals.cpp \
+ actorwidget.cpp
HEADERS += \
filesorter.h \
@@ -36,7 +37,8 @@ HEADERS += \
filewidget.h \
helper.h \
filedisplay.h \
- globals.h
+ globals.h \
+ actorwidget.h
DISTFILES +=
diff --git a/actorwidget.cpp b/actorwidget.cpp
new file mode 100644
index 0000000..1b57c40
--- /dev/null
+++ b/actorwidget.cpp
@@ -0,0 +1,212 @@
+#include <QLineEdit>
+#include <QLabel>
+#include <QPushButton>
+#include <QTreeView>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QGridLayout>
+#include <QStandardItemModel>
+#include <QStandardItem>
+#include <QTreeView>
+#include <QSortFilterProxyModel>
+#include <QProgressBar>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QApplication>
+#include <QSettings>
+
+#include "actorwidget.h"
+
+ActorWidget::ActorWidget(QWidget *parent) : QWidget(parent) {
+ mDb = QSqlDatabase::database("shemovdb");
+ if(!mDb.isOpen()){
+ mDb.open();
+ }
+ mAllQ = QSqlQuery(mDb);
+ mAllQ.prepare("SELECT tactorname, iactors_id FROM actors ORDER BY tactorname");
+ mSeriesQ = QSqlQuery(mDb);
+ mSeriesQ.prepare("SELECT series.tseries_name FROM series, seriesparts_actormap, seriesparts, actors WHERE series.iseries_id = seriesparts.iseries_id AND seriesparts.iseriesparts_id = seriesparts_actormap.iseriesparts_id AND seriesparts_actormap.iactors_id = actors.iactors_id AND actors.iactors_id = :id GROUP BY series.iseries_id, series.tseries_name ORDER BY series.tseries_name");
+ mGenresQ = QSqlQuery(mDb);
+ mGenresQ.prepare("SELECT DISTINCT(genres.tgenrename) FROM genres, seriesparts, seriesparts_actormap, seriesparts_genremap WHERE seriesparts_actormap.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts.iseriesparts_id = seriesparts_genremap.iseriesparts_id AND seriesparts_genremap.igenres_id = genres.igenres_id AND seriesparts_actormap.iactors_id = :id ORDER BY genres.tgenrename");
+ mCountQ = QSqlQuery(mDb);
+ mCountQ.prepare("SELECT COUNT(*) FROM actors");
+ setupGui();
+}
+
+ActorWidget::~ActorWidget(){
+ writeSettings();
+}
+
+void ActorWidget::gatherData(){
+ mProgress->reset();
+ mProgress->setMaximum(0);
+ mCountQ.exec();
+ while(mCountQ.next()){
+ mProgress->setMaximum(mCountQ.value(0).toInt());
+ }
+
+ mActorModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A7) << tr("Name"));
+ int count = 0;
+ QStandardItem *root = mActorModel->invisibleRootItem();
+ qApp->processEvents();
+
+ mAllQ.exec();
+ while(mAllQ.next()){
+ QList<QStandardItem*> aData = emptyList();
+ aData[IconColumn]->setIcon(QIcon(":/huge_bra.png"));
+ int aId = mAllQ.value(1).toInt();
+ aData[IconColumn]->setData(aId, IdRole);
+ aData[NameColumn]->setText(mAllQ.value(0).toString());
+ root->appendRow(aData);
+ mProgress->setValue(++count);
+ qApp->processEvents();
+ }
+ mActorView->resizeColumnToContents(IconColumn);
+}
+
+void ActorWidget::gatherSeries(){
+ QModelIndexList sel = mActorView->selectionModel()->selectedRows();
+ if(sel.isEmpty()){
+ return;
+ }
+ mSeriesModel->clear();
+ mSeriesModel->setHorizontalHeaderLabels(QStringList() << QChar(0x2640) << tr("Series"));
+ QStandardItem *root = mSeriesModel->invisibleRootItem();
+ QModelIndex idx = sel.at(0);
+ QVariant id = idx.data(IdRole);
+ mSeriesQ.bindValue(":id", id);
+ mSeriesQ.exec();
+ while(mSeriesQ.next()){
+ QList<QStandardItem*> data = emptyList();
+ data[IconColumn]->setIcon(QIcon(":/higheels.png"));
+ data[NameColumn]->setText(mSeriesQ.value(0).toString());
+ root->appendRow(data);
+ }
+ mSeriesView->resizeColumnToContents(IconColumn);
+}
+
+void ActorWidget::gatherGenres(){
+ QModelIndexList sel = mActorView->selectionModel()->selectedRows();
+ if(sel.isEmpty()){
+ return;
+ }
+ mGenresModel->clear();
+ mGenresModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A4) << tr("Genres"));
+ QStandardItem *root = mGenresModel->invisibleRootItem();
+ QModelIndex idx = sel.at(0);
+ QVariant id = idx.data(IdRole);
+ mGenresQ.bindValue(":id", id);
+ mGenresQ.exec();
+ while(mGenresQ.next()){
+ QList<QStandardItem*> data = emptyList();
+ data[IconColumn]->setIcon(QIcon(":/hourglass_figure.png"));
+ data[NameColumn]->setText(mGenresQ.value(0).toString());
+ root->appendRow(data);
+ }
+ mGenresView->resizeColumnToContents(IconColumn);
+}
+
+void ActorWidget::filter(){
+ QString fs = mActor->text();
+ mProxy->setFilterRegExp(fs);
+ if(fs.isEmpty()){
+ mProxy->invalidate();
+ }
+ mActorView->setFocus();
+ if(mActorModel->rowCount()){
+ QModelIndex idx = mActorModel->index(0, 0);
+ mActorView->selectionModel()->select(idx, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
+ }
+}
+
+void ActorWidget::clearFilter(){
+ mActor->clear();
+ filter();
+ mActor->setFocus();
+}
+
+void ActorWidget::readSettings(){
+ QSettings s;
+ QString f = s.value("actors/filter").toString();
+ mActor->setText(f);
+ filter();
+ QString n = s.value("actors/selectedactor").toString();
+ QList<QStandardItem*> itemL = mActorModel->findItems(n, Qt::MatchExactly, NameColumn);
+ if(!itemL.isEmpty()){
+ QModelIndex cur = mActorModel->indexFromItem(itemL.first());
+ QModelIndex real = mProxy->mapFromSource(cur);
+ mActorView->selectionModel()->select(real, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
+ }
+}
+
+void ActorWidget::writeSettings(){
+ QSettings s;
+ s.setValue("actors/filter", mActor->text());
+ QModelIndexList sel = mActorView->selectionModel()->selectedRows(NameColumn);
+ if(!sel.isEmpty()){
+ s.setValue("actors/selectedactor", sel.first().data());
+ }
+}
+
+void ActorWidget::setupGui(){
+ mActor = new QLineEdit;
+ connect(mActor, SIGNAL(returnPressed()), this, SLOT(filter()));
+ QLabel *filterL = new QLabel(tr("&Filter"));
+ filterL->setBuddy(mActor);
+ QPushButton *doFilter = new QPushButton(tr("Filter"));
+ connect(doFilter, SIGNAL(clicked()), this, SLOT(filter()));
+ QPushButton *doClearFilter = new QPushButton(tr("&Clear"));
+ connect(doClearFilter, SIGNAL(clicked()), this, SLOT(clearFilter()));
+ QHBoxLayout *buttonLayout = new QHBoxLayout;
+ buttonLayout->addWidget(filterL);
+ buttonLayout->addWidget(mActor);
+ buttonLayout->addWidget(doFilter);
+ buttonLayout->addWidget(doClearFilter);
+
+ mActorView = new QTreeView;
+ mActorView->setSortingEnabled(true);
+ mActorView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ mActorView->setSelectionMode(QAbstractItemView::SingleSelection);
+ mActorModel = new QStandardItemModel;
+ mProxy = new QSortFilterProxyModel;
+ mProxy->setSourceModel(mActorModel);
+ mProxy->setFilterKeyColumn(NameColumn);
+ mActorView->setModel(mProxy);
+ connect(mActorView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(gatherSeries()));
+ connect(mActorView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(gatherGenres()));
+
+ mSeriesView = new QTreeView;
+ mSeriesView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ mSeriesView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ mSeriesModel = new QStandardItemModel;
+ mSeriesView->setModel(mSeriesModel);
+
+ mGenresView = new QTreeView;
+ mGenresView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ mGenresView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ mGenresModel = new QStandardItemModel;
+ mGenresView->setModel(mGenresModel);
+
+ QGridLayout *viewGridL = new QGridLayout;
+ viewGridL->addWidget(new QLabel(tr("Series")), 0, 0);
+ viewGridL->addWidget(new QLabel(tr("Genres")), 0, 1);
+ viewGridL->addWidget(mSeriesView, 1, 0);
+ viewGridL->addWidget(mGenresView, 1, 1);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addLayout(buttonLayout);
+ mainLayout->addWidget(new QLabel(tr("Found")));
+ mainLayout->addWidget(mActorView);
+ mainLayout->addLayout(viewGridL);
+ setLayout(mainLayout);
+}
+
+QList<QStandardItem*> ActorWidget::emptyList(){
+ QList<QStandardItem*> retval;
+ for(int i = 0; i < ColumnCount; ++i){
+ QStandardItem *item = new QStandardItem;
+ item->setEditable(false);
+ retval << item;
+ }
+ return retval;
+}
diff --git a/actorwidget.h b/actorwidget.h
new file mode 100644
index 0000000..06e544f
--- /dev/null
+++ b/actorwidget.h
@@ -0,0 +1,53 @@
+#ifndef ACTORWIDGET_H
+#define ACTORWIDGET_H
+
+#include <QWidget>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+
+class QLineEdit;
+class QStandardItemModel;
+class QStandardItem;
+class QSortFilterProxyModel;
+class QTreeView;
+class QProgressBar;
+
+class ActorWidget : public QWidget {
+ Q_OBJECT
+ public:
+ enum { ColumnCount = 2 };
+ enum Columns { IconColumn = 0, NameColumn = 1 };
+ enum CustomRoles { IdRole = Qt::UserRole + 1 };
+ explicit ActorWidget(QWidget *parent = 0);
+ ~ActorWidget();
+ void setProgressBar(QProgressBar *p) { mProgress = p; }
+
+ public slots:
+ void gatherData();
+ void gatherSeries();
+ void gatherGenres();
+ void filter();
+ void clearFilter();
+ void readSettings();
+ void writeSettings();
+
+ private:
+ void setupGui();
+ QList<QStandardItem*> emptyList();
+ QLineEdit *mActor;
+ QStandardItemModel *mActorModel;
+ QStandardItemModel *mSeriesModel;
+ QStandardItemModel *mGenresModel;
+ QSortFilterProxyModel *mProxy;
+ QTreeView *mActorView;
+ QTreeView *mSeriesView;
+ QTreeView *mGenresView;
+ QProgressBar *mProgress;
+ QSqlDatabase mDb;
+ QSqlQuery mAllQ;
+ QSqlQuery mSeriesQ;
+ QSqlQuery mGenresQ;
+ QSqlQuery mCountQ;
+};
+
+#endif // ACTORWIDGET_H
diff --git a/higheels.png b/higheels.png
new file mode 100644
index 0000000..f9e1800
--- /dev/null
+++ b/higheels.png
Binary files differ
diff --git a/hourglass_figure.png b/hourglass_figure.png
new file mode 100644
index 0000000..f9847fc
--- /dev/null
+++ b/hourglass_figure.png
Binary files differ
diff --git a/shemovcleaner.cpp b/shemovcleaner.cpp
index 4bdc524..bc7b0b5 100644
--- a/shemovcleaner.cpp
+++ b/shemovcleaner.cpp
@@ -17,6 +17,7 @@
#include "shemovcleaner.h"
#include "torrentwidget.h"
#include "filewidget.h"
+#include "actorwidget.h"
#include "torrentdisplay.h"
#include "configurationwidget.h"
#include "globals.h"
@@ -30,13 +31,19 @@ ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(p
createStatusBar();
createGlobalActions();
- mTorrentTab = new TorrentWidget;
mTab = new QTabWidget;
+ mTorrentTab = new TorrentWidget;
mFileTab = new FileWidget;
mFileTab->setProgressBar(mProgressBar);
mFileTab->gatherData();
+ mActorTab = new ActorWidget;
+ mActorTab->setProgressBar(mProgressBar);
+ mActorTab->gatherData();
+ mActorTab->readSettings();
+
mTab->addTab(mTorrentTab, tr("&Torrents"));
mTab->addTab(mFileTab, tr("Fi&les"));
+ mTab->addTab(mActorTab, tr("&Actors"));
setCentralWidget(mTab);
connect(mTorrentTab, SIGNAL(statusMessage(QString)), this, SLOT(statusBarMessage(QString)));
diff --git a/shemovcleaner.h b/shemovcleaner.h
index 875b05d..17c9da5 100644
--- a/shemovcleaner.h
+++ b/shemovcleaner.h
@@ -8,6 +8,7 @@ class TorrentWidget;
class FileWidget;
class QLabel;
class QProgressBar;
+class ActorWidget;
class ShemovCleaner : public QMainWindow {
Q_OBJECT
@@ -37,6 +38,7 @@ class ShemovCleaner : public QMainWindow {
QTabWidget *mTab;
TorrentWidget *mTorrentTab;
FileWidget *mFileTab;
+ ActorWidget *mActorTab;
};
#endif // SHEMOVCLEANER_H
diff --git a/shemovcleaner.qrc b/shemovcleaner.qrc
index ba0f137..286aab7 100644
--- a/shemovcleaner.qrc
+++ b/shemovcleaner.qrc
@@ -14,5 +14,7 @@
<file>back_dick.png</file>
<file>edit-cut.png</file>
<file>edit-paste.png</file>
+ <file>higheels.png</file>
+ <file>hourglass_figure.png</file>
</qresource>
</RCC>