8#include "quicksearchline.h"
9#include "messagelistsettings.h"
10#include <KStringHandler>
12#include "core/filter.h"
13#include "searchlinestatus.h"
14#include "searchstatusbuttons.h"
15#include <KLocalizedString>
17#include "core/widgets/searchlinecommandwidget.h"
22#include <QStandardPaths>
24QuickSearchLine::QuickSearchLine(
QWidget *parent)
26 , mSearchEdit(new SearchLineStatus(this))
27 , mSearchStatusButtons(new SearchStatusButtons(this))
28 , mSearchMessageByButtons(new SearchMessageByButtons(this))
29 , mSearchLineCommandWidget(new SearchLineCommandWidget(this))
33 vbox->setContentsMargins({});
38 hbox->setContentsMargins({});
42 vbox->addWidget(mSearchMessageByButtons);
43 mSearchMessageByButtons->setVisible(
false);
44 vbox->addWidget(mSearchLineCommandWidget);
45 mSearchLineCommandWidget->setVisible(
false);
46 connect(mSearchEdit, &SearchLineStatus::searchCommandActionRequested,
this, [
this]() {
47 mSearchLineCommandWidget->setVisible(!mSearchLineCommandWidget->isVisible());
49 connect(mSearchLineCommandWidget, &SearchLineCommandWidget::insertCommand, mSearchEdit, &SearchLineStatus::slotInsertCommand);
52 MessageList::Core::SearchLineCommand c;
53 c.parseSearchLineCommand(str);
54 mSearchLineCommandWidget->setLabel(c.generateCommadLineStr());
57 connect(mSearchEdit, &SearchLineStatus::forceLostFocus,
this, &QuickSearchLine::forceLostFocus);
58 mSearchEdit->setPlaceholderText(
i18nc(
"Search for messages.",
"Search"));
60 mSearchEdit->setClearButtonEnabled(
true);
61 connect(mSearchMessageByButtons, &SearchMessageByButtons::searchOptionChanged,
this, [
this]() {
62 mSearchEdit->filterAdded();
63 Q_EMIT searchOptionChanged();
67 connect(mSearchEdit, &SearchLineStatus::clearButtonClicked,
this, &QuickSearchLine::slotClearButtonClicked);
68 connect(mSearchEdit, &SearchLineStatus::saveFilter,
this, &QuickSearchLine::saveFilter);
69 connect(mSearchEdit, &SearchLineStatus::activateFilter,
this, &QuickSearchLine::activateFilter);
71 hbox->addWidget(mSearchEdit);
73 hbox->addWidget(mSearchStatusButtons);
74 connect(mSearchStatusButtons, &SearchStatusButtons::filterStatusChanged,
this, &QuickSearchLine::slotFilterActionChanged);
78 mTagFilterCombo->setMaximumWidth(200);
79 mTagFilterCombo->hide();
80 hbox->addWidget(mTagFilterCombo);
83 mSearchEdit->setEnabled(
false);
84 mTagFilterCombo->setEnabled(
false);
86 installEventFilter(
this);
87 mTagFilterCombo->installEventFilter(
this);
88 changeQuicksearchVisibility(MessageListSettings::self()->showQuickSearch());
91QuickSearchLine::~QuickSearchLine() =
default;
93void QuickSearchLine::slotSearchEditTextEdited(
const QString &text)
95 int minimumStringLength = 3;
96 if (text.startsWith(QLatin1Char(
'"')) && text.endsWith(QLatin1Char(
'"'))) {
97 minimumStringLength = 5;
99 if (!text.trimmed().
isEmpty()) {
101 mSearchMessageByButtons->setVisible(
true);
102 Q_EMIT searchEditTextEdited(text);
105 slotClearButtonClicked();
109void QuickSearchLine::slotClearButtonClicked()
111 if (mTagFilterCombo->isVisible()) {
112 mTagFilterCombo->setCurrentIndex(0);
114 mSearchEdit->clearFilterButtonClicked();
115 mSearchStatusButtons->clearFilter();
116 mSearchMessageByButtons->clearFilter();
117 mSearchMessageByButtons->setVisible(
false);
118 Q_EMIT clearButtonClicked();
121void QuickSearchLine::setSearchOptions(SearchMessageByButtons::SearchOptions opts)
123 mSearchMessageByButtons->setSearchOptions(opts);
124 mSearchMessageByButtons->setVisible(
true);
125 mSearchEdit->filterAdded();
128SearchMessageByButtons::SearchOptions QuickSearchLine::searchOptions()
const
130 return mSearchMessageByButtons->searchOptions();
133void QuickSearchLine::focusQuickSearch(
const QString &selectedText)
136 mSearchEdit->setText(selectedText);
138 mSearchEdit->setFocus();
141QComboBox *QuickSearchLine::tagFilterComboBox()
const
143 return mTagFilterCombo;
146SearchLineStatus *QuickSearchLine::searchEdit()
const
151void QuickSearchLine::resetFilter()
153 if (mTagFilterCombo->isVisible()) {
154 mTagFilterCombo->setCurrentIndex(0);
156 mSearchEdit->clearFilterButtonClicked();
157 mSearchEdit->setLocked(
false);
158 mSearchStatusButtons->clearFilter();
161void QuickSearchLine::slotFilterActionChanged(
const QList<Akonadi::MessageStatus> &lst)
164 mSearchEdit->filterAdded();
165 Q_EMIT statusButtonsClicked();
168void QuickSearchLine::setFilterMessageStatus(
const QList<Akonadi::MessageStatus> &newLstStatus)
170 mLstStatus = newLstStatus;
171 mSearchEdit->filterAdded();
172 mSearchStatusButtons->setFilterMessageStatus(mLstStatus);
175QList<Akonadi::MessageStatus> QuickSearchLine::status()
const
180bool QuickSearchLine::containsOutboundMessages()
const
182 return mSearchMessageByButtons->containsOutboundMessages();
185void QuickSearchLine::setContainsOutboundMessages(
bool containsOutboundMessages)
187 mSearchMessageByButtons->setContainsOutboundMessages(containsOutboundMessages);
190void QuickSearchLine::updateComboboxVisibility()
192 mTagFilterCombo->setVisible(!mSearchEdit->isHidden() && (mTagFilterCombo->count() > 0));
195bool QuickSearchLine::eventFilter(QObject *
object, QEvent *e)
198 if (shortCutOverride) {
205void QuickSearchLine::changeQuicksearchVisibility(
bool show)
207 mSearchEdit->setVisible(
show);
208 mTagFilterCombo->setVisible(
show && mTagFilterCombo->count());
209 mSearchStatusButtons->setVisible(
show);
212void QuickSearchLine::addCompletionItem(
const QString &str)
214 mSearchEdit->addCompletionItem(str);
217#include "moc_quicksearchline.cpp"
constexpr bool isEmpty() const
QString i18nc(const char *context, const char *text, const TYPE &arg...)
KCOREADDONS_EXPORT int logicalLength(const QString &text)
The implementation independent part of the MessageList library.
void textChanged(const QString &text)
virtual bool eventFilter(QObject *watched, QEvent *event)
bool isEmpty() const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)