diff options
Diffstat (limited to 'searchdialog.cpp')
-rw-r--r-- | searchdialog.cpp | 156 |
1 files changed, 69 insertions, 87 deletions
diff --git a/searchdialog.cpp b/searchdialog.cpp index 1652d61..642f02f 100644 --- a/searchdialog.cpp +++ b/searchdialog.cpp @@ -15,70 +15,56 @@ #include <QSortFilterProxyModel> #include <QSqlDatabase> #include <QSqlQuery> +#include <QToolBar> +#include <QApplication> +#include <QHeaderView> +#include <QSettings> #include "smtreeview.h" #include "smtreeitem.h" #include "smtreemodel.h" #include "searchdialog.h" +#include "helper.h" SearchDialog::SearchDialog(QWidget *parent, Qt::WindowFlags flags) : QDialog(parent, flags){ // Define GUI items - setWindowTitle(tr("Search for")); - mExFilenames = new QCheckBox(tr("Filenames")); - mExFilenames->setChecked(true); - mExMeta = new QCheckBox(tr("Metadata")); - mExMeta->setChecked(true); + setWindowTitle(tr("Search...")); + QLabel *l1 = new QLabel(tr("Search")); mSearch = new QLineEdit; - mResult = new SmTreeView; - mDoSearch = new QPushButton(tr("Search")); - mClose = new QPushButton(tr("Close")); + connect(mSearch, &QLineEdit::returnPressed, this, &SearchDialog::search); + QToolBar *searchTB = new QToolBar; + QAction *doSearchA = new QAction(Helper::icon(Qt::transparent, qApp->palette().color(QPalette::Text), QChar(0x2245), true, false), tr("Search"), this); + connect(doSearchA, &QAction::triggered, this, &SearchDialog::search); + searchTB->addAction(doSearchA); + QAction *clearSearchA= new QAction(Helper::icon(Qt::transparent, qApp->palette().color(QPalette::Text), QChar(0x2694), true, false), tr("Clear"), this); + connect(clearSearchA, &QAction::triggered, [=] { mSearch->clear(); }); + searchTB->addAction(clearSearchA); + QHBoxLayout *topLayout = new QHBoxLayout; + topLayout->addWidget(l1); + topLayout->addWidget(mSearch); + topLayout->addWidget(searchTB); // init Model and View - const QStringList headers = QStringList() << tr("Match") << tr("Series") << tr("SeriesPartId"); + const QStringList headers = QStringList() << tr("Found") << tr("Series") << tr("SeriesPartId"); mModel = new SmTreeModel(headers, this); mProxy = new QSortFilterProxyModel(this); mProxy->setSourceModel(mModel); + mResult = new QTreeView; mResult->setModel(mProxy); mResult->setColumnHidden(2, true); mResult->setSortingEnabled(true); mResult->setEditTriggers(QAbstractItemView::NoEditTriggers); - connect(mResult, &SmTreeView::doubleClicked, this, &SearchDialog::searchDoubleclicked); + QHBoxLayout *bottomLayout = new QHBoxLayout; + bottomLayout->addWidget(mResult); // Layout QVBoxLayout *mainLayout = new QVBoxLayout; - QGroupBox *searchGb = new QGroupBox(tr("Search for:")); - QVBoxLayout *searchGbL = new QVBoxLayout; - searchGbL->addWidget(mSearch); - searchGb->setLayout(searchGbL); - mainLayout->addWidget(searchGb); - QGroupBox *excludeGb = new QGroupBox(tr("Include:")); - QHBoxLayout *excludeGbL = new QHBoxLayout; - excludeGbL->addWidget(mExFilenames); - excludeGbL->addStretch(); - excludeGbL->addWidget(mExMeta); - excludeGb->setLayout(excludeGbL); - mainLayout->addWidget(excludeGb); - QGroupBox *resultGb = new QGroupBox(tr("Search result:")); - QHBoxLayout *resultGbL = new QHBoxLayout; - resultGbL->addWidget(mResult); - resultGb->setLayout(resultGbL); - mainLayout->addWidget(resultGb); - QHBoxLayout *buttonLayout = new QHBoxLayout; - mDoSearch = new QPushButton(tr("Search")); - mClose = new QPushButton(tr("Close")); - buttonLayout->addStretch(); - buttonLayout->addWidget(mDoSearch); - buttonLayout->addWidget(mClose); - mainLayout->addLayout(buttonLayout); + mainLayout->addLayout(topLayout); + mainLayout->addLayout(bottomLayout); setLayout(mainLayout); - setMinimumWidth(800); - - // connect the dots... - connect(mClose, &QPushButton::clicked, this, &SearchDialog::hide); - connect(mDoSearch, &QPushButton::clicked, this, &SearchDialog::search); - connect(mExFilenames, &QPushButton::clicked, this, &SearchDialog::disableSearch); - connect(mExMeta, &QPushButton::clicked, this, &SearchDialog::disableSearch); - + setMinimumSize(QSize(1024, 600)); + connect(this, &SearchDialog::rejected, this, &SearchDialog::writeSettings); + readSettings(); } void SearchDialog::show(){ @@ -93,51 +79,54 @@ void SearchDialog::search(){ } QSqlDatabase db = QSqlDatabase::database("treedb"); SmTreeItem *root = new SmTreeItem(3, nullptr); - if(mExMeta->isChecked()){ - QSqlQuery metadataQ(db); - metadataQ.prepare("SELECT iseriespart_id, tsubject, series.tseries_name, seriesparts.tsubtitle FROM metadata, seriesparts, series WHERE tsubject ~* :re AND metadata.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id"); - metadataQ.bindValue(":re", mSearch->text()); - SmTreeItem *metadataItem = new SmTreeItem(QVariantList() << tr("Metadata") << QVariant() << QVariant(), root); - root->appendChild(metadataItem); - int ctr = 0; - metadataQ.exec(); - while(metadataQ.next()){ - ++ctr; - appendChild(metadataQ.value(0), metadataQ.value(1), metadataQ.value(2), metadataQ.value(3), metadataItem); - } - if(ctr == 0){ - appendEmpty(metadataItem); - } + + //search metadata + QSqlQuery metadataQ(db); + metadataQ.prepare("SELECT iseriespart_id, tsubject, series.tseries_name, seriesparts.tsubtitle FROM metadata, seriesparts, series WHERE tsubject ~* :re AND metadata.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id"); + metadataQ.bindValue(":re", mSearch->text()); + SmTreeItem *metadataItem = new SmTreeItem(QVariantList() << tr("Metadata") << QVariant() << QVariant(), root); + root->appendChild(metadataItem); + int ctr = 0; + metadataQ.exec(); + while(metadataQ.next()){ + ++ctr; + appendChild(metadataQ.value(0), metadataQ.value(1), metadataQ.value(2), metadataQ.value(3), metadataItem); + } + if(ctr == 0){ + appendEmpty(metadataItem); } - if(mExFilenames->isChecked()){ - QSqlQuery filenameQ(db); - filenameQ.prepare("SELECT tfilename, iseriespart_id, series.tseries_name, seriesparts.tsubtitle FROM files, seriesparts, series WHERE tfilename ~* :re AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id"); - filenameQ.bindValue(":re", mSearch->text()); - SmTreeItem *filenameItem = new SmTreeItem(QVariantList() << tr("Filenames") << QVariant() << QVariant(), root); - root->appendChild(filenameItem); - int ctr = 0; - filenameQ.exec(); - while(filenameQ.next()){ - ++ctr; - appendChild(filenameQ.value(1), filenameQ.value(0), filenameQ.value(2), filenameQ.value(3), filenameItem); - } - if(ctr == 0){ - appendEmpty(filenameItem); - } + //search filenames + QSqlQuery filenameQ(db); + filenameQ.prepare("SELECT tfilename, iseriespart_id, series.tseries_name, seriesparts.tsubtitle FROM files, seriesparts, series WHERE tfilename ~* :re AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id"); + filenameQ.bindValue(":re", mSearch->text()); + SmTreeItem *filenameItem = new SmTreeItem(QVariantList() << tr("Filenames") << QVariant() << QVariant(), root); + root->appendChild(filenameItem); + ctr = 0; + filenameQ.exec(); + while(filenameQ.next()){ + ++ctr; + appendChild(filenameQ.value(1), filenameQ.value(0), filenameQ.value(2), filenameQ.value(3), filenameItem); + } + if(ctr == 0){ + appendEmpty(filenameItem); } mModel->setRoot(root); mResult->expandAll(); } -void SearchDialog::disableSearch(){ - bool exFnChecked = mExFilenames->isChecked(); - bool exMetaChecked = mExMeta->isChecked(); - if(!exFnChecked && !exMetaChecked){ - mDoSearch->setEnabled(false); - }else{ - mDoSearch->setEnabled(true); - } +void SearchDialog::writeSettings(){ + QHeaderView *h = mResult->header(); + QSettings s; + s.setValue("searchdlgheaders", h->saveState()); + s.setValue("searchdlgpos", pos()); +} + +void SearchDialog::readSettings(){ + QSettings s; + QByteArray headerState = s.value("searchdlgheaders").toByteArray(); + mResult->header()->restoreState(headerState); + move(s.value("searchdlgpos").toPoint()); } void SearchDialog::appendChild(QVariant id, QVariant subject, QVariant name, QVariant sub, SmTreeItem *parent){ @@ -156,10 +145,3 @@ void SearchDialog::appendEmpty(SmTreeItem *parent){ SmTreeItem *emptyItem = new SmTreeItem(QVariantList() << tr("no match!") << QVariant() << QVariant(), parent); parent->appendChild(emptyItem); } - -void SearchDialog::searchDoubleclicked(){ - QPersistentModelIndex pIdx = mResult->currentIndex(); - QModelIndex idx = mProxy->mapToSource(pIdx); - SmTreeItem *curItem = static_cast<SmTreeItem*>(idx.internalPointer()); - emit searchResultClicked(curItem->data(2).toInt()); -} |