diff --git a/gui/resultstree.cpp b/gui/resultstree.cpp index 2152c46f8..1bc32ae6f 100644 --- a/gui/resultstree.cpp +++ b/gui/resultstree.cpp @@ -604,7 +604,7 @@ void ResultsTree::contextMenuEvent(QContextMenuEvent * e) this, SLOT(context(int))); } - // Add menuitems to copy full path/filename to clipboard + // Add popup menuitems if (mContextItem) { if (mApplications->getApplicationCount() > 0) { menu.addSeparator(); @@ -612,22 +612,13 @@ void ResultsTree::contextMenuEvent(QContextMenuEvent * e) //Create an action for the application QAction *recheckSelectedFiles = new QAction(tr("Recheck"), &menu); - QAction *copyfilename = new QAction(tr("Copy filename"), &menu); - QAction *copypath = new QAction(tr("Copy full path"), &menu); - QAction *copymessage = new QAction(tr("Copy message"), &menu); - QAction *copymessageid = new QAction(tr("Copy message id"), &menu); - QAction *copylinenr = new QAction(tr("Copy line nr"), &menu); + QAction *copy = new QAction(tr("Copy"), &menu); QAction *hide = new QAction(tr("Hide"), &menu); QAction *hideallid = new QAction(tr("Hide all with id"), &menu); QAction *suppress = new QAction(tr("Suppress selected id(s)"), &menu); QAction *opencontainingfolder = new QAction(tr("Open containing folder"), &menu); if (multipleSelection) { - copyfilename->setDisabled(true); - copypath->setDisabled(true); - copymessage->setDisabled(true); - copymessageid->setDisabled(true); - copylinenr->setDisabled(true); hideallid->setDisabled(true); opencontainingfolder->setDisabled(true); } @@ -638,11 +629,7 @@ void ResultsTree::contextMenuEvent(QContextMenuEvent * e) menu.addAction(recheckSelectedFiles); menu.addSeparator(); - menu.addAction(copyfilename); - menu.addAction(copypath); - menu.addAction(copymessage); - menu.addAction(copymessageid); - menu.addAction(copylinenr); + menu.addAction(copy); menu.addSeparator(); menu.addAction(hide); menu.addAction(hideallid); @@ -651,11 +638,7 @@ void ResultsTree::contextMenuEvent(QContextMenuEvent * e) menu.addAction(opencontainingfolder); connect(recheckSelectedFiles, SIGNAL(triggered()), this, SLOT(recheckSelectedFiles())); - connect(copyfilename, SIGNAL(triggered()), this, SLOT(copyFilename())); - connect(copypath, SIGNAL(triggered()), this, SLOT(copyFullPath())); - connect(copymessage, SIGNAL(triggered()), this, SLOT(copyMessage())); - connect(copymessageid, SIGNAL(triggered()), this, SLOT(copyMessageId())); - connect(copylinenr, SIGNAL(triggered()), this, SLOT(copyLineNr())); + connect(copy, SIGNAL(triggered()), this, SLOT(copy())); connect(hide, SIGNAL(triggered()), this, SLOT(hideResult())); connect(hideallid, SIGNAL(triggered()), this, SLOT(hideAllIdResult())); connect(suppress, SIGNAL(triggered()), this, SLOT(suppressSelectedIds())); @@ -858,69 +841,35 @@ QString ResultsTree::askFileDir(const QString &file) return mCheckPath; } -void ResultsTree::copyFilename() +void ResultsTree::copy() { - copyPathToClipboard(mContextItem, false); -} - -void ResultsTree::copyFullPath() -{ - copyPathToClipboard(mContextItem, true); -} - -void ResultsTree::copyMessage() -{ - if (!mContextItem) + if (!mSelectionModel) return; - // Make sure we are working with the first column - if (mContextItem->column() != 0) - mContextItem = mContextItem->parent()->child(mContextItem->row(), 0); - - QVariantMap data = mContextItem->data().toMap(); - - QString message; - if (data["inconclusive"].toBool()) { - message = tr("[Inconclusive]"); - message += " "; + QModelIndexList selectedRows = mSelectionModel->selectedRows(); + QString text; + foreach (QModelIndex index, selectedRows) { + QStandardItem *item = mModel.itemFromIndex(index); + if (!item->parent()) + continue; + if (item->parent()->parent()) + item = item->parent(); + QVariantMap data = item->data().toMap(); + if (!data.contains("id")) + continue; + QString inconclusive = data["inconclusive"].toBool() ? ",inconclusive" : ""; + text += '[' + data["file"].toString() + ':' + QString::number(data["line"].toInt()) + + "] (" + + QString::fromStdString(Severity::toString(ShowTypes::ShowTypeToSeverity((ShowTypes::ShowType)data["severity"].toInt()))) + inconclusive + + ") " + + data["message"].toString() + + " [" + + data["id"].toString() + + "]\n"; } - message += data["message"].toString(); QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(message); -} - -void ResultsTree::copyMessageId() -{ - if (!mContextItem) - return; - - // Make sure we are working with the first column - if (mContextItem->column() != 0) - mContextItem = mContextItem->parent()->child(mContextItem->row(), 0); - QVariantMap data = mContextItem->data().toMap(); - - QString messageId = data["id"].toString(); - - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(messageId); -} - -void ResultsTree::copyLineNr() -{ - if (!mContextItem) - return; - - // Make sure we are working with the first column - if (mContextItem->column() != 0) - mContextItem = mContextItem->parent()->child(mContextItem->row(), 0); - - QVariantMap data = mContextItem->data().toMap(); - - QString linenr = data["line"].toString(); - - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(linenr); + clipboard->setText(text); } void ResultsTree::hideResult() @@ -1099,12 +1048,6 @@ void ResultsTree::quickStartApplication(const QModelIndex &index) startApplication(mModel.itemFromIndex(index)); } -void ResultsTree::copyPathToClipboard(QStandardItem *target, bool fullPath) -{ - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(getFilePath(target, fullPath)); -} - QString ResultsTree::getFilePath(QStandardItem *target, bool fullPath) { if (target) { diff --git a/gui/resultstree.h b/gui/resultstree.h index bc2b52df4..d66138f5d 100644 --- a/gui/resultstree.h +++ b/gui/resultstree.h @@ -252,34 +252,9 @@ protected slots: void context(int application); /** - * @brief Slot for context menu item to copy filename to clipboard - * + * @brief Slot for context menu item to copy selection to clipboard */ - void copyFilename(); - - /** - * @brief Slot for context menu item to copy full path to clipboard - * - */ - void copyFullPath(); - - /** - * @brief Slot for context menu item to the current error message to clipboard - * - */ - void copyMessage(); - - /** - * @brief Slot for context menu item to the current error message Id to clipboard - * - */ - void copyMessageId(); - - /** - * @brief Slot for context menu item to copy the current error line nr to clipboard - * - */ - void copyLineNr(); + void copy(); /** * @brief Slot for context menu item to hide the current error message