diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index 8d68bd4b2..50242ea52 100644 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -194,6 +194,10 @@ void FeedMessageViewer::switchFeedComponentVisibility() { void FeedMessageViewer::createConnections() { FormMain *form_main = FormMain::instance(); + // Filtering. + connect(m_toolBarMessages, SIGNAL(messageSearchPatternChanged(QString)), + m_messagesView, SLOT(filterMessages(QString))); + // Message changers. connect(m_messagesView, SIGNAL(currentMessagesRemoved()), m_messagesBrowser, SLOT(clear())); diff --git a/src/gui/messagestoolbar.cpp b/src/gui/messagestoolbar.cpp index 1398a7de8..f6ce58b42 100644 --- a/src/gui/messagestoolbar.cpp +++ b/src/gui/messagestoolbar.cpp @@ -14,7 +14,7 @@ MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent) m_txtSearchMessages(new BaseLineEdit(this)) { m_txtSearchMessages->setFixedWidth(FILTER_WIDTH); - m_txtSearchMessages->setPlaceholderText(tr("Filter messages")); + m_txtSearchMessages->setPlaceholderText(tr("Search messages")); // Setup wrapping action for search box. m_actionSearchMessages = new QWidgetAction(this); @@ -27,6 +27,9 @@ MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent) QMargins margins = contentsMargins(); margins.setRight(margins.right() + FILTER_RIGHT_MARGIN); setContentsMargins(margins); + + connect(m_txtSearchMessages, SIGNAL(textChanged(QString)), + this, SIGNAL(messageSearchPatternChanged(QString))); } MessagesToolBar::~MessagesToolBar() { @@ -45,6 +48,11 @@ QList MessagesToolBar::changeableActions() const { void MessagesToolBar::saveChangeableActions(const QStringList& actions) { Settings::instance()->setValue(APP_CFG_GUI, "messages_toolbar", actions.join(",")); loadChangeableActions(actions); + + // If user hidden search messages box, then remove the filter. + if (!changeableActions().contains(m_actionSearchMessages)) { + m_txtSearchMessages->clear(); + } } void MessagesToolBar::loadChangeableActions(const QStringList& actions) { diff --git a/src/gui/messagestoolbar.h b/src/gui/messagestoolbar.h index 406f84100..e206f7950 100644 --- a/src/gui/messagestoolbar.h +++ b/src/gui/messagestoolbar.h @@ -15,6 +15,10 @@ class MessagesToolBar : public BaseToolBar { explicit MessagesToolBar(const QString &title, QWidget *parent = 0); virtual ~MessagesToolBar(); + inline BaseLineEdit *searchLineEdit() { + return m_txtSearchMessages; + } + // Implementation of BaseToolBar interface. QHash availableActions() const; QList changeableActions() const; @@ -27,6 +31,9 @@ class MessagesToolBar : public BaseToolBar { void loadChangeableActions(const QStringList &actions); signals: + // TODO: sem pridat este mozna mode: wildcard, regexp, fixed text. + // na tuto udalost se navaze filtrovani + void messageSearchPatternChanged(const QString &pattern); public slots: diff --git a/src/gui/messagesview.cpp b/src/gui/messagesview.cpp index 064401825..24f2d186d 100644 --- a/src/gui/messagesview.cpp +++ b/src/gui/messagesview.cpp @@ -398,6 +398,14 @@ void MessagesView::selectPreviousItem() { } } +void MessagesView::filterMessages(const QString &pattern) { + m_proxyModel->setFilterWildcard(pattern); + + if (selectionModel()->selectedRows().size() == 0) { + emit currentMessagesRemoved(); + } +} + void MessagesView::adjustColumns() { if (header()->count() > 0 && !m_columnsAdjusted) { m_columnsAdjusted = true; diff --git a/src/gui/messagesview.h b/src/gui/messagesview.h index 0560e9a66..1e34cd500 100755 --- a/src/gui/messagesview.h +++ b/src/gui/messagesview.h @@ -76,6 +76,9 @@ class MessagesView : public QTreeView { void selectNextItem(); void selectPreviousItem(); + // Filters the visible message according to given pattern. + void filterMessages(const QString &pattern); + protected slots: // Marks given indexes as selected. void reselectIndexes(const QModelIndexList &indexes);