diff --git a/gui/common.h b/gui/common.h index d0226db95..c4fd7c070 100644 --- a/gui/common.h +++ b/gui/common.h @@ -58,6 +58,8 @@ ShowTypes; #define SETTINGS_LANGUAGE "Application language" #define SETTINGS_TOOLBARS_MAIN_SHOW "Toolbars/ShowStandard" #define SETTINGS_TOOLBARS_VIEW_SHOW "Toolbars/ShowView" +#define SETTINGS_LOG_VIEW_WIDTH "Log/View width" +#define SETTINGS_LOG_VIEW_HEIGHT "Log/View height" /// @} #endif diff --git a/gui/gui.pro b/gui/gui.pro index 3e1de7f02..e4215cfe1 100644 --- a/gui/gui.pro +++ b/gui/gui.pro @@ -26,7 +26,8 @@ FORMS = main.ui \ settings.ui \ file.ui \ projectfile.ui \ - about.ui + about.ui \ + logview.ui TRANSLATIONS = cppcheck_fi.ts \ cppcheck_nl.ts \ @@ -60,7 +61,9 @@ HEADERS += mainwindow.h \ txtreport.h \ xmlreport.h \ translationhandler.h \ - csvreport.h + csvreport.h \ + logview.h + SOURCES += main.cpp \ mainwindow.cpp\ checkthread.cpp \ @@ -81,7 +84,8 @@ SOURCES += main.cpp \ txtreport.cpp \ xmlreport.cpp \ translationhandler.cpp \ - csvreport.cpp + csvreport.cpp \ + logview.cpp win32 { RC_FILE = cppcheck-gui.rc diff --git a/gui/logview.cpp b/gui/logview.cpp new file mode 100644 index 000000000..8d3b6856a --- /dev/null +++ b/gui/logview.cpp @@ -0,0 +1,56 @@ +/* + * Cppcheck - A tool for static C/C++ code analysis + * Copyright (C) 2007-2010 Daniel Marjamäki and 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 . + */ + +#include +#include "common.h" +#include "logview.h" + +LogView::LogView(QSettings *programSettings, QWidget *parent) + : mSettings(programSettings) +{ + Q_UNUSED(parent); + mUI.setupUi(this); + setWindowFlags(Qt::Tool); + + connect(mUI.mCloseButton, SIGNAL(clicked()), this, SLOT(CloseButtonClicked())); + connect(mUI.mClearButton, SIGNAL(clicked()), this, SLOT(ClearButtonClicked())); + + resize(mSettings->value(SETTINGS_LOG_VIEW_WIDTH, 400).toInt(), + mSettings->value(SETTINGS_LOG_VIEW_HEIGHT, 300).toInt()); +} + +LogView::~LogView() +{ + mSettings->setValue(SETTINGS_LOG_VIEW_WIDTH, size().width()); + mSettings->setValue(SETTINGS_LOG_VIEW_HEIGHT, size().height()); +} + +void LogView::AppendLine(const QString &line) +{ + mUI.mLogEdit->appendPlainText(line); +} + +void LogView::CloseButtonClicked() +{ + close(); +} + +void LogView::ClearButtonClicked() +{ + mUI.mLogEdit->clear(); +} diff --git a/gui/logview.h b/gui/logview.h new file mode 100644 index 000000000..d56ae2ef6 --- /dev/null +++ b/gui/logview.h @@ -0,0 +1,75 @@ +/* + * Cppcheck - A tool for static C/C++ code analysis + * Copyright (C) 2007-2010 Daniel Marjamäki and 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 . + */ + +#ifndef LOGVIEW_H +#define LOGVIEW_H + +#include +#include "ui_logview.h" + +class QSettings; + +/// @addtogroup GUI +/// @{ + +/** +* @brief A tool window that shows checking log. +* +*/ +class LogView : public QWidget +{ + Q_OBJECT +public: + LogView(QSettings *programSettings, QWidget *parent = 0); + ~LogView(); + + /** + * @brief Append new log file to view. + * @param line String to add. + * + */ + void AppendLine(const QString &line); + +protected slots: + + /** + * @brief Called when close button is clicked. + * + */ + void CloseButtonClicked(); + + /** + * @brief Called when clear button is clicked. + * + */ + void ClearButtonClicked(); + +private: + Ui::LogView mUI; + + /** + * @brief Settings + * + */ + QSettings *mSettings; + +}; + +/// @} + +#endif // LOGVIEW_H diff --git a/gui/logview.ui b/gui/logview.ui new file mode 100644 index 000000000..642e34436 --- /dev/null +++ b/gui/logview.ui @@ -0,0 +1,65 @@ + + + LogView + + + + 0 + 0 + 400 + 300 + + + + Qt::NoContextMenu + + + Checking Log + + + + + + false + + + true + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Clear + + + + + + + Close + + + + + + + + + + diff --git a/gui/main.ui b/gui/main.ui index 939106b55..72f62b145 100644 --- a/gui/main.ui +++ b/gui/main.ui @@ -100,6 +100,7 @@ + @@ -365,6 +366,14 @@ &New Project File... + + + &Log View + + + Log View + + diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 159327950..67821c720 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -33,6 +33,7 @@ #include "projectfile.h" #include "project.h" #include "report.h" +#include "logview.h" #include "../lib/filelister.h" // HTMLHelp is only available in Windows @@ -45,12 +46,14 @@ MainWindow::MainWindow() : mSettings(new QSettings("Cppcheck", "Cppcheck-GUI", this)), mApplications(new ApplicationList(this)), mTranslation(new TranslationHandler(this)), - mLanguages(new QActionGroup(this)) + mLanguages(new QActionGroup(this)), + mLogView(NULL) { mUI.setupUi(this); mUI.mResults->Initialize(mSettings, mApplications); mThread = new ThreadHandler(this); + mLogView = new LogView(mSettings); connect(mUI.mActionQuit, SIGNAL(triggered()), this, SLOT(close())); connect(mUI.mActionCheckFiles, SIGNAL(triggered()), this, SLOT(CheckFiles())); @@ -65,6 +68,7 @@ MainWindow::MainWindow() : connect(mUI.mActionUncheckAll, SIGNAL(triggered()), this, SLOT(UncheckAll())); connect(mUI.mActionCollapseAll, SIGNAL(triggered()), mUI.mResults, SLOT(CollapseAllResults())); connect(mUI.mActionExpandAll, SIGNAL(triggered()), mUI.mResults, SLOT(ExpandAllResults())); + connect(mUI.mActionViewLog, SIGNAL(triggered()), this, SLOT(ShowLogView())); connect(mUI.mActionRecheck, SIGNAL(triggered()), this, SLOT(ReCheck())); @@ -114,6 +118,7 @@ MainWindow::MainWindow() : MainWindow::~MainWindow() { + delete mLogView; } void MainWindow::CreateLanguageMenuItems() @@ -731,3 +736,21 @@ void MainWindow::NewProjectFile() prj.Edit(); } } + +void MainWindow::ShowLogView() +{ + if (mLogView == NULL) + mLogView = new LogView(mSettings); + + mLogView->show(); + if (!mLogView->isActiveWindow()) + mLogView->activateWindow(); +} + +void MainWindow::Log(const QString &logline) +{ + if (mLogView) + { + mLogView->AppendLine(logline); + } +} diff --git a/gui/mainwindow.h b/gui/mainwindow.h index 1c8cae8b2..f37cc9b67 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -32,6 +32,7 @@ #include "ui_main.h" class ThreadHandler; +class LogView; /// @addtogroup GUI /// @{ @@ -143,6 +144,12 @@ public slots: */ void OpenProjectFile(); + /** + * @brief Slot for showing the log view. + * + */ + void ShowLogView(); + protected slots: /** @@ -190,6 +197,12 @@ protected slots: */ void OpenHelpContents(); + /** + * @brief Add new line to log. + * + */ + void Log(const QString &logline); + protected: /** @@ -325,6 +338,11 @@ protected: */ QString mCurrentDirectory; + /** + * @brief Log view.. + */ + LogView *mLogView; + }; /// @} #endif // MAINWINDOW_H diff --git a/gui/threadhandler.cpp b/gui/threadhandler.cpp index 7ea918437..9b1bca96f 100644 --- a/gui/threadhandler.cpp +++ b/gui/threadhandler.cpp @@ -144,6 +144,8 @@ void ThreadHandler::Initialize(ResultsView *view) connect(&mResults, SIGNAL(Error(const ErrorItem &)), view, SLOT(Error(const ErrorItem &))); + connect(&mResults, SIGNAL(Log(const QString &)), + parent(), SLOT(Log(const QString &))); } void ThreadHandler::LoadSettings(QSettings &settings) diff --git a/gui/threadresult.cpp b/gui/threadresult.cpp index 9a48be25c..7e933d64f 100644 --- a/gui/threadresult.cpp +++ b/gui/threadresult.cpp @@ -33,7 +33,7 @@ ThreadResult::~ThreadResult() void ThreadResult::reportOut(const std::string &outmsg) { - Q_UNUSED(outmsg); + emit Log(QString::fromStdString(outmsg)); } void ThreadResult::FileChecked(const QString &file) diff --git a/gui/threadresult.h b/gui/threadresult.h index 7e6b1a618..80133a90e 100644 --- a/gui/threadresult.h +++ b/gui/threadresult.h @@ -93,6 +93,13 @@ signals: */ void Error(const ErrorItem &item); + /** + * @brief Signal of a new log message + * + * @param logline Log line + */ + void Log(const QString &logline); + protected: /**