Skip to content

Commit b35297a

Browse files
committed
in consideration of performance and function,
change the QSyntaxHighlighter to my AbstractLineFilter.
1 parent 00b3655 commit b35297a

File tree

13 files changed

+430
-70
lines changed

13 files changed

+430
-70
lines changed

VisualLog.pro

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,18 @@ SOURCES += \
2929
mainwindow.cpp \
3030
logviewer.cpp \
3131
finder.cpp \
32-
highlighter.cpp
32+
highlighter.cpp \
33+
logviewport.cpp \
34+
logfilter.cpp
3335

3436
HEADERS += \
3537
mainwindow.h \
3638
logviewer.h \
3739
finder.h \
38-
highlighter.h
40+
highlighter.h \
41+
abstractlinefilter.h \
42+
logviewport.h \
43+
logfilter.h
3944

4045
FORMS +=
4146

abstractlinefilter.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#ifndef ABSTRACTLINEFILTER_H
2+
#define ABSTRACTLINEFILTER_H
3+
4+
#include <QObject>
5+
#include <QString>
6+
#include <QTextCharFormat>
7+
8+
9+
class LogViewer;
10+
11+
class AbstractLineFilter : public QObject
12+
{
13+
Q_OBJECT
14+
15+
public:
16+
explicit AbstractLineFilter(QObject *parent = nullptr):QObject(parent){}
17+
18+
friend class LogViewer;
19+
20+
void update() {emit updated();}
21+
QTextCharFormat & format() {return mFormat;}
22+
bool visible() {return mVisible;}
23+
24+
protected:
25+
virtual void onNextLine(const QString &line) = 0;
26+
27+
void setFormat(const QTextCharFormat &format) {mFormat = format;}
28+
void setVisible(bool visible) {mVisible = visible;}
29+
30+
signals:
31+
void updated();
32+
33+
private:
34+
QTextCharFormat mFormat;
35+
bool mVisible;
36+
};
37+
38+
#endif // ABSTRACTLINEFILTER_H

highlighter.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Highlighter::Highlighter(QWidget *parent):
66
mMainLayout(new QVBoxLayout()),
77
mToolLayout(new QHBoxLayout()),
88
mControlLayout(new QHBoxLayout()),
9-
mRegulationBox(new QComboBox(mRootWidget)),
9+
mRuleBox(new QComboBox(mRootWidget)),
1010
mNewButton(new QToolButton(mRootWidget)),
1111
mDelButton(new QToolButton(mRootWidget)),
1212
mSaveButton(new QToolButton(mRootWidget)),
@@ -16,12 +16,13 @@ Highlighter::Highlighter(QWidget *parent):
1616
mFindNxtButton(new QPushButton(mRootWidget))
1717
{
1818
setupUi();
19+
mFilter = QSharedPointer<LogFilter>(new LogFilter());
1920
}
2021

2122
void Highlighter::setupUi()
2223
{
2324
// widget setting
24-
mRegulationBox->setEditable(true);
25+
mRuleBox->setEditable(true);
2526
mNewButton->setText("+");
2627
mDelButton->setText("-");
2728
mSaveButton->setText("<<");
@@ -30,7 +31,7 @@ void Highlighter::setupUi()
3031
mFindNxtButton->setText("find next");
3132

3233
// layout setting
33-
mToolLayout->addWidget(mRegulationBox);
34+
mToolLayout->addWidget(mRuleBox);
3435
mToolLayout->addWidget(mNewButton);
3536
mToolLayout->addWidget(mDelButton);
3637
mToolLayout->addWidget(mSaveButton);
@@ -47,3 +48,8 @@ void Highlighter::setupUi()
4748
mRootWidget->setLayout(mMainLayout);
4849
setWidget(mRootWidget);
4950
}
51+
52+
QSharedPointer<AbstractLineFilter> Highlighter::logHighlighter()
53+
{
54+
return mFilter;
55+
}

highlighter.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
#include <QLayout>
1414
#include <QVBoxLayout>
1515

16+
#include "abstractlinefilter.h"
17+
#include "logfilter.h"
18+
1619

1720
class Highlighter : public QDockWidget
1821
{
@@ -21,7 +24,8 @@ class Highlighter : public QDockWidget
2124
public:
2225
explicit Highlighter(QWidget *parent = nullptr);
2326

24-
QSharedPointer<QSyntaxHighlighter> logHighlighter();
27+
QSharedPointer<AbstractLineFilter> logHighlighter();
28+
2529

2630
signals:
2731
void logHighlighterChanged();
@@ -30,19 +34,23 @@ class Highlighter : public QDockWidget
3034
void setupUi();
3135

3236
private:
37+
// ui
3338
QWidget *mRootWidget;
3439
QLayout *mMainLayout;
3540
QLayout *mToolLayout;
3641
QLayout *mControlLayout;
3742

38-
QComboBox *mRegulationBox;
43+
QComboBox *mRuleBox;
3944
QToolButton *mNewButton;
4045
QToolButton *mDelButton;
4146
QToolButton *mSaveButton;
4247
QPlainTextEdit *mTextEdit;
4348
QToolButton *mHighlightButton;
4449
QPushButton *mFindPreButton;
4550
QPushButton *mFindNxtButton;
51+
52+
//others
53+
QSharedPointer<LogFilter> mFilter;
4654
};
4755

4856
#endif // HIGHLIGHTER_H

logfilter.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include "logfilter.h"
2+
3+
LogFilter::LogFilter():
4+
mRules(0)
5+
{
6+
setDefaultRule(Rule(".*", true, QColor(0 ,0 ,0), QColor(255, 0, 0)));
7+
}
8+
9+
void LogFilter::addRule(const Rule &rule)
10+
{
11+
mRules.append(rule);
12+
}
13+
14+
void LogFilter::clearRule()
15+
{
16+
mRules.clear();
17+
}
18+
19+
void LogFilter::onNextLine(const QString &line)
20+
{
21+
// match the rules
22+
foreach(const Rule &rule, mRules) {
23+
QRegularExpressionMatch match = rule.pattern.match(line);
24+
if(match.hasMatch()) {
25+
setVisible(rule.visible);
26+
setFormat(rule.format);
27+
return;
28+
}
29+
}
30+
31+
// default
32+
setVisible(mDefaultRule.visible);
33+
setFormat(mDefaultRule.format);
34+
}
35+
36+
void LogFilter::setDefaultRule(const Rule &rule)
37+
{
38+
mDefaultRule = rule;
39+
}

logfilter.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#ifndef LOGFILTER_H
2+
#define LOGFILTER_H
3+
4+
#include <QObject>
5+
#include <QString>
6+
#include <QRegularExpression>
7+
#include <QRegularExpressionMatch>
8+
#include <QRegularExpressionMatchIterator>
9+
#include <QColor>
10+
#include <QVector>
11+
#include <QTextCharFormat>
12+
#include <QBrush>
13+
#include <QDebug>
14+
15+
#include "abstractlinefilter.h"
16+
17+
18+
class LogFilter : public AbstractLineFilter
19+
{
20+
Q_OBJECT
21+
22+
public:
23+
struct Rule {
24+
public:
25+
Rule() {}
26+
Rule(QString pattern, bool visible, QColor foreground, QColor background):
27+
pattern(pattern),
28+
visible(visible)
29+
{
30+
format.setForeground(QBrush(foreground));
31+
format.setBackground(QBrush(background));
32+
}
33+
34+
QRegularExpression pattern;
35+
bool visible;
36+
QTextCharFormat format;
37+
};
38+
39+
LogFilter();
40+
41+
void addRule(const Rule &rule);
42+
void clearRule();
43+
void setDefaultRule(const Rule &rule);
44+
45+
protected:
46+
virtual void onNextLine(const QString &line);
47+
48+
private:
49+
QVector<Rule> mRules;
50+
Rule mDefaultRule;
51+
};
52+
53+
#endif // LOGFILTER_H

0 commit comments

Comments
 (0)