Changeset View
Changeset View
Standalone View
Standalone View
kdevplatform/shell/problemmodel.cpp
Show First 20 Lines • Show All 62 Lines • ▼ Show 20 Line(s) | |||||
63 | 63 | | |||
64 | class ProblemModelPrivate | 64 | class ProblemModelPrivate | ||
65 | { | 65 | { | ||
66 | public: | 66 | public: | ||
67 | explicit ProblemModelPrivate(KDevelop::ProblemStore *store) | 67 | explicit ProblemModelPrivate(KDevelop::ProblemStore *store) | ||
68 | : m_problems(store) | 68 | : m_problems(store) | ||
69 | , m_features(KDevelop::ProblemModel::NoFeatures) | 69 | , m_features(KDevelop::ProblemModel::NoFeatures) | ||
70 | , m_fullUpdateTooltip(i18nc("@info:tooltip", "Re-parse all watched documents")) | 70 | , m_fullUpdateTooltip(i18nc("@info:tooltip", "Re-parse all watched documents")) | ||
71 | , m_isPlaceholderShown(false) | ||||
71 | { | 72 | { | ||
72 | } | 73 | } | ||
73 | 74 | | |||
75 | KDevelop::IProblem::Ptr createPlaceholdreProblem() const | ||||
76 | { | ||||
77 | Q_ASSERT(!m_placeholderText.isEmpty()); | ||||
78 | | ||||
79 | KDevelop::IProblem::Ptr problem(new KDevelop::DetectedProblem(m_placeholderSource)); | ||||
80 | problem->setDescription(m_placeholderText); | ||||
81 | problem->setFinalLocation(m_placeholderLocation); | ||||
82 | problem->setSeverity(KDevelop::IProblem::Hint); | ||||
83 | | ||||
84 | return problem; | ||||
85 | } | ||||
86 | | ||||
74 | QScopedPointer<KDevelop::ProblemStore> m_problems; | 87 | QScopedPointer<KDevelop::ProblemStore> m_problems; | ||
75 | KDevelop::ProblemModel::Features m_features; | 88 | KDevelop::ProblemModel::Features m_features; | ||
76 | QString m_fullUpdateTooltip; | 89 | QString m_fullUpdateTooltip; | ||
90 | QString m_placeholderText; | ||||
91 | QString m_placeholderSource; | ||||
92 | KDevelop::DocumentRange m_placeholderLocation; | ||||
93 | bool m_isPlaceholderShown; | ||||
77 | }; | 94 | }; | ||
78 | 95 | | |||
79 | 96 | | |||
80 | ProblemModel::ProblemModel(QObject * parent, ProblemStore *store) | 97 | ProblemModel::ProblemModel(QObject * parent, ProblemStore *store) | ||
81 | : QAbstractItemModel(parent) | 98 | : QAbstractItemModel(parent) | ||
82 | , d(new ProblemModelPrivate(store)) | 99 | , d(new ProblemModelPrivate(store)) | ||
83 | { | 100 | { | ||
84 | if (!d->m_problems) { | 101 | if (!d->m_problems) { | ||
▲ Show 20 Lines • Show All 163 Lines • ▼ Show 20 Line(s) | 264 | { | |||
248 | if (d->m_fullUpdateTooltip == tooltip) { | 265 | if (d->m_fullUpdateTooltip == tooltip) { | ||
249 | return; | 266 | return; | ||
250 | } | 267 | } | ||
251 | 268 | | |||
252 | d->m_fullUpdateTooltip = tooltip; | 269 | d->m_fullUpdateTooltip = tooltip; | ||
253 | emit fullUpdateTooltipChanged(); | 270 | emit fullUpdateTooltipChanged(); | ||
254 | } | 271 | } | ||
255 | 272 | | |||
273 | void ProblemModel::setPlaceholderText(const QString& text, const KDevelop::DocumentRange& location, const QString& source) | ||||
274 | { | ||||
275 | d->m_placeholderText = text; | ||||
276 | d->m_placeholderLocation = location; | ||||
277 | d->m_placeholderSource = source; | ||||
278 | | ||||
279 | if (d->m_isPlaceholderShown || d->m_problems->count() == 0) { | ||||
280 | // clearing will show/update the new placeholder | ||||
281 | clearProblems(); | ||||
282 | } | ||||
283 | } | ||||
284 | | ||||
256 | void ProblemModel::addProblem(const IProblem::Ptr &problem) | 285 | void ProblemModel::addProblem(const IProblem::Ptr &problem) | ||
257 | { | 286 | { | ||
287 | if (d->m_isPlaceholderShown) { | ||||
288 | setProblems({ problem }); | ||||
289 | } else { | ||||
258 | int c = d->m_problems->count(); | 290 | int c = d->m_problems->count(); | ||
259 | beginInsertRows(QModelIndex(), c, c); | 291 | beginInsertRows(QModelIndex(), c, c); | ||
260 | d->m_problems->addProblem(problem); | 292 | d->m_problems->addProblem(problem); | ||
261 | endInsertRows(); | 293 | endInsertRows(); | ||
262 | } | 294 | } | ||
295 | } | ||||
263 | 296 | | |||
264 | void ProblemModel::setProblems(const QVector<IProblem::Ptr> &problems) | 297 | void ProblemModel::setProblems(const QVector<IProblem::Ptr> &problems) | ||
265 | { | 298 | { | ||
266 | beginResetModel(); | 299 | beginResetModel(); | ||
300 | if (problems.isEmpty() && !d->m_placeholderText.isEmpty()) { | ||||
301 | d->m_problems->setProblems({ d->createPlaceholdreProblem() }); | ||||
302 | d->m_isPlaceholderShown = true; | ||||
303 | } else { | ||||
267 | d->m_problems->setProblems(problems); | 304 | d->m_problems->setProblems(problems); | ||
305 | d->m_isPlaceholderShown = false; | ||||
306 | } | ||||
268 | endResetModel(); | 307 | endResetModel(); | ||
269 | } | 308 | } | ||
270 | 309 | | |||
271 | void ProblemModel::clearProblems() | 310 | void ProblemModel::clearProblems() | ||
272 | { | 311 | { | ||
273 | beginResetModel(); | 312 | setProblems({}); | ||
274 | d->m_problems->clear(); | | |||
275 | endResetModel(); | | |||
276 | } | 313 | } | ||
277 | 314 | | |||
278 | QVector<IProblem::Ptr> ProblemModel::problems(const KDevelop::IndexedString& document) const | 315 | QVector<IProblem::Ptr> ProblemModel::problems(const KDevelop::IndexedString& document) const | ||
279 | { | 316 | { | ||
280 | return d->m_problems->problems(document); | 317 | return d->m_problems->problems(document); | ||
281 | } | 318 | } | ||
282 | 319 | | |||
283 | QVariant ProblemModel::headerData(int section, Qt::Orientation orientation, int role) const | 320 | QVariant ProblemModel::headerData(int section, Qt::Orientation orientation, int role) const | ||
▲ Show 20 Lines • Show All 109 Lines • Show Last 20 Lines |