From 03149a57b4ecb9630298fc0e5e2c5739875a0726 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Sat, 26 Feb 2022 19:21:37 +0100 Subject: [PATCH] GUI: added date filter tool in side bar --- src/qtgui/rclm_sidefilters.cpp | 19 ++++++++++++--- src/qtgui/rclm_wins.cpp | 2 +- src/qtgui/rclmain.ui | 43 +++++++++++++++++++++++++++++++++- src/qtgui/rclmain_w.cpp | 12 +++++++--- src/qtgui/rclmain_w.h | 2 +- 5 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/qtgui/rclm_sidefilters.cpp b/src/qtgui/rclm_sidefilters.cpp index 74c10d06..c2c5a830 100644 --- a/src/qtgui/rclm_sidefilters.cpp +++ b/src/qtgui/rclm_sidefilters.cpp @@ -24,14 +24,27 @@ #include "idxmodel.h" #include "guiutils.h" -void RclMain::populateFilters() +void RclMain::populateSideFilters(bool init) { m_idxtreemodel = new IdxTreeModel(theconfig, prefs.idxFilterTreeDepth, idxTreeView); m_idxtreemodel->populate(); m_idxtreemodel->setHeaderData(0, Qt::Horizontal, QVariant(tr("Filter directories"))); idxTreeView->setModel(m_idxtreemodel); - idxTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); - idxTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + if (init) { + idxTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); + idxTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + connect(idxTreeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(setFiltSpec())); + + minDateFilterDTEDT->setCalendarPopup(true); + maxDateFilterDTEDT->setCalendarPopup(true); + minDateFilterDTEDT->setDate(QDate::currentDate()); + maxDateFilterDTEDT->setDate(QDate::currentDate()); + connect(minDateFilterDTEDT, SIGNAL(dateChanged(const QDate &)), this, SLOT(setFiltSpec())); + connect(maxDateFilterDTEDT, SIGNAL(dateChanged(const QDate &)), this, SLOT(setFiltSpec())); + connect(dateFilterCB, SIGNAL(toggled(bool)), this, SLOT(setFiltSpec())); + connect(dateFilterCB, SIGNAL(toggled(bool)), minDateFilterDTEDT, SLOT(setEnabled(bool))); + connect(dateFilterCB, SIGNAL(toggled(bool)), maxDateFilterDTEDT, SLOT(setEnabled(bool))); + } } void RclMain::clearDirFilter() diff --git a/src/qtgui/rclm_wins.cpp b/src/qtgui/rclm_wins.cpp index de1d370c..fe3f91f1 100644 --- a/src/qtgui/rclm_wins.cpp +++ b/src/qtgui/rclm_wins.cpp @@ -190,7 +190,7 @@ void RclMain::showIndexConfig(bool modal) if (created) { connect(new QShortcut(quitKeySeq, indexConfig->getDialog()), SIGNAL (activated()), this, SLOT (fileExit())); - connect(indexConfig, SIGNAL(idxConfigPossiblyChanged()), this, SLOT(populateFilters())); + connect(indexConfig, SIGNAL(idxConfigPossiblyChanged()), this, SLOT(populateSideFilters())); } } diff --git a/src/qtgui/rclmain.ui b/src/qtgui/rclmain.ui index 334dfd3f..326ffdc8 100644 --- a/src/qtgui/rclmain.ui +++ b/src/qtgui/rclmain.ui @@ -38,7 +38,48 @@ Qt::Horizontal - + + + + + + Qt::Horizontal + + + + + + + Filter dates + + + false + + + + + + + + + false + + + + + + + false + + + + + + + + + + diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index c5f06344..56eb2afc 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -289,8 +289,7 @@ void RclMain::init() sideFiltersSPLT->setSizes(sizes); } - populateFilters(); - connect(idxTreeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(setFiltSpec())); + populateSideFilters(true); enableTrayIcon(prefs.showTrayIcon); @@ -1151,7 +1150,7 @@ void RclMain::setUIPrefs() return; LOGDEB("Recollmain::setUIPrefs\n"); if (nullptr != m_idxtreemodel && m_idxtreemodel->getDepth() != prefs.idxFilterTreeDepth) { - populateFilters(); + populateSideFilters(); } emit uiPrefsChanged(); enbSynAction->setDisabled(prefs.synFile.isEmpty()); @@ -1256,6 +1255,13 @@ void RclMain::setFiltSpec() m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, clause); } + if (dateFilterCB->isChecked()) { + QString mindate = minDateFilterDTEDT->date().toString("yyyy-MM-dd"); + QString maxdate = maxDateFilterDTEDT->date().toString("yyyy-MM-dd"); + std::string clause = std::string("date:") + qs2utf8s(mindate) + "/" + qs2utf8s(maxdate); + LOGDEB1("RclMain::setFiltSpec: date clause " << clause << "\n"); + m_filtspec.orCrit(DocSeqFiltSpec::DSFS_QLANG, clause); + } if (m_source) m_source->setFiltSpec(m_filtspec); initiateQuery(); diff --git a/src/qtgui/rclmain_w.h b/src/qtgui/rclmain_w.h index 8f76d773..1818ebd8 100644 --- a/src/qtgui/rclmain_w.h +++ b/src/qtgui/rclmain_w.h @@ -144,7 +144,7 @@ public slots: virtual void startNativeViewer(Rcl::Doc, int pagenum = -1, QString term = QString()); virtual void openWith(Rcl::Doc, string); virtual void saveDocToFile(Rcl::Doc); - virtual void populateFilters(); + virtual void populateSideFilters(bool init = false); virtual void previewNextInTab(Preview *, int sid, int docnum); virtual void previewPrevInTab(Preview *, int sid, int docnum); virtual void previewExposed(Preview *, int sid, int docnum);