Changeset View
Changeset View
Standalone View
Standalone View
shell/problemstore.cpp
Show All 37 Lines | 27 | { | |||
---|---|---|---|---|---|
38 | /// The severity filter setting | 38 | /// The severity filter setting | ||
39 | KDevelop::IProblem::Severities m_severities; | 39 | KDevelop::IProblem::Severities m_severities; | ||
40 | 40 | | |||
41 | /// The problems list | 41 | /// The problems list | ||
42 | KDevelop::ProblemStoreNode *m_rootNode; | 42 | KDevelop::ProblemStoreNode *m_rootNode; | ||
43 | 43 | | |||
44 | /// Path of the currently open document | 44 | /// Path of the currently open document | ||
45 | KDevelop::IndexedString m_currentDocument; | 45 | KDevelop::IndexedString m_currentDocument; | ||
46 | | ||||
47 | /// All stored problems | ||||
48 | QVector<KDevelop::IProblem::Ptr> m_allProblems; | ||||
kfunk: Maybe indeed call it `m_allProblems`, or even `m_accumulatedProblems` | |||||
46 | }; | 49 | }; | ||
47 | 50 | | |||
48 | namespace KDevelop | 51 | namespace KDevelop | ||
49 | { | 52 | { | ||
50 | 53 | | |||
51 | ProblemStore::ProblemStore(QObject *parent) | 54 | ProblemStore::ProblemStore(QObject *parent) | ||
52 | : QObject(parent), | 55 | : QObject(parent), | ||
53 | d(new ProblemStorePrivate) | 56 | d(new ProblemStorePrivate) | ||
54 | { | 57 | { | ||
55 | } | 58 | } | ||
56 | 59 | | |||
57 | ProblemStore::~ProblemStore() | 60 | ProblemStore::~ProblemStore() | ||
58 | { | 61 | { | ||
59 | clear(); | 62 | clear(); | ||
60 | 63 | | |||
61 | delete d->m_rootNode; | 64 | delete d->m_rootNode; | ||
62 | } | 65 | } | ||
63 | 66 | | |||
64 | void ProblemStore::addProblem(const IProblem::Ptr &problem) | 67 | void ProblemStore::addProblem(const IProblem::Ptr &problem) | ||
65 | { | 68 | { | ||
66 | ProblemNode *node = new ProblemNode(d->m_rootNode); | 69 | ProblemNode *node = new ProblemNode(d->m_rootNode); | ||
67 | node->setProblem(problem); | 70 | node->setProblem(problem); | ||
68 | d->m_rootNode->addChild(node); | 71 | d->m_rootNode->addChild(node); | ||
72 | | ||||
73 | d->m_allProblems += problem; | ||||
74 | emit problemsChanged(); | ||||
69 | } | 75 | } | ||
70 | 76 | | |||
71 | void ProblemStore::setProblems(const QVector<IProblem::Ptr> &problems) | 77 | void ProblemStore::setProblems(const QVector<IProblem::Ptr> &problems) | ||
72 | { | 78 | { | ||
79 | int oldSize = d->m_allProblems.size(); | ||||
80 | | ||||
kfunk: Use `QSignalBlocker` | |||||
antonanikin: Ok, thanks for useful wrapper :) | |||||
81 | // set signals block to prevent problemsChanged() emitting during clean | ||||
82 | { | ||||
83 | QSignalBlocker blocker(this); | ||||
73 | clear(); | 84 | clear(); | ||
85 | } | ||||
74 | 86 | | |||
75 | foreach (const IProblem::Ptr &problem, problems) { | 87 | foreach (const IProblem::Ptr &problem, problems) { | ||
76 | d->m_rootNode->addChild(new ProblemNode(d->m_rootNode, problem)); | 88 | d->m_rootNode->addChild(new ProblemNode(d->m_rootNode, problem)); | ||
77 | } | 89 | } | ||
78 | 90 | | |||
79 | rebuild(); | 91 | rebuild(); | ||
92 | | ||||
93 | if (d->m_allProblems.size() != oldSize || d->m_allProblems != problems) { | ||||
94 | d->m_allProblems = problems; | ||||
95 | emit problemsChanged(); | ||||
96 | } | ||||
97 | } | ||||
98 | | ||||
99 | QVector<IProblem::Ptr> ProblemStore::problems(const KDevelop::IndexedString& document) const | ||||
100 | { | ||||
101 | QVector<IProblem::Ptr> documentProblems; | ||||
102 | | ||||
103 | foreach (auto problem, d->m_allProblems) { | ||||
104 | if (problem->finalLocation().document == document) | ||||
105 | documentProblems += problem; | ||||
106 | } | ||||
107 | | ||||
108 | return documentProblems; | ||||
80 | } | 109 | } | ||
81 | 110 | | |||
82 | const ProblemStoreNode* ProblemStore::findNode(int row, ProblemStoreNode *parent) const | 111 | const ProblemStoreNode* ProblemStore::findNode(int row, ProblemStoreNode *parent) const | ||
83 | { | 112 | { | ||
84 | Q_UNUSED(parent); | 113 | Q_UNUSED(parent); | ||
85 | return d->m_rootNode->child(row); | 114 | return d->m_rootNode->child(row); | ||
86 | } | 115 | } | ||
87 | 116 | | |||
88 | int ProblemStore::count(ProblemStoreNode *parent) const | 117 | int ProblemStore::count(ProblemStoreNode *parent) const | ||
89 | { | 118 | { | ||
90 | if(parent) | 119 | if(parent) | ||
91 | return parent->count(); | 120 | return parent->count(); | ||
92 | else | 121 | else | ||
93 | return d->m_rootNode->count(); | 122 | return d->m_rootNode->count(); | ||
94 | } | 123 | } | ||
95 | 124 | | |||
96 | void ProblemStore::clear() | 125 | void ProblemStore::clear() | ||
97 | { | 126 | { | ||
98 | d->m_rootNode->clear(); | 127 | d->m_rootNode->clear(); | ||
128 | | ||||
129 | if (!d->m_allProblems.isEmpty()) { | ||||
kfunk: Move this line into the if-block? | |||||
130 | d->m_allProblems.clear(); | ||||
131 | emit problemsChanged(); | ||||
132 | } | ||||
99 | } | 133 | } | ||
100 | 134 | | |||
101 | void ProblemStore::rebuild() | 135 | void ProblemStore::rebuild() | ||
102 | { | 136 | { | ||
103 | } | 137 | } | ||
104 | 138 | | |||
105 | void ProblemStore::setSeverity(int severity) | 139 | void ProblemStore::setSeverity(int severity) | ||
106 | { | 140 | { | ||
▲ Show 20 Lines • Show All 124 Lines • Show Last 20 Lines |
Maybe indeed call it m_allProblems, or even m_accumulatedProblems