@@ -17,6 +17,7 @@ Highlighter::Highlighter(QWidget *parent):
1717{
1818 setupUi ();
1919 mFilter = QSharedPointer<LogFilter>(new LogFilter ());
20+ connect (mJsonEdit , &JsonTextEdit::updated, this , &Highlighter::onJsonObjectUpdated);
2021}
2122
2223void Highlighter::setupUi ()
@@ -61,3 +62,82 @@ QSharedPointer<AbstractLineFilter> Highlighter::logHighlighter()
6162{
6263 return mFilter ;
6364}
65+
66+ void Highlighter::onJsonObjectUpdated (const QJsonObject &jsonObject)
67+ {
68+ mFilter ->clearRule ();
69+ qDebug ()<<" jsonUpdate" ;
70+ // traverse every rules
71+ foreach (const QString &ruleName, jsonObject.keys ()) {
72+ QJsonValue value = jsonObject.value (ruleName);
73+ qDebug ()<<" key=" <<ruleName;
74+ if (value.isObject ()) {
75+ QJsonObject propsObject = value.toObject ();
76+ LogFilter::Rule filterRule (true , QColor (0 , 0 , 0 ), QColor (255 , 255 , 255 ));
77+
78+ // traverse every properties
79+ foreach (const QString &propName, propsObject.keys ()) {
80+ QJsonValue propValue = propsObject.value (propName);
81+ if (propValue.isNull ()) continue ;
82+
83+ updateFilterRule (&filterRule, propName, propValue);
84+ }
85+
86+ // set properties to filter
87+ if (ruleName != " default" ) {
88+ mFilter ->addRule (filterRule);
89+ } else {
90+ mFilter ->setDefaultRule (filterRule);
91+ }
92+ }
93+ }
94+
95+ mFilter ->update ();
96+ }
97+
98+ void Highlighter::updateFilterRule (LogFilter::Rule *filterRule,
99+ const QString &propName, const QJsonValue &propValue)
100+ {
101+ if (propName == " pattern" ) {
102+ if (propValue.isString ()) {
103+ filterRule->pattern = QRegularExpression (propValue.toString ());
104+ }
105+ } else if (propName == " visible" ) {
106+ if (propValue.isBool ()) {
107+ filterRule->visible = propValue.toBool ();
108+ }
109+ } else if (propName == " foreground" ) {
110+ if (propValue.isArray ()) {
111+ QJsonArray propArrayValue = propValue.toArray ();
112+ if (propArrayValue.size () == 3 && isDoubleJsonArray (propArrayValue)) {
113+
114+ int r = propArrayValue.at (0 ).toInt () % 256 ;
115+ int g = propArrayValue.at (1 ).toInt () % 256 ;
116+ int b = propArrayValue.at (2 ).toInt () % 256 ;
117+
118+ filterRule->format .setForeground (QColor (r, g, b));
119+ }
120+ }
121+ } else if (propName == " background" ) {
122+ if (propValue.isArray ()) {
123+ QJsonArray propArrayValue = propValue.toArray ();
124+ if (propArrayValue.size () == 3 && isDoubleJsonArray (propArrayValue)) {
125+
126+ int r = propArrayValue.at (0 ).toInt () % 256 ;
127+ int g = propArrayValue.at (1 ).toInt () % 256 ;
128+ int b = propArrayValue.at (2 ).toInt () % 256 ;
129+
130+ filterRule->format .setBackground (QColor (r, g, b));
131+ }
132+ }
133+ }
134+ }
135+
136+ bool Highlighter::isDoubleJsonArray (const QJsonArray &jsonArray)
137+ {
138+ foreach (const QJsonValue jsonValue, jsonArray) {
139+ if (jsonValue.type () != QJsonValue::Type::Double)
140+ return false ;
141+ }
142+ return true ;
143+ }
0 commit comments