Code Documentation 3.6
Social Network Visualizer
Loading...
Searching...
No Matches
filter_condition.h
Go to the documentation of this file.
1
12
13#pragma once
14
15#include <QString>
16
24{
25 enum class Scope { Nodes, Edges, Both };
26 enum class Op { Eq, Neq, Gt, Lt, Gte, Lte, Contains };
27
29 QString key;
31 QString value;
32
34 bool matches(const QString &attrValue) const
35 {
36 switch (op) {
37 case Op::Eq: return attrValue == value;
38 case Op::Neq: return attrValue != value;
39 case Op::Contains: return attrValue.contains(value, Qt::CaseInsensitive);
40 default: break;
41 }
42 bool okA = false, okB = false;
43 const double a = attrValue.toDouble(&okA);
44 const double b = value.toDouble(&okB);
45 if (okA && okB) {
46 switch (op) {
47 case Op::Gt: return a > b;
48 case Op::Lt: return a < b;
49 case Op::Gte: return a >= b;
50 case Op::Lte: return a <= b;
51 default: break;
52 }
53 }
54 switch (op) {
55 case Op::Gt: return attrValue > value;
56 case Op::Lt: return attrValue < value;
57 case Op::Gte: return attrValue >= value;
58 case Op::Lte: return attrValue <= value;
59 default: break;
60 }
61 return false;
62 }
63
65 QString label() const
66 {
67 QString scopeStr;
68 switch (scope) {
69 case Scope::Nodes: scopeStr = QStringLiteral("Nodes"); break;
70 case Scope::Edges: scopeStr = QStringLiteral("Edges"); break;
71 case Scope::Both: scopeStr = QStringLiteral("Nodes+Edges"); break;
72 }
73
74 QString opStr;
75 switch (op) {
76 case Op::Eq: opStr = QStringLiteral("="); break;
77 case Op::Neq: opStr = QStringLiteral("≠"); break;
78 case Op::Gt: opStr = QStringLiteral(">"); break;
79 case Op::Lt: opStr = QStringLiteral("<"); break;
80 case Op::Gte: opStr = QStringLiteral("≥"); break;
81 case Op::Lte: opStr = QStringLiteral("≤"); break;
82 case Op::Contains: opStr = QStringLiteral("contains"); break;
83 }
84
85 return scopeStr + QLatin1String(": ") + key + QLatin1Char(' ') + opStr + QLatin1Char(' ') + value;
86 }
87};
Describes a single attribute-based filter condition.
Definition filter_condition.h:24
QString value
Definition filter_condition.h:31
Op op
Definition filter_condition.h:30
Op
Definition filter_condition.h:26
@ Gt
Definition filter_condition.h:26
@ Eq
Definition filter_condition.h:26
@ Lt
Definition filter_condition.h:26
@ Lte
Definition filter_condition.h:26
@ Gte
Definition filter_condition.h:26
@ Contains
Definition filter_condition.h:26
@ Neq
Definition filter_condition.h:26
Scope scope
Definition filter_condition.h:28
QString label() const
Definition filter_condition.h:65
Scope
Definition filter_condition.h:25
@ Both
Definition filter_condition.h:25
@ Nodes
Definition filter_condition.h:25
@ Edges
Definition filter_condition.h:25
bool matches(const QString &attrValue) const
Definition filter_condition.h:34
QString key
Definition filter_condition.h:29