From bab3365313d08f81b8dc1829c47c2f7c59883d86 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Fri, 22 Jan 2021 14:43:38 +0100 Subject: [PATCH] Added interface to reset the shortcuts defaults. Esp. useful in case of language mixup --- src/qtgui/scbase.cpp | 38 ++++++++++++++++++++++++++------------ src/qtgui/scbase.h | 5 +++++ src/qtgui/uiprefs.ui | 34 +++++++++++++++++++++++++++++++--- src/qtgui/uiprefs_w.cpp | 16 +++++++++++++--- src/qtgui/uiprefs_w.h | 3 +++ 5 files changed, 78 insertions(+), 18 deletions(-) diff --git a/src/qtgui/scbase.cpp b/src/qtgui/scbase.cpp index dbd103dd..ee2800c2 100644 --- a/src/qtgui/scbase.cpp +++ b/src/qtgui/scbase.cpp @@ -38,7 +38,9 @@ struct SCDef { class SCBase::Internal { public: + QStringList getAll(const std::map&); std::map scdefs; + std::map scvalues; QString scBaseSettingsKey() { return "/Recoll/prefs/sckeys"; } @@ -68,9 +70,10 @@ SCBase::SCBase() QString desc = u8s2qs(co_des_val[1]); QString val = u8s2qs(co_des_val[2]); QString key = mapkey(ctxt, desc); - auto it = m->scdefs.find(key); - if (it == m->scdefs.end()) { - m->scdefs[key] = SCDef{ctxt, desc,QKeySequence(val), QKeySequence()}; + auto it = m->scvalues.find(key); + if (it == m->scvalues.end()) { + m->scvalues[key] = + SCDef{ctxt, desc, QKeySequence(val), QKeySequence()}; } else { it->second.val = QKeySequence(val); } @@ -88,13 +91,14 @@ QKeySequence SCBase::get(const QString& ctxt, const QString& desc, LOGDEB0("SCBase::get: [" << qs2utf8s(ctxt) << "]/[" << qs2utf8s(desc) << "], [" << qs2utf8s(defks) << "]\n"); QString key = mapkey(ctxt, desc); - auto it = m->scdefs.find(key); - if (it == m->scdefs.end()) { + m->scdefs[key] = SCDef{ctxt, desc, QKeySequence(defks),QKeySequence(defks)}; + auto it = m->scvalues.find(key); + if (it == m->scvalues.end()) { if (defks.isEmpty()) { return QKeySequence(); } QKeySequence qks(defks); - m->scdefs[key] = SCDef{ctxt, desc, qks, qks}; + m->scvalues[key] = SCDef{ctxt, desc, qks, qks}; LOGDEB0("get(" << qs2utf8s(ctxt) << ", " << qs2utf8s(desc) << ", " << qs2utf8s(defks) << ") -> " << qs2utf8s(qks.toString()) << "\n"); @@ -112,19 +116,19 @@ void SCBase::set(const QString& ctxt, const QString& desc, const QString& newks) LOGDEB0("SCBase::set: [" << qs2utf8s(ctxt) << "]/[" << qs2utf8s(desc) << "], [" << qs2utf8s(newks) << "]\n"); QString key = mapkey(ctxt, desc); - auto it = m->scdefs.find(key); - if (it == m->scdefs.end()) { + auto it = m->scvalues.find(key); + if (it == m->scvalues.end()) { QKeySequence qks(newks); - m->scdefs[key] = SCDef{ctxt, desc, qks, QKeySequence()}; + m->scvalues[key] = SCDef{ctxt, desc, qks, QKeySequence()}; return; } it->second.val = newks; } -QStringList SCBase::getAll() +QStringList SCBase::Internal::getAll(const std::map& mp) { QStringList result; - for (const auto& entry : m->scdefs) { + for (const auto& entry : mp) { result.push_back(entry.second.ctxt); result.push_back(entry.second.desc); result.push_back(entry.second.val.toString()); @@ -133,10 +137,20 @@ QStringList SCBase::getAll() return result; } +QStringList SCBase::getAll() +{ + return m->getAll(m->scvalues); +} + +QStringList SCBase::getAllDefaults() +{ + return m->getAll(m->scdefs); +} + void SCBase::store() { QStringList slout; - for (const auto& entry : m->scdefs) { + for (const auto& entry : m->scvalues) { const SCDef& def = entry.second; if (def.val != def.dflt) { std::string e = diff --git a/src/qtgui/scbase.h b/src/qtgui/scbase.h index 788b0486..328f4dd8 100644 --- a/src/qtgui/scbase.h +++ b/src/qtgui/scbase.h @@ -70,6 +70,11 @@ public: * quadruplet: context, description, value, default */ QStringList getAll(); + /** Return a list of all shortcuts, with only default values (no settings). + * Used for resetting the defaults, especially if a lang changed + * has messed up the keys */ + QStringList getAllDefaults(); + /** Store the customised values to the settings storage. Called * from the preferences accept() method. */ void store(); diff --git a/src/qtgui/uiprefs.ui b/src/qtgui/uiprefs.ui index 11588e4c..799a6dd4 100644 --- a/src/qtgui/uiprefs.ui +++ b/src/qtgui/uiprefs.ui @@ -7,7 +7,7 @@ 0 0 542 - 810 + 837 @@ -495,9 +495,37 @@ Shortcuts - + - + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Reset shortcuts defaults + + + + + + diff --git a/src/qtgui/uiprefs_w.cpp b/src/qtgui/uiprefs_w.cpp index 1e4ef7f8..6889db08 100644 --- a/src/qtgui/uiprefs_w.cpp +++ b/src/qtgui/uiprefs_w.cpp @@ -101,6 +101,8 @@ void UIPrefsDialog::init() replAbsCB, SLOT(setEnabled(bool))); connect(ssNoCompleteCB, SIGNAL(toggled(bool)), ssSearchOnCompleteCB, SLOT(setDisabled(bool))); + connect(resetscPB, SIGNAL(clicked()), this, SLOT(resetShortcuts())); + setFromPrefs(); } @@ -276,10 +278,9 @@ void UIPrefsDialog::setFromPrefs() readShortcuts(); } -void UIPrefsDialog::readShortcuts() +void UIPrefsDialog::readShortcutsInternal(const QStringList& sl) { shortcutsTB->setRowCount(0); - SCBase& scbase = SCBase::scBase(); shortcutsTB->setColumnCount(4); shortcutsTB->setHorizontalHeaderItem( 0, new QTableWidgetItem(tr("Context"))); @@ -289,7 +290,6 @@ void UIPrefsDialog::readShortcuts() 2, new QTableWidgetItem(tr("Shortcut"))); shortcutsTB->setHorizontalHeaderItem( 3, new QTableWidgetItem(tr("Default"))); - QStringList sl = scbase.getAll(); int row = 0; for (int i = 0; i < sl.size();) { LOGDEB0("UIPrefsDialog::readShortcuts: inserting row " << @@ -307,6 +307,16 @@ void UIPrefsDialog::readShortcuts() shortcutsTB->horizontalHeader()->setStretchLastSection(true); } +void UIPrefsDialog::readShortcuts() +{ + readShortcutsInternal(SCBase::scBase().getAll()); +} + +void UIPrefsDialog::resetShortcuts() +{ + readShortcutsInternal(SCBase::scBase().getAllDefaults()); +} + void UIPrefsDialog::storeShortcuts() { SCBase& scbase = SCBase::scBase(); diff --git a/src/qtgui/uiprefs_w.h b/src/qtgui/uiprefs_w.h index a0de9e55..977908d3 100644 --- a/src/qtgui/uiprefs_w.h +++ b/src/qtgui/uiprefs_w.h @@ -67,6 +67,7 @@ public slots: virtual void editHeaderText(); virtual void extradDbSelectChanged(); virtual void extraDbEditPtrans(); + virtual void resetShortcuts(); signals: void uiprefsDone(); @@ -78,6 +79,8 @@ private: void setupReslistFontPB(); void readShortcuts(); void storeShortcuts(); + void readShortcutsInternal(const QStringList&); + // Locally stored data (pending ok/cancel) QString paraFormat; QString headerText;