diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index a43f32039..c85aa7da2 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -48,7 +48,8 @@ MainWindow::MainWindow() : mTranslation(new TranslationHandler(this)), mLanguages(new QActionGroup(this)), mLogView(NULL), - mExiting(false) + mExiting(false), + mProject(NULL) { mUI.setupUi(this); mUI.mResults->Initialize(mSettings, mApplications); @@ -120,6 +121,7 @@ MainWindow::MainWindow() : MainWindow::~MainWindow() { delete mLogView; + delete mProject; } void MainWindow::CreateLanguageMenuItems() @@ -297,41 +299,45 @@ void MainWindow::CheckDirectory() Settings MainWindow::GetCppcheckSettings() { - ProjectFile pfile; + ProjectFile *pfile = NULL; Settings result; + bool projectRead = true; - if (!mCurrentDirectory.isEmpty()) + if (!mCurrentDirectory.isEmpty() && !mProject) { // Format project filename (directory name + .cppcheck) and load // the project file if it is found. QStringList parts = mCurrentDirectory.split("/"); QString projfile = mCurrentDirectory + "/" + parts[parts.count() - 1] + ".cppcheck"; - bool projectRead = false; if (QFile::exists(projfile)) { qDebug() << "Reading project file " << projfile; - projectRead = pfile.Read(projfile); + projectRead = pfile->Read(projfile); } + } + else if (mProject) + { + pfile = mProject->GetProjectFile(); + } - if (projectRead) + if (projectRead) + { + QStringList dirs = pfile->GetIncludeDirs(); + QString dir; + foreach(dir, dirs) { - QStringList dirs = pfile.GetIncludeDirs(); - QString dir; - foreach(dir, dirs) - { - QString incdir; - if (!QDir::isAbsolutePath(dir)) - incdir = mCurrentDirectory + "/"; - incdir += dir; - incdir = QDir::cleanPath(incdir); + QString incdir; + if (!QDir::isAbsolutePath(dir)) + incdir = mCurrentDirectory + "/"; + incdir += dir; + incdir = QDir::cleanPath(incdir); - // include paths must end with '/' - if (!incdir.endsWith("/")) - incdir += "/"; - result._includePaths.push_back(incdir.toStdString()); - } + // include paths must end with '/' + if (!incdir.endsWith("/")) + incdir += "/"; + result._includePaths.push_back(incdir.toStdString()); - QStringList defines = pfile.GetDefines(); + QStringList defines = pfile->GetDefines(); QString define; foreach(define, defines) { @@ -673,6 +679,9 @@ void MainWindow::OpenHtmlHelpContents() void MainWindow::OpenProjectFile() { + if (mProject != NULL) + delete mProject; + const QString filter = tr("Project files (*.cppcheck);;All files(*.*)"); QString filepath = QFileDialog::getOpenFileName(this, tr("Select Project File"), @@ -681,9 +690,11 @@ void MainWindow::OpenProjectFile() if (!filepath.isEmpty()) { - Project prj(filepath, this); - if (prj.Open()) - prj.Edit(); + mProject = new Project(filepath, this); + mProject->Open(); + QStringList paths = mProject->GetProjectFile()->GetCheckPaths(); + if (!paths.isEmpty()) + DoCheckFiles(paths); } } diff --git a/gui/mainwindow.h b/gui/mainwindow.h index dd1c939f5..26f5c0d64 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -31,8 +31,10 @@ #include "translationhandler.h" #include "settings.h" #include "ui_main.h" + class ThreadHandler; class LogView; +class Project; /// @addtogroup GUI /// @{ @@ -139,7 +141,7 @@ public slots: void NewProjectFile(); /** - * @brief Slot to edit existing project file. + * @brief Slot to open project file and start checking contained paths. * */ void OpenProjectFile(); @@ -323,10 +325,15 @@ protected: QString mCurrentDirectory; /** - * @brief Log view.. + * @brief Log view. */ LogView *mLogView; + /** + * @brief Project (file). + */ + Project *mProject; + private: /** diff --git a/gui/project.h b/gui/project.h index 146375d88..673963c3a 100644 --- a/gui/project.h +++ b/gui/project.h @@ -62,6 +62,15 @@ public: */ void Create(); + /** + * @brief Return current project file. + * @return project file. + */ + ProjectFile * GetProjectFile() const + { + return mPFile; + } + private: QString mFilename;