diff --git a/src/skin/legacy/legacyskinparser.cpp b/src/skin/legacy/legacyskinparser.cpp index e0a0cfa73f7f..8668ff3705c7 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 815f34373d8b..15304a06e7ff 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(this)) { setAcceptDrops(false); setEditable(true); @@ -146,9 +149,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; @@ -231,6 +240,29 @@ 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) { + const QList queries = + m_pConfig->getKeysWithGroup(kSavedQueriesConfigGroup); + for (const auto& query : queries) { + const QString queryString = m_pConfig->getValueString(query); + if (!queryString.isEmpty()) { + addItem(queryString); + } + } + } +} + +void WSearchLineEdit::saveQueriesInConfig() { + if (m_pConfig) { + for (int index = 0; index < count(); index++) { + m_pConfig->setValue( + ConfigKey(kSavedQueriesConfigGroup, QString::number(index)), + this->itemText(index)); + } + } +} + void WSearchLineEdit::updateStyleMetrics() { QStyleOptionComboBox styleArrow; styleArrow.initFrom(this); diff --git a/src/widget/wsearchlineedit.h b/src/widget/wsearchlineedit.h index c640653acc84..17d029961017 100644 --- a/src/widget/wsearchlineedit.h +++ b/src/widget/wsearchlineedit.h @@ -6,6 +6,7 @@ #include #include +#include "preferences/usersettings.h" #include "util/parented_ptr.h" #include "widget/wbasewidget.h" @@ -25,8 +26,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); @@ -89,6 +90,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 const m_clearButton; int m_frameWidth;