summaryrefslogtreecommitdiffstats
path: root/moviewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'moviewidget.cpp')
-rw-r--r--moviewidget.cpp181
1 files changed, 181 insertions, 0 deletions
diff --git a/moviewidget.cpp b/moviewidget.cpp
new file mode 100644
index 0000000..8e1d82a
--- /dev/null
+++ b/moviewidget.cpp
@@ -0,0 +1,181 @@
+#include <QToolBar>
+#include <QLabel>
+#include <QLineEdit>
+#include <QComboBox>
+#include <QTreeView>
+#include <QSortFilterProxyModel>
+#include <QStandardItemModel>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QSplitter>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QApplication>
+
+#include "moviewidget.h"
+#include "helper.h"
+
+MovieWidget::MovieWidget(QWidget *parent) : QWidget(parent){
+ setPalette(qApp->palette());
+ setupWidget();
+}
+
+void MovieWidget::setupWidget(){
+ QToolBar *toolbar = new QToolBar;
+ QPixmap buttplug(":/butt_plug.png");
+ QMatrix rotatematrix;
+ rotatematrix.rotate(90);
+ QIcon buttplugRight(buttplug.transformed(rotatematrix));
+ rotatematrix.rotate(-180);
+ QIcon buttplugLeft(buttplug.transformed(rotatematrix));
+ QAction *backA = new QAction(buttplugLeft, tr("Prev. filter"), this);
+ toolbar->addAction(backA);
+ QAction *forwardA = new QAction(buttplugRight, tr("Next filter"), this);
+ toolbar->addAction(forwardA);
+
+ QLabel *filterL = new QLabel(tr("Filter"));
+ mFilterLE = new QLineEdit;
+ QToolBar *filterTB = new QToolBar;
+ QAction *clearFilter = new QAction(Helper::icon(QColor(255,85,255), Qt::white, 'X', true, true), tr("Clear"), this);
+ filterTB->addAction(clearFilter);
+
+ QLabel *selectionL = new QLabel(tr("Selection"));
+ mSelectionCB = new QComboBox;
+ QStringList selections = QStringList() << tr("Actors") << tr("Favorites") << tr("Genres") << tr("Series");
+ mSelectionCB->addItems(selections);
+ connect(mSelectionCB, &QComboBox::currentTextChanged, [=] { selectBy(mSelectionCB->currentText()); });
+
+ QHBoxLayout *topWL = new QHBoxLayout;
+ topWL->addWidget(filterL);
+ topWL->addWidget(mFilterLE);
+ topWL->addWidget(filterTB);
+ topWL->addStretch();
+ topWL->addWidget(toolbar);
+ topWL->addStretch();
+ topWL->addWidget(selectionL);
+ topWL->addWidget(mSelectionCB);
+
+ mTopView = new QTreeView;
+ mTopView->setAlternatingRowColors(true);
+ mTopView->setSortingEnabled(true);
+ mTopView->setUniformRowHeights(true);
+ mTopView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ mTopView->setSelectionMode(QAbstractItemView::SingleSelection);
+ mTopView->setRootIsDecorated(false);
+ mTopModel = new QStandardItemModel;
+ mTopProxy = new QSortFilterProxyModel;
+ mTopProxy->setSourceModel(mTopModel);
+ mTopView->setModel(mTopProxy);
+ connect(mTopView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &MovieWidget::topSelectionChanged);
+
+ mBottomView = new QTreeView;
+ mBottomView->setAlternatingRowColors(true);
+ mBottomView->setSortingEnabled(true);
+ mBottomView->setUniformRowHeights(true);
+ mBottomView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ mBottomView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ mBottomModel = new QStandardItemModel;
+ mBottomProxy = new QSortFilterProxyModel;
+ mBottomProxy->setSourceModel(mBottomModel);
+ mBottomView->setModel(mBottomProxy);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addLayout(topWL);
+ QSplitter *splitter = new QSplitter(Qt::Vertical);
+ splitter->addWidget(mTopView);
+ splitter->addWidget(mBottomView);
+ splitter->setStretchFactor(0, 3);
+ mainLayout->addWidget(splitter);
+ setLayout(mainLayout);
+}
+
+void MovieWidget::selectBy(const QString &selection){
+ if(selection == "Series"){
+ populateBySeries();
+ }
+}
+
+void MovieWidget::populateBySeries(){
+ qApp->setOverrideCursor(Qt::BusyCursor);
+ mTopView->setSortingEnabled(false);
+ mTopView->setUpdatesEnabled(false);
+ mTopModel->clear();
+ mTopModel->setHorizontalHeaderLabels(QStringList() << tr("Series"));
+ QFont f("courier new");
+ QBrush blackBrush(Qt::black);
+ QBrush greenBrush(Qt::darkGreen);
+ QStandardItem *root = mTopModel->invisibleRootItem();
+ QSqlDatabase db = QSqlDatabase::database("treedb");
+ QSqlQuery seriesQ("SELECT series.tseries_name, seriesparts.iseriesparts_id, seriesparts.iseriespart, seriesparts.bfavorite, seriesparts.tsubtitle, count(files.*) FROM series, seriesparts, files WHERE series.iseries_id = seriesparts.iseries_id and seriesparts.iseriesparts_id = files.iseriespart_id GROUP BY series.tseries_name, seriesparts.iseriesparts_id, seriesparts.iseriespart, seriesparts.bfavorite, seriesparts.tsubtitle ORDER BY series.tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle", db);
+ while(seriesQ.next()){
+ QBrush currentBrush = blackBrush;
+ QList<QStandardItem*> items;
+ QString series(seriesQ.value(0).toString());
+ if(seriesQ.value(2).toInt() > 0){
+ series.append(QString(" %1").arg(QString::number(seriesQ.value(2).toInt())));
+ }
+ if(!seriesQ.value(4).toString().isEmpty()){
+ series.append(QString(" - %1").arg(seriesQ.value(4).toString()));
+ }
+ series.append(QString(tr(" (%1)")).arg(QString::number(seriesQ.value(5).toInt())));
+ if(seriesQ.value(3).toBool()){
+ currentBrush = greenBrush;
+ }
+ for(int i = 0; i < 1; ++i){
+ QStandardItem *item = new QStandardItem;
+ item->setForeground(currentBrush);
+ item->setData(seriesQ.value(1), SeriesPartIdRole);
+ item->setData(seriesQ.value(5), CountRole);
+ item->setFont(f);
+ items << item;
+ }
+ items[0]->setText(series);
+ items[0]->setIcon(QIcon(":/bizarre_amputee.png"));
+ root->appendRow(items);
+ }
+ mTopView->setUpdatesEnabled(true);
+ mTopView->setSortingEnabled(true);
+ qApp->restoreOverrideCursor();
+}
+
+void MovieWidget::topSelectionChanged(){
+ mBottomView->setUpdatesEnabled(false);
+ mBottomView->setSortingEnabled(false);
+ mBottomView->setRootIsDecorated(false);
+ mBottomModel->clear();
+ QSqlDatabase db = QSqlDatabase::database("treedb");
+ QSqlQuery selectFilesQ(db);
+ selectFilesQ.prepare("SELECT tfilename, cmd5sum, bisize, siquality, iduration, sifileno FROM files WHERE iseriespart_id = :arg ORDER BY sifileno");
+ QModelIndex selected = mTopView->selectionModel()->selectedRows().first();
+ if(selected.isValid()){
+ QFont f("courier new");
+ QStandardItem *root = mBottomModel->invisibleRootItem();
+ mBottomModel->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("No.") << tr("Q.") << tr("Size") << tr("Dur.") << tr("MD5"));
+ selectFilesQ.bindValue(":arg", selected.data(SeriesPartIdRole));
+ selectFilesQ.exec();
+ QLocale l;
+ while(selectFilesQ.next()){
+ QList<QStandardItem*> items;
+ for(int i = 0; i < 6; ++i){
+ QStandardItem *item = new QStandardItem;
+ item->setFont(f);
+ items << item;
+ }
+ items[0]->setText(selectFilesQ.value(0).toString());
+ items[0]->setIcon(QIcon(":/hourglass_figure.png"));
+ items[1]->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ items[1]->setText(QString::number(selectFilesQ.value(5).toInt()));
+ items[2]->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ items[2]->setText(QString::number(selectFilesQ.value(3).toInt()));
+ items[3]->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ items[3]->setText(l.toString(selectFilesQ.value(2).toLongLong()));
+ items[4]->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ items[4]->setText(Helper::durationFromSecs(selectFilesQ.value(4).toLongLong()));
+ items[5]->setText(selectFilesQ.value(1).toString());
+ root->appendRow(items);
+ }
+ }
+ mBottomView->setUpdatesEnabled(true);
+ mBottomView->setSortingEnabled(true);
+ mBottomView->resizeColumnToContents(0);
+}