From 01aa85fd1c36e31662a1c29f0e0ddb533f99aa97 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Wed, 25 Nov 2020 10:28:15 +0100 Subject: [PATCH] Fix sort state not correctly activated when set from saved state --- src/qtgui/main.cpp | 1 - src/qtgui/rclmain_w.cpp | 35 +++++++++++------------------------ src/qtgui/rclmain_w.h | 1 - src/qtgui/restable.cpp | 15 ++++++++------- src/qtgui/restable.h | 6 +++--- src/qtgui/ssearch_w.cpp | 1 - src/qtgui/ssearch_w.h | 1 - 7 files changed, 22 insertions(+), 38 deletions(-) diff --git a/src/qtgui/main.cpp b/src/qtgui/main.cpp index d1390535..b043267c 100644 --- a/src/qtgui/main.cpp +++ b/src/qtgui/main.cpp @@ -403,7 +403,6 @@ int main(int argc, char **argv) QTimer::singleShot(0, mainWindow, SLOT(initDbOpen())); mainWindow->sSearch->searchTypCMB->setCurrentIndex(prefs.ssearchTyp); - mainWindow->sSearch->searchTypeChanged(prefs.ssearchTyp); if (op_flags & OPT_q) { SSearch::SSearchType stype; if (op_flags & OPT_o) { diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index f7205e09..af9c10bb 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -70,8 +70,6 @@ #include "readfile.h" #include "moc_rclmain_w.cpp" -using std::pair; - QString g_stringAllStem, g_stringNoStem; static const char *settingskey_toolarea="/Recoll/geometry/toolArea"; static const char *settingskey_resarea="/Recoll/geometry/resArea"; @@ -125,9 +123,6 @@ void RclMain::init() { setWindowTitle(configToTitle()); - DocSequence::set_translations( - qs2utf8s(tr("sorted")), qs2utf8s(tr("filtered"))); - buildMenus(); // A shortcut to get the focus back to the search entry, in table @@ -183,8 +178,6 @@ void RclMain::init() connect(sSearch, SIGNAL(startSearch(std::shared_ptr, bool)), this, SLOT(startSearch(std::shared_ptr, bool))); - connect(sSearch, SIGNAL(searchTypeChanged(int)), - this, SLOT(onSearchTypeChanged(int))); connect(sSearch, SIGNAL(setDescription(QString)), this, SLOT(onSetDescription(QString))); connect(sSearch, SIGNAL(clearSearch()), @@ -268,6 +261,8 @@ void RclMain::init() restable, SLOT(readDocSource())); connect(this, SIGNAL(sortDataChanged(DocSeqSortSpec)), restable, SLOT(onSortDataChanged(DocSeqSortSpec))); + connect(this, SIGNAL(sortDataChanged(DocSeqSortSpec)), + this, SLOT(onSortDataChanged(DocSeqSortSpec))); connect(this, SIGNAL(uiPrefsChanged()), restable, SLOT(onUiPrefsChanged())); connect(restable->getModel(), SIGNAL(sortDataChanged(DocSeqSortSpec)), @@ -330,7 +325,6 @@ void RclMain::init() if (prefs.keepSort && prefs.sortActive) { m_sortspec.field = (const char *)prefs.sortField.toUtf8(); m_sortspec.desc = prefs.sortDesc; - onSortDataChanged(m_sortspec); emit sortDataChanged(m_sortspec); } QSettings settings; @@ -775,21 +769,6 @@ void RclMain::fileExit() qApp->exit(0); } -// Reset sort order when search type changes. -void RclMain::onSearchTypeChanged(int stp) -{ - SSearch::SSearchType tp = (SSearch::SSearchType)stp; - switch (tp) { - case SSearch::SST_FNM: - m_sortspec.desc = false; - m_sortspec.field = "mtype"; - break; - default: - m_sortspec.reset(); - break; - }; -} - // Start a db query and set the reslist docsource void RclMain::startSearch(std::shared_ptr sdata, bool issimple) { @@ -831,7 +810,7 @@ void RclMain::startSearch(std::shared_ptr sdata, bool issimple) curPreview = 0; DocSequenceDb *src = new DocSequenceDb(rcldb, std::shared_ptr(query), - string(tr("Query results").toUtf8()), sdata); + qs2utf8s(tr("Query results")), sdata); src->setAbstractParams(prefs.queryBuildAbstract, prefs.queryReplaceAbstract); m_source = std::shared_ptr(src); @@ -981,6 +960,14 @@ void RclMain::onSortDataChanged(DocSeqSortSpec spec) prefs.sortDesc = spec.desc; prefs.sortActive = !spec.field.empty(); + std::string fld; + if (!m_sortspec.field.empty()) { + fld = qs2utf8s(RecollModel::displayableField(m_sortspec.field)); + } + DocSequence::set_translations( + qs2utf8s(tr("sorted")) + ": " + fld + + (m_sortspec.desc?" ↓":" ↑"), + qs2utf8s(tr("filtered"))); initiateQuery(); } diff --git a/src/qtgui/rclmain_w.h b/src/qtgui/rclmain_w.h index 775a4709..7f79ffa9 100644 --- a/src/qtgui/rclmain_w.h +++ b/src/qtgui/rclmain_w.h @@ -146,7 +146,6 @@ public slots: virtual void previewPrevInTab(Preview *, int sid, int docnum); virtual void previewExposed(Preview *, int sid, int docnum); virtual void resetSearch(); - virtual void onSearchTypeChanged(int); virtual void eraseDocHistory(); virtual void eraseSearchHistory(); virtual void exportSimpleSearchHistory(); diff --git a/src/qtgui/restable.cpp b/src/qtgui/restable.cpp index 6fee0970..6748d933 100644 --- a/src/qtgui/restable.cpp +++ b/src/qtgui/restable.cpp @@ -255,7 +255,7 @@ RecollModel::RecollModel(const QStringList fields, ResTable *tb, o_displayableFields["relevancyrating"] = tr("Relevancy rating"); o_displayableFields["title"] = tr("Title"); o_displayableFields["url"] = tr("URL"); - o_displayableFields["mtime"] = tr("Mtime"); + o_displayableFields["mtime"] = tr("Date"); o_displayableFields["date"] = tr("Date"); o_displayableFields["datetime"] = tr("Date and time"); @@ -346,6 +346,12 @@ void RecollModel::addColumn(int col, const string& field) } } +QString RecollModel::displayableField(const std::string& in) +{ + const auto it = o_displayableFields.find(in); + return (it == o_displayableFields.end()) ? u8s2qs(in) : it->second; +} + QVariant RecollModel::headerData(int idx, Qt::Orientation orientation, int role) const { @@ -357,12 +363,7 @@ QVariant RecollModel::headerData(int idx, Qt::Orientation orientation, } if (orientation == Qt::Horizontal && role == Qt::DisplayRole && idx < int(m_fields.size())) { - map::const_iterator it = - o_displayableFields.find(m_fields[idx]); - if (it == o_displayableFields.end()) - return QString::fromUtf8(m_fields[idx].c_str()); - else - return it->second; + return displayableField(m_fields[idx]); } return QVariant(); } diff --git a/src/qtgui/restable.h b/src/qtgui/restable.h index c5accd6b..9ac5cc1a 100644 --- a/src/qtgui/restable.h +++ b/src/qtgui/restable.h @@ -56,10 +56,10 @@ public: virtual std::shared_ptr getDocSource() {return m_source;} virtual void deleteColumn(int); virtual const std::vector& getFields() {return m_fields;} - virtual const std::map& getAllFields() - { - return o_displayableFields; + static const std::map& getAllFields() { + return o_displayableFields; } + static QString displayableField(const std::string& in); virtual void addColumn(int, const std::string&); // Some column name are aliases/translator for base document field // (ie: date, datetime->mtime). Help deal with this: diff --git a/src/qtgui/ssearch_w.cpp b/src/qtgui/ssearch_w.cpp index 836baf1e..a8a3166b 100644 --- a/src/qtgui/ssearch_w.cpp +++ b/src/qtgui/ssearch_w.cpp @@ -441,7 +441,6 @@ void SSearch::onSearchTypeChanged(int typ) default: queryText->setToolTip(tr("Enter search terms here.")); } - emit searchTypeChanged((int)typ); } void SSearch::startSimpleSearch() diff --git a/src/qtgui/ssearch_w.h b/src/qtgui/ssearch_w.h index d3a36f25..861701ab 100644 --- a/src/qtgui/ssearch_w.h +++ b/src/qtgui/ssearch_w.h @@ -106,7 +106,6 @@ private slots: virtual void onCompleterShown(); signals: - void searchTypeChanged(int); void startSearch(std::shared_ptr, bool); void setDescription(QString); void clearSearch();