summaryrefslogtreecommitdiffstats
path: root/actorwidget.cpp
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 /actorwidget.cpp
parent15e4220aada49707be8333402c0cd8acba1a94ce (diff)
downloadShemovCleaner-df6126e9444a6ab88c2c20f8da980795e3418781.tar.gz
ShemovCleaner-df6126e9444a6ab88c2c20f8da980795e3418781.tar.bz2
ShemovCleaner-df6126e9444a6ab88c2c20f8da980795e3418781.zip
Basic ActorWidget done
Next: Menubar and Toolbar...
Diffstat (limited to 'actorwidget.cpp')
-rw-r--r--actorwidget.cpp212
1 files changed, 212 insertions, 0 deletions
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;
+}