diff options
author | ronso0 <ronso0@mixxx.org> | 2021-10-19 00:49:59 +0200 |
---|---|---|
committer | ronso0 <ronso0@mixxx.org> | 2021-10-21 01:25:37 +0200 |
commit | d3f24fa301ac6fea990e02c165f0a08f2af5c3ad (patch) | |
tree | 9d69403f3381d419a9117843028981548f11688c | |
parent | 40f33d621b60938bd7b8e8c3a3dea950947bcaba (diff) |
Search: save queries across restarts and when switching skins
-rw-r--r-- | src/skin/legacy/legacyskinparser.cpp | 2 | ||||
-rw-r--r-- | src/widget/wsearchlineedit.cpp | 49 | ||||
-rw-r--r-- | src/widget/wsearchlineedit.h | 9 |
3 files changed, 56 insertions, 4 deletions
diff --git a/src/skin/legacy/legacyskinparser.cpp b/src/skin/legacy/legacyskinparser.cpp index e0a0cfa73f..8668ff3705 100644 --- a/src/skin/legacy/legacyskinparser.cpp +++ b/src/skin/legacy/legacyskinparser.cpp @@ -1299,7 +1299,7 @@ QWidget* LegacySkinParser::parseSearchBox(const QDomElement& node) { WSearchLineEdit::kDefaultDebouncingTimeoutMillis); WSearchLineEdit::setDebouncingTimeoutMillis(searchDebouncingTimeoutMillis); - WSearchLineEdit* pLineEditSearch = new WSearchLineEdit(m_pParent); + WSearchLineEdit* pLineEditSearch = new WSearchLineEdit(m_pParent, m_pConfig); commonWidgetSetup(node, pLineEditSearch, false); pLineEditSearch->setup(node, *m_pContext); diff --git a/src/widget/wsearchlineedit.cpp b/src/widget/wsearchlineedit.cpp index 8d8448e55f..0d81e680af 100644 --- a/src/widget/wsearchlineedit.cpp +++ b/src/widget/wsearchlineedit.cpp @@ -24,6 +24,8 @@ const QColor kDefaultBackgroundColor = QColor(0, 0, 0); const QString kDisabledText = QStringLiteral("- - -"); +const QString kSavedQueriesConfigGroup = QStringLiteral("[SearchQueries]"); + constexpr int kClearButtonClearence = 1; inline QString clearButtonStyleSheet(int pxPadding, Qt::LayoutDirection direction) { @@ -74,9 +76,10 @@ void WSearchLineEdit::setDebouncingTimeoutMillis(int debouncingTimeoutMillis) { s_debouncingTimeoutMillis = verifyDebouncingTimeoutMillis(debouncingTimeoutMillis); } -WSearchLineEdit::WSearchLineEdit(QWidget* pParent) +WSearchLineEdit::WSearchLineEdit(QWidget* pParent, UserSettingsPointer pConfig) : QComboBox(pParent), WBaseWidget(this), + m_pConfig(pConfig), m_clearButton(make_parented<QToolButton>(this)) { qRegisterMetaType<FocusWidget>("FocusWidget"); setAcceptDrops(false); @@ -147,9 +150,15 @@ WSearchLineEdit::WSearchLineEdit(QWidget* pParent) clearButtonSize.width() + m_frameWidth + kClearButtonClearence, layoutDirection())); + loadQueriesFromConfig(); + refreshState(); } +WSearchLineEdit::~WSearchLineEdit() { + saveQueriesInConfig(); +} + void WSearchLineEdit::setup(const QDomNode& node, const SkinContext& context) { auto backgroundColor = kDefaultBackgroundColor; QString bgColorName; @@ -232,6 +241,44 @@ void WSearchLineEdit::setup(const QDomNode& node, const SkinContext& context) { tr("Esc") + " " + tr("Exit search", "Exit search bar and leave focus")); } +void WSearchLineEdit::loadQueriesFromConfig() { + if (!m_pConfig) { + return; + } + const QList<ConfigKey> queryKeys = + m_pConfig->getKeysWithGroup(kSavedQueriesConfigGroup); + QSet<QString> queryStrings; + for (const auto& queryKey : queryKeys) { + const auto& queryString = m_pConfig->getValueString(queryKey); + if (queryString.isEmpty() || queryStrings.contains(queryString)) { + // Don't add duplicate and remove it from the config immediately + m_pConfig->remove(queryKey); + } else { + // Restore query + addItem(queryString); + queryStrings.insert(queryString); + } + } +} + +void WSearchLineEdit::saveQueriesInConfig() { + if (!m_pConfig) { + return; + } + // Delete saved queries in case the list was cleared + const QList<ConfigKey> queryKeys = + m_pConfig->getKeysWithGroup(kSavedQueriesConfigGroup); + for (const auto& queryKey : queryKeys) { + m_pConfig->remove(queryKey); + } + // Store queries + for (int index = 0; index < count(); index++) { + m_pConfig->setValue( + ConfigKey(kSavedQueriesConfigGroup, QString::number(index)), + itemText(index)); + } +} + void WSearchLineEdit::updateStyleMetrics() { QStyleOptionComboBox styleArrow; styleArrow.initFrom(this); diff --git a/src/widget/wsearchlineedit.h b/src/widget/wsearchlineedit.h index 9c22cb35eb..800d4a2c43 100644 --- a/src/widget/wsearchlineedit.h +++ b/src/widget/wsearchlineedit.h @@ -7,6 +7,7 @@ #include <QToolButton> #include "library/library_decl.h" +#include "preferences/usersettings.h" #include "util/parented_ptr.h" #include "widget/wbasewidget.h" @@ -26,8 +27,8 @@ class WSearchLineEdit : public QComboBox, public WBaseWidget { static void setDebouncingTimeoutMillis(int debouncingTimeoutMillis); virtual void showPopup() override; - explicit WSearchLineEdit(QWidget* pParent); - ~WSearchLineEdit() override = default; + explicit WSearchLineEdit(QWidget* pParent, UserSettingsPointer pConfig = nullptr); + ~WSearchLineEdit(); void setup(const QDomNode& node, const SkinContext& context); @@ -91,6 +92,10 @@ class WSearchLineEdit : public QComboBox, public WBaseWidget { // Update the displayed text without (re-)starting the timer void setTextBlockSignals(const QString& text); + UserSettingsPointer m_pConfig; + void loadQueriesFromConfig(); + void saveQueriesInConfig(); + parented_ptr<QToolButton> const m_clearButton; int m_frameWidth; |