summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorronso0 <ronso0@mixxx.org>2021-10-19 00:49:59 +0200
committerronso0 <ronso0@mixxx.org>2021-10-21 01:25:37 +0200
commitd3f24fa301ac6fea990e02c165f0a08f2af5c3ad (patch)
tree9d69403f3381d419a9117843028981548f11688c
parent40f33d621b60938bd7b8e8c3a3dea950947bcaba (diff)
Search: save queries across restarts and when switching skins
-rw-r--r--src/skin/legacy/legacyskinparser.cpp2
-rw-r--r--src/widget/wsearchlineedit.cpp49
-rw-r--r--src/widget/wsearchlineedit.h9
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;