Skip to content

Commit 77f3e30

Browse files
committed
refactor
1 parent fabb13c commit 77f3e30

File tree

2 files changed

+51
-57
lines changed

2 files changed

+51
-57
lines changed

gui/resultstree.cpp

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,6 @@ static constexpr int COLUMN_SINCE_DATE = 10;
8080
static constexpr int COLUMN_TAGS = 11;
8181
static 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-
9183
static 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-
625617
void 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)
13341326
void ResultsTree::currentChanged(const QModelIndex &current, 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

gui/resultstree.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -384,16 +384,16 @@ protected slots:
384384
* @param errorItem Error item
385385
* @param hide Should this be hidden (true) or shown (false)
386386
* @param icon Should a default backtrace item icon be added
387-
* @param childOfMessage Is this a child element of a message?
387+
* @param type type of items to create file/message/note
388388
* @param errorPathIndex errorPathIndex
389389
* @return newly created QStandardItem *
390390
*/
391391
ResultItem *addBacktraceFiles(ResultItem *parent,
392392
QSharedPointer<ErrorItem> errorItem,
393393
bool hide,
394394
const QString &icon,
395-
bool childOfMessage,
396-
int errorPathIndex = 0);
395+
ResultItem::Type type,
396+
int errorPathIndex);
397397

398398
/**
399399
* @brief Convert Severity to translated string for GUI.
@@ -420,9 +420,12 @@ protected slots:
420420
*
421421
* Normal item has left alignment and text set also as tooltip.
422422
* @param text text for the item
423+
* @param errorItem errorItem pointer
424+
* @param type (file/message)
425+
* @param errorPathIndex error path index
423426
* @return new ResultItem
424427
*/
425-
static ResultItem *createNormalItem(const QString &text);
428+
static ResultItem *createNormalItem(const QString &text, QSharedPointer<ErrorItem> errorItem, ResultItem::Type type, int errorPathIndex);
426429

427430
/**
428431
* @brief Create filename item.
@@ -441,18 +444,24 @@ protected slots:
441444
*
442445
* Checkbox item can be checked or unchecked.
443446
* @param checked checked
447+
* @param errorItem errorItem pointer
448+
* @param type (file/message)
449+
* @param errorPathIndex error path index
444450
* @return new ResultItem
445451
*/
446-
static ResultItem *createCheckboxItem(bool checked);
452+
static ResultItem *createCheckboxItem(bool checked, QSharedPointer<ErrorItem> errorItem, ResultItem::Type type, int errorPathIndex);
447453

448454
/**
449455
* @brief Create new line number item.
450456
*
451457
* Line number item has right align.
452458
* @param linenumber line number
459+
* @param errorItem errorItem pointer
460+
* @param type (file/message)
461+
* @param errorPathIndex error path index
453462
* @return new ResultItem
454463
*/
455-
static ResultItem *createLineNumberItem(int linenumber);
464+
static ResultItem *createLineNumberItem(int linenumber, QSharedPointer<ErrorItem> errorItem, ResultItem::Type type, int errorPathIndex);
456465

457466
/**
458467
* @brief Finds a file item
@@ -462,13 +471,6 @@ protected slots:
462471
*/
463472
ResultItem *findFileItem(const QString &name) const;
464473

465-
/**
466-
* @brief Set context item. If a "file" item is not provided then lookup the
467-
* corresponding "file" item because that contains the needed information.
468-
* @param contextItem the standard item
469-
*/
470-
void setContextItem(QStandardItem* contextItem);
471-
472474
/**
473475
* @brief Ensures there's a item in the model for the specified file
474476
*

0 commit comments

Comments
 (0)