added support for search modifiers, added [read] [unread] as examples

This commit is contained in:
Luis Ángel San Martín
2014-10-27 22:00:45 +01:00
parent 5317faacf3
commit 10436200ac
10 changed files with 162 additions and 23 deletions

View File

@ -4,6 +4,10 @@
#include <QStyle>
#include <QLabel>
#include <QRegExpValidator>
#include "QsLog.h"
YACReaderSearchLineEdit::YACReaderSearchLineEdit(QWidget *parent)
: QLineEdit(parent)
{
@ -42,6 +46,28 @@ YACReaderSearchLineEdit::YACReaderSearchLineEdit(QWidget *parent)
setAttribute(Qt::WA_MacShowFocusRect,false);
setPlaceholderText(tr("type to search"));
//search modifiers
modifiers << "[read]" << "[unread]";//<< "[author]";
modifiersCompleter = new QCompleter(modifiers);
QString regExpString;
foreach(QString modifier, modifiers)
{
regExpString = regExpString + modifier.replace("[","\\[").replace("]","\\]") + ".*|";
}
regExpString = regExpString + "[^\\[].*";
QLOG_INFO () << regExpString;
QRegExp regExp(regExpString);
QValidator *validator = new QRegExpValidator(regExp, this);
setValidator(validator);
setCompleter(modifiersCompleter);
connect(this,SIGNAL(textChanged(QString)),this,SLOT(processText(QString)));
}
void YACReaderSearchLineEdit::resizeEvent(QResizeEvent *)
@ -68,5 +94,38 @@ void YACReaderSearchLineEdit::resizeEvent(QResizeEvent *)
void YACReaderSearchLineEdit::updateCloseButton(const QString& text)
{
clearButton->setVisible(!text.isEmpty());
clearButton->setVisible(!text.isEmpty());
}
void YACReaderSearchLineEdit::processText(const QString &text)
{
QRegExp regExp("(\\[.*\\])(.*)");
if(text.startsWith("["))
{
if(regExp.exactMatch(text)) //avoid search while the modifiers are being written
{
QString modifier = regExp.cap(1);
QString searchText = regExp.cap(2).trimmed();
QLOG_INFO() << "modifier : " << modifier << "text : " << searchText;
int indexOfModifier = modifiers.indexOf(modifier);
if(indexOfModifier != -1)
{
emit filterChanged(static_cast<YACReader::SearchModifiers>(indexOfModifier+1), searchText); //TODO, do not use on indexOF
}
else
{
QLOG_ERROR() << "invalid modifier : " << modifier;
}
}
QLOG_INFO() << "full text :" << text << " : " << regExp.indexIn(text);
}
else
{
QLOG_INFO() << "NoModifiers : " << text;
emit filterChanged(YACReader::NoModifiers,text);
}
}

View File

@ -2,6 +2,9 @@
#define YACREADER_SEARCH_LINE_EDIT_H
#include <QLineEdit>
#include <QCompleter>
#include "yacreader_global.h"
class QToolButton;
class QLabel;
@ -16,12 +19,18 @@ public:
protected:
void resizeEvent(QResizeEvent *);
signals:
void filterChanged(const YACReader::SearchModifiers, QString);
private slots:
void updateCloseButton(const QString &text);
void processText(const QString & text);
private:
QToolButton *clearButton;
QLabel * searchLabel;
QCompleter * modifiersCompleter;
QStringList modifiers;
};