@@ -80,14 +80,6 @@ static constexpr int COLUMN_SINCE_DATE = 10;
8080static constexpr int COLUMN_TAGS = 11 ;
8181static constexpr int COLUMN_CWE = 12 ;
8282
83- static ResultItem* getItemAtCol (QStandardItem* i, int col) {
84- if (!i)
85- return nullptr ;
86- if (i->column () != col)
87- return i->parent () ? dynamic_cast <ResultItem*>(i->parent ()->child (i->row (), col)) : nullptr ;
88- return dynamic_cast <ResultItem*>(i);
89- }
90-
9183static QString getGuideline (ReportType reportType, const std::map<std::string, std::string> &guidelineMapping,
9284 const QString& errorId, Severity severity) {
9385 return QString::fromStdString (getGuideline (errorId.toStdString (),
@@ -208,9 +200,9 @@ void ResultsTree::initialize(QSettings *settings, ApplicationList *list, ThreadH
208200 loadSettings ();
209201}
210202
211- ResultItem *ResultsTree::createNormalItem (const QString &text)
203+ ResultItem *ResultsTree::createNormalItem (const QString &text, QSharedPointer<ErrorItem> errorItem, ResultItem::Type type, int errorPathIndex )
212204{
213- auto *item = new ResultItem ({}, ResultItem::Type::message, 0 );
205+ auto *item = new ResultItem (errorItem, type, errorPathIndex );
214206 item->setText (text);
215207 item->setEditable (false );
216208 return item;
@@ -224,18 +216,18 @@ ResultItem *ResultsTree::createFilenameItem(QSharedPointer<ErrorItem> errorItem,
224216 return item;
225217}
226218
227- ResultItem *ResultsTree::createCheckboxItem (bool checked)
219+ ResultItem *ResultsTree::createCheckboxItem (bool checked, QSharedPointer<ErrorItem> errorItem, ResultItem::Type type, int errorPathIndex )
228220{
229- auto *item = new ResultItem ({}, ResultItem::Type::message, 0 );
221+ auto *item = new ResultItem (errorItem, type, errorPathIndex );
230222 item->setCheckable (true );
231223 item->setCheckState (checked ? Qt::Checked : Qt::Unchecked);
232224 item->setEnabled (false );
233225 return item;
234226}
235227
236- ResultItem *ResultsTree::createLineNumberItem (int linenumber)
228+ ResultItem *ResultsTree::createLineNumberItem (int linenumber, QSharedPointer<ErrorItem> errorItem, ResultItem::Type type, int errorPathIndex )
237229{
238- auto *item = new ResultItem ({}, ResultItem::Type::message, 0 );
230+ auto *item = new ResultItem (errorItem, type, errorPathIndex );
239231 item->setText (QString::number (linenumber));
240232 item->setTextAlignment (Qt::AlignRight | Qt::AlignVCenter);
241233 item->setEditable (false );
@@ -287,7 +279,7 @@ bool ResultsTree::addErrorItem(const ErrorItem& errorItem)
287279 errorItemPtr,
288280 !showItem,
289281 severityToIcon (errorItemPtr->severity ),
290- false ,
282+ ResultItem::Type::message ,
291283 errorItemPtr->getMainLocIndex ());
292284
293285 if (!stditem)
@@ -300,7 +292,7 @@ bool ResultsTree::addErrorItem(const ErrorItem& errorItem)
300292 errorItemPtr,
301293 false ,
302294 " :images/go-down.png" ,
303- true ,
295+ ResultItem::Type::note ,
304296 i);
305297 }
306298 }
@@ -312,7 +304,7 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent,
312304 QSharedPointer<ErrorItem> errorItem,
313305 const bool hide,
314306 const QString &icon,
315- bool childOfMessage ,
307+ ResultItem::Type type ,
316308 int errorPathIndex)
317309{
318310 if (!parent)
@@ -321,6 +313,7 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent,
321313 // TODO message has parameter names so we'll need changes to the core
322314 // cppcheck so we can get proper translations
323315
316+ const bool childOfMessage = (type == ResultItem::Type::note);
324317 const QString itemSeverity = childOfMessage ? tr (" note" ) : severityToTranslatedString (errorItem->severity );
325318
326319 const auto & loc = errorItem->errorPath [errorPathIndex];
@@ -333,25 +326,29 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent,
333326 return nullptr ;
334327 }
335328
329+ const QString text = childOfMessage ? loc.info : errorItem->summary ;
330+
336331 const int numberOfColumns = getLabels ().size ();
337332 QList<ResultItem*> columns (numberOfColumns);
338- columns[COLUMN_CERT_LEVEL] = createNormalItem (errorItem->classification );
339- columns[COLUMN_CERT_RULE] = createNormalItem (errorItem->guideline );
340- columns[COLUMN_CWE] = createNormalItem (errorItem->cwe > 0 ? QString::number (errorItem->cwe ) : QString ());
341- columns[COLUMN_FILE] = createFilenameItem (errorItem, childOfMessage ? ResultItem::Type::note : ResultItem::Type::message, errorPathIndex);
342- columns[COLUMN_ID] = createNormalItem (childOfMessage ? QString () : errorItem->errorId );
343- columns[COLUMN_INCONCLUSIVE] = childOfMessage ? createNormalItem (QString ()) : createCheckboxItem (errorItem->inconclusive );
344- columns[COLUMN_LINE] = createLineNumberItem (loc.line );
345- columns[COLUMN_MISRA_CLASSIFICATION] = createNormalItem (errorItem->classification );
346- columns[COLUMN_MISRA_GUIDELINE] = createNormalItem (errorItem->guideline );
347- columns[COLUMN_SEVERITY] = createNormalItem (itemSeverity);
348- columns[COLUMN_SINCE_DATE] = createNormalItem (errorItem->sinceDate );
349- columns[COLUMN_SUMMARY] = createNormalItem (errorItem->summary );
350- columns[COLUMN_TAGS] = createNormalItem (errorItem->tags );
333+ columns[COLUMN_FILE] = createFilenameItem (errorItem, type, errorPathIndex);
334+ columns[COLUMN_LINE] = createLineNumberItem (loc.line , errorItem, type, errorPathIndex);
335+ columns[COLUMN_SEVERITY] = createNormalItem (itemSeverity, errorItem, type, errorPathIndex);
336+ columns[COLUMN_SUMMARY] = createNormalItem (text, errorItem, type, errorPathIndex);
337+ if (type == ResultItem::Type::message) {
338+ columns[COLUMN_CERT_LEVEL] = createNormalItem (errorItem->classification , errorItem, type, errorPathIndex);
339+ columns[COLUMN_CERT_RULE] = createNormalItem (errorItem->guideline , errorItem, type, errorPathIndex);
340+ columns[COLUMN_CWE] = createNormalItem (errorItem->cwe > 0 ? QString::number (errorItem->cwe ) : QString (), errorItem, type, errorPathIndex);
341+ columns[COLUMN_ID] = createNormalItem (errorItem->errorId , errorItem, type, errorPathIndex);
342+ columns[COLUMN_INCONCLUSIVE] = createCheckboxItem (errorItem->inconclusive , errorItem, type, errorPathIndex);
343+ columns[COLUMN_MISRA_CLASSIFICATION] = createNormalItem (errorItem->classification , errorItem, type, errorPathIndex);
344+ columns[COLUMN_MISRA_GUIDELINE] = createNormalItem (errorItem->guideline , errorItem, type, errorPathIndex);
345+ columns[COLUMN_SINCE_DATE] = createNormalItem (errorItem->sinceDate , errorItem, type, errorPathIndex);
346+ columns[COLUMN_TAGS] = createNormalItem (errorItem->tags , errorItem, type, errorPathIndex);
347+ }
351348
352349 QList<QStandardItem*> list;
353350 for (int i = 0 ; i < numberOfColumns; ++i)
354- list << columns[i];
351+ list << ( columns[i] ? columns[i] : createNormalItem ( QString (), errorItem, type, errorPathIndex)) ;
355352
356353 parent->appendRow (list);
357354
@@ -617,11 +614,6 @@ ResultItem *ResultsTree::ensureFileItem(QSharedPointer<ErrorItem> errorItem, boo
617614 return fileItem;
618615}
619616
620- void ResultsTree::setContextItem (QStandardItem* contextItem)
621- {
622- mContextItem = getItemAtCol (contextItem, COLUMN_FILE);
623- }
624-
625617void ResultsTree::contextMenuEvent (QContextMenuEvent * e)
626618{
627619 QModelIndex index = indexAt (e->pos ());
@@ -632,7 +624,7 @@ void ResultsTree::contextMenuEvent(QContextMenuEvent * e)
632624 if (mSelectionModel ->selectedRows ().count () > 1 )
633625 multipleSelection = true ;
634626
635- setContextItem (mModel ->itemFromIndex (index));
627+ mContextItem = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (index));
636628
637629 // Create a new context menu
638630 QMenu menu (this );
@@ -749,7 +741,7 @@ void ResultsTree::contextMenuEvent(QContextMenuEvent * e)
749741 menu.exec (e->globalPos ());
750742 index = indexAt (e->pos ());
751743 if (index.isValid ())
752- setContextItem (mModel ->itemFromIndex (index));
744+ mContextItem = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (index));
753745 }
754746}
755747
@@ -921,7 +913,7 @@ void ResultsTree::copy()
921913
922914 QString text;
923915 for (const QModelIndex& index : mSelectionModel ->selectedRows ()) {
924- const ResultItem *item = getItemAtCol (mModel ->itemFromIndex (index), COLUMN_FILE );
916+ const ResultItem *item = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (index));
925917 if (!item)
926918 continue ;
927919 if (item->getType () == ResultItem::Type::file)
@@ -944,7 +936,7 @@ void ResultsTree::hideResult()
944936 return ;
945937 bool hide = false ;
946938 for (QModelIndex index : mSelectionModel ->selectedRows ()) {
947- ResultItem *item = getItemAtCol (mModel ->itemFromIndex (index), COLUMN_FILE );
939+ ResultItem *item = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (index));
948940 if (item && item->getType () == ResultItem::Type::message)
949941 hide = item->hidden = true ;
950942 }
@@ -961,7 +953,7 @@ void ResultsTree::recheckSelectedFiles()
961953
962954 QStringList selectedItems;
963955 for (QModelIndex index : mSelectionModel ->selectedRows ()) {
964- const ResultItem *item = getItemAtCol (mModel ->itemFromIndex (index), COLUMN_FILE );
956+ const ResultItem *item = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (index));
965957 while (item->parent ())
966958 item = dynamic_cast <const ResultItem*>(item->parent ());
967959 const auto e = item->getErrorPathItem ();
@@ -1009,7 +1001,7 @@ void ResultsTree::suppressSelectedIds()
10091001
10101002 QSet<QString> selectedIds;
10111003 for (QModelIndex index : mSelectionModel ->selectedRows ()) {
1012- const ResultItem *item = getItemAtCol (mModel ->itemFromIndex (index), 0 );
1004+ const ResultItem *item = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (index));
10131005 if (!item || item->getType () == ResultItem::Type::file || !item->errorItem )
10141006 continue ;
10151007 selectedIds << item->errorItem ->errorId ;
@@ -1088,7 +1080,7 @@ void ResultsTree::tagSelectedItems(const QString &tag)
10881080 bool isTagged = false ;
10891081 ProjectFile *currentProject = ProjectFile::getActiveProject ();
10901082 for (QModelIndex index : mSelectionModel ->selectedRows ()) {
1091- ResultItem *item = getItemAtCol (mModel ->itemFromIndex (index), COLUMN_FILE );
1083+ ResultItem *item = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (index));
10921084 if (item && item->getType () != ResultItem::Type::file) {
10931085 if (item->getType () == ResultItem::Type::note)
10941086 item = dynamic_cast <ResultItem*>(item->parent ());
@@ -1334,7 +1326,7 @@ void ResultsTree::showInconclusiveColumn(bool show)
13341326void ResultsTree::currentChanged (const QModelIndex ¤t, const QModelIndex &previous)
13351327{
13361328 QTreeView::currentChanged (current, previous);
1337- const ResultItem *item = getItemAtCol (mModel ->itemFromIndex (current), COLUMN_FILE );
1329+ const ResultItem *item = dynamic_cast <ResultItem*> (mModel ->itemFromIndex (current));
13381330 emit treeSelectionChanged (item);
13391331}
13401332
0 commit comments