diff options
author | Arno <arno@disconnect.de> | 2016-09-16 08:16:43 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-09-16 08:16:43 +0200 |
commit | df6126e9444a6ab88c2c20f8da980795e3418781 (patch) | |
tree | a8edd95ca0953f6c955555518afc29b5fc13fc9c /actorwidget.cpp | |
parent | 15e4220aada49707be8333402c0cd8acba1a94ce (diff) | |
download | ShemovCleaner-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.cpp | 212 |
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; +} |