Skip to content

Commit 1019e7a

Browse files
authored
Fix #13337 (GUI: In the Misra Report, use proper icons according to misra classifications) (danmar#8092)
1 parent 9dfbfbe commit 1019e7a

File tree

5 files changed

+50
-5
lines changed

5 files changed

+50
-5
lines changed

.selfcheck_suppressions

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ functionStatic:*/ui_fileview.h
1717
# --debug-warnings suppressions
1818
valueFlowBailout
1919
valueFlowBailoutIncompleteVar
20+
valueFlowMaxIterations:gui/resultstree.cpp
2021
autoNoType:externals/simplecpp/simplecpp.cpp
2122
autoNoType:cli/*.cpp
2223
autoNoType:lib/*.cpp

gui/resultitem.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,21 @@ class ResultItem : public QStandardItem
4141
Type getType() const {
4242
return mType;
4343
}
44+
45+
void setIconFileName(const QString& iconFileName) {
46+
mIconFileName = iconFileName;
47+
if (!mIconFileName.isEmpty())
48+
setIcon(QIcon(iconFileName));
49+
}
50+
51+
// cppcheck-suppress unusedFunction; used in test-resultstree
52+
const QString& getIconFileName() const {
53+
return mIconFileName;
54+
}
4455
private:
4556
const Type mType;
4657
const int mErrorPathIndex;
58+
QString mIconFileName;
4759
};
4860

4961
#endif // RESULTITEM_H

gui/resultstree.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ static QStringList getLabels() {
126126
QObject::tr("CWE")};
127127
}
128128

129+
static Severity getSeverity(ReportType reportType, const ErrorItem& errorItem) {
130+
return reportType == ReportType::normal ? errorItem.severity : getSeverityFromClassification(errorItem.classification);
131+
}
132+
129133
ResultsTree::ResultsTree(QWidget * parent) :
130134
QTreeView(parent),
131135
mModel(new QStandardItemModel)
@@ -160,6 +164,7 @@ void ResultsTree::setReportType(ReportType reportType) {
160164
QSharedPointer<ErrorItem>& errorItem = dynamic_cast<ResultItem*>(fileItem->child(j,0))->errorItem;
161165
errorItem->guideline = getGuideline(mReportType, mGuideline, errorItem->errorId, errorItem->severity);
162166
errorItem->classification = getClassification(mReportType, errorItem->guideline);
167+
dynamic_cast<ResultItem*>(fileItem->child(j, COLUMN_FILE))->setIconFileName(severityToIcon(getSeverity(reportType, *errorItem)));
163168
fileItem->child(j, COLUMN_CERT_LEVEL)->setText(errorItem->classification);
164169
fileItem->child(j, COLUMN_CERT_RULE)->setText(errorItem->guideline);
165170
fileItem->child(j, COLUMN_MISRA_CLASSIFICATION)->setText(errorItem->classification);
@@ -264,7 +269,7 @@ bool ResultsTree::addErrorItem(const ErrorItem& errorItem)
264269
ResultItem* stditem = addBacktraceFiles(fileItem,
265270
errorItemPtr,
266271
!showItem,
267-
severityToIcon(errorItemPtr->severity),
272+
severityToIcon(getSeverity(mReportType, *errorItemPtr)),
268273
ResultItem::Type::message,
269274
errorItemPtr->getMainLocIndex());
270275

@@ -317,6 +322,7 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent,
317322
const int numberOfColumns = getLabels().size();
318323
QList<ResultItem*> columns(numberOfColumns);
319324
columns[COLUMN_FILE] = createFilenameItem(errorItem, type, errorPathIndex);
325+
columns[COLUMN_FILE]->setIconFileName(icon);
320326
columns[COLUMN_LINE] = createLineNumberItem(loc.line, errorItem, type, errorPathIndex);
321327
columns[COLUMN_SEVERITY] = createNormalItem(itemSeverity, errorItem, type, errorPathIndex);
322328
columns[COLUMN_SUMMARY] = createNormalItem(text, errorItem, type, errorPathIndex);
@@ -340,10 +346,6 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent,
340346

341347
setRowHidden(parent->rowCount() - 1, parent->index(), hide);
342348

343-
if (!icon.isEmpty()) {
344-
list[COLUMN_FILE]->setIcon(QIcon(icon));
345-
}
346-
347349
return columns[COLUMN_FILE];
348350
}
349351

gui/test/resultstree/testresultstree.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,35 @@ void TestResultsTree::testReportType() const
294294
"missingReturn,Mandatory,17.4");
295295
}
296296

297+
void TestResultsTree::testReportTypeIcon() const {
298+
ResultsTree tree(nullptr);
299+
tree.setReportType(ReportType::misraC2012);
300+
tree.addErrorItem(createErrorItem("file1.c", 10, Severity::style, "some rule text", "premium-misra-c-2012-1.1")); // Required
301+
tree.addErrorItem(createErrorItem("file1.c", 20, Severity::style, "some rule text", "premium-misra-c-2012-1.2")); // Advisory
302+
tree.addErrorItem(createErrorItem("file1.c", 30, Severity::style, "some rule text", "premium-misra-c-2012-9.1")); // Mandatory
303+
304+
const auto* model = dynamic_cast<QStandardItemModel*>(tree.model());
305+
QVERIFY(model != nullptr);
306+
const ResultItem* fileItem = dynamic_cast<ResultItem*>(model->item(0,0));
307+
308+
const ResultItem* err1 = dynamic_cast<ResultItem*>(fileItem->child(0,0));
309+
const ResultItem* err2 = dynamic_cast<ResultItem*>(fileItem->child(1,0));
310+
const ResultItem* err3 = dynamic_cast<ResultItem*>(fileItem->child(2,0));
311+
312+
QCOMPARE(err1->getIconFileName(), ":images/dialog-warning.png");
313+
QCOMPARE(err2->getIconFileName(), ":images/applications-development.png");
314+
QCOMPARE(err3->getIconFileName(), ":images/dialog-error.png");
315+
316+
tree.setReportType(ReportType::normal);
317+
QCOMPARE(err1->getIconFileName(), ":images/applications-development.png");
318+
QCOMPARE(err2->getIconFileName(), ":images/applications-development.png");
319+
QCOMPARE(err3->getIconFileName(), ":images/applications-development.png");
320+
321+
tree.setReportType(ReportType::misraC2012);
322+
QCOMPARE(err1->getIconFileName(), ":images/dialog-warning.png");
323+
QCOMPARE(err2->getIconFileName(), ":images/applications-development.png");
324+
QCOMPARE(err3->getIconFileName(), ":images/dialog-error.png");
325+
}
297326

298327
void TestResultsTree::testGetGuidelineError() const
299328
{

gui/test/resultstree/testresultstree.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ private slots:
2727
void multiLineResult() const;
2828
void resultsInSameFile() const;
2929
void testReportType() const;
30+
void testReportTypeIcon() const;
3031
void testGetGuidelineError() const;
3132
void misraCReportShowClassifications() const;
3233
};

0 commit comments

Comments
 (0)