1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
|
/* -*- C++ -*-
* Cppcheck - A tool for static C/C++ code analysis
* Copyright (C) 2007-2025 Cppcheck team.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef RESULTSVIEW_H
#define RESULTSVIEW_H
#include "report.h"
#include "showtypes.h"
#include <cstdint>
#include <QObject>
#include <QString>
#include <QStringList>
#include <QWidget>
class ErrorItem;
class Settings;
class ApplicationList;
class ThreadHandler;
class QModelIndex;
class QPrinter;
class QSettings;
class CheckStatistics;
class QPoint;
enum class ReportType : std::uint8_t;
namespace Ui {
class ResultsView;
}
/// @addtogroup GUI
/// @{
/**
* @brief Widget to show cppcheck progressbar and result
*
*/
class ResultsView : public QWidget {
Q_OBJECT
public:
explicit ResultsView(QWidget * parent = nullptr);
void initialize(QSettings *settings, ApplicationList *list, ThreadHandler *checkThreadHandler);
ResultsView(const ResultsView &) = delete;
~ResultsView() override;
ResultsView &operator=(const ResultsView &) = delete;
/**
* @brief Clear results and statistics and reset progressinfo.
* @param results Remove all the results from view?
*/
void clear(bool results);
/**
* @brief Remove a file from the results.
*/
void clear(const QString &filename);
/**
* @brief Remove a recheck file from the results.
*/
void clearRecheckFile(const QString &filename);
/**
* @brief Write statistics in file
*
* @param filename Filename to save statistics to
*/
void saveStatistics(const QString &filename) const;
/**
* @brief Save results to a file
*
* @param filename Filename to save results to
* @param type Type of the report.
* @param productName Custom product name
*/
void save(const QString &filename, Report::Type type, const QString& productName) const;
/**
* @brief Update results from old report (tag, sinceDate)
*/
void updateFromOldReport(const QString &filename) const;
/**
* @brief Update tree settings
*
* @param showFullPath Show full path of files in the tree
* @param saveFullPath Save full path of files in reports
* @param saveAllErrors Save all visible errors
* @param showNoErrorsMessage Show "no errors"?
* @param showErrorId Show error id?
* @param showInconclusive Show inconclusive?
*/
void updateSettings(bool showFullPath,
bool saveFullPath,
bool saveAllErrors,
bool showNoErrorsMessage,
bool showErrorId,
bool showInconclusive);
/**
* @brief Update Code Editor Style
*
* Function will read updated Code Editor styling from
* stored program settings.
*
* @param settings Pointer to QSettings Object
*/
void updateStyleSetting(QSettings *settings);
/**
* @brief Set the directory we are checking
*
* This is used to split error file path to relative if necessary
* @param dir Directory we are checking
*/
void setCheckDirectory(const QString &dir);
/**
* @brief Get the directory we are checking
*
* @return Directory containing source files
*/
QString getCheckDirectory() const;
/**
* Set settings used in checking
*/
void setCheckSettings(const Settings& settings);
/**
* @brief Inform the view that checking has started
*
* @param count Count of files to be checked.
*/
void checkingStarted(int count);
/**
* @brief Inform the view that checking finished.
*
*/
void checkingFinished();
/**
* @brief Do we have visible results to show?
*
* @return true if there is at least one warning/error to show.
*/
bool hasVisibleResults() const;
/**
* @brief Do we have results from check?
*
* @return true if there is at least one warning/error, hidden or visible.
*/
bool hasResults() const;
/**
* @brief Save View's settings
*
* @param settings program settings.
*/
void saveSettings(QSettings *settings);
/**
* @brief Translate this view
*
*/
void translate();
/**
* @brief This function should be called when analysis is stopped
*/
void stopAnalysis();
/**
* @brief Are there successful results?
* @return true if analysis finished without critical errors etc
*/
bool isSuccess() const;
void disableProgressbar();
/**
* @brief Read errors from report XML file.
* @param filename Report file to read.
*
*/
void readErrorsXml(const QString &filename);
/**
* @brief Return checking statistics.
* @return Pointer to checking statistics.
*/
const CheckStatistics *getStatistics() const {
return mStatistics;
}
/**
* @brief Return Showtypes.
* @return Pointer to Showtypes.
*/
const ShowTypes & getShowTypes() const;
void setReportType(ReportType reportType);
signals:
/**
* @brief Signal to be emitted when we have results
*
*/
void gotResults();
/**
* @brief Signal that results have been hidden or shown
*
* @param hidden true if there are some hidden results, or false if there are not
*/
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void resultsHidden(bool hidden);
/**
* @brief Signal to perform recheck of selected files
*
* @param selectedFilesList list of selected files
*/
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void checkSelected(QStringList selectedFilesList);
/** Suppress Ids */
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void suppressIds(QStringList ids);
/**
* @brief Show/hide certain type of errors
* Refreshes the tree.
*
* @param type Type of error to show/hide
* @param show Should specified errors be shown (true) or hidden (false)
*/
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void showResults(ShowTypes::ShowType type, bool show);
/**
* @brief Show/hide cppcheck errors.
* Refreshes the tree.
*
* @param show Should specified errors be shown (true) or hidden (false)
*/
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void showCppcheckResults(bool show);
/**
* @brief Show/hide clang-tidy/clang-analyzer errors.
* Refreshes the tree.
*
* @param show Should specified errors be shown (true) or hidden (false)
*/
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void showClangResults(bool show);
/**
* @brief Collapse all results in the result list.
*/
void collapseAllResults();
/**
* @brief Expand all results in the result list.
*/
void expandAllResults();
/**
* @brief Show hidden results in the result list.
*/
void showHiddenResults();
public slots:
/**
* @brief Slot for updating the checking progress
*
* @param value Current progress value
* @param description Description to accompany the progress
*/
void progress(int value, const QString& description);
/**
* @brief Slot for new error to be displayed
*
* @param item Error data
*/
void error(const ErrorItem &item);
/**
* @brief Filters the results in the result list.
*/
void filterResults(const QString& filter);
/**
* @brief Update detailed message when selected item is changed.
*
* @param index Position of new selected item.
*/
void updateDetails(const QModelIndex &index);
/**
* @brief Slot opening a print dialog to print the current report
*/
void print();
/**
* @brief Slot printing the current report to the printer.
* @param printer The printer used for printing the report.
*/
void print(QPrinter* printer) const;
/**
* @brief Slot opening a print preview dialog
*/
void printPreview();
/**
* \brief Log message
*/
void log(const QString &str);
/**
* \brief debug message
*/
void debugError(const ErrorItem &item);
/**
* \brief Clear log messages
*/
void logClear();
/**
* \brief Copy selected log message entry
*/
void logCopyEntry();
/**
* \brief Copy all log messages
*/
void logCopyComplete();
private:
/**
* If provided ErrorItem is a critical error then display warning message
* in the resultsview
*/
void handleCriticalError(const ErrorItem& item);
/**
* @brief Should we show a "No errors found dialog" every time no errors were found?
*/
bool mShowNoErrorsMessage = true;
Ui::ResultsView *mUI;
CheckStatistics *mStatistics;
Settings* mCheckSettings = nullptr;
/**
* Set to true when checking finish successfully. Set to false whenever analysis starts.
*/
bool mSuccess = false;
/** Critical error ids */
QString mCriticalErrors;
private slots:
/**
* @brief Custom context menu for Analysis Log
* @param pos Mouse click position
*/
void on_mListLog_customContextMenuRequested(const QPoint &pos);
};
/// @}
#endif // RESULTSVIEW_H
|