From 2816ccbd37ad3e8b91e580312fabbd50da928b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com> Date: Mon, 17 May 2010 16:18:34 +0200 Subject: [PATCH] Don't allow opening the same generic project multiple times Quick fix by copying code also found in Qt4 and QML project managers. Would be better to have some common solution... Task-number: QTCREATORBUG-1383 --- .../genericprojectmanager.cpp | 20 ++++++++++++++----- .../genericprojectmanager.h | 2 +- .../qt4projectmanager/qt4projectmanager.cpp | 2 +- .../qt4projectmanager/qt4projectmanager.h | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.cpp b/src/plugins/genericprojectmanager/genericprojectmanager.cpp index 0ad966a7306..5f5737bf65e 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.cpp +++ b/src/plugins/genericprojectmanager/genericprojectmanager.cpp @@ -32,8 +32,11 @@ #include "genericproject.h" #include <coreplugin/icore.h> +#include <coreplugin/messagemanager.h> #include <coreplugin/uniqueidmanager.h> +#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/session.h> #include <QtDebug> @@ -60,14 +63,21 @@ QString Manager::mimeType() const ProjectExplorer::Project *Manager::openProject(const QString &fileName) { - QFileInfo fileInfo(fileName); + if (!QFileInfo(fileName).isFile()) + return 0; - if (fileInfo.isFile()) { - GenericProject *project = new GenericProject(this, fileName); - return project; + ProjectExplorer::ProjectExplorerPlugin *projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); + foreach (ProjectExplorer::Project *pi, projectExplorer->session()->projects()) { + if (fileName == pi->file()->fileName()) { + Core::MessageManager *messageManager = Core::ICore::instance()->messageManager(); + messageManager->printToOutputPanePopup(tr("Failed opening project '%1': Project already open") + .arg(QDir::toNativeSeparators(fileName))); + return 0; + } } - return 0; + GenericProject *project = new GenericProject(this, fileName); + return project; } void Manager::registerProject(GenericProject *project) diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.h b/src/plugins/genericprojectmanager/genericprojectmanager.h index 6e213afc77d..1b99f008d17 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.h +++ b/src/plugins/genericprojectmanager/genericprojectmanager.h @@ -37,7 +37,7 @@ namespace Internal { class GenericProject; -class Manager: public ProjectExplorer::IProjectManager +class Manager : public ProjectExplorer::IProjectManager { Q_OBJECT diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp index 1ec86aa4eac..d3342b30e91 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp @@ -181,7 +181,7 @@ QString Qt4Manager::mimeType() const return QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE); } -ProjectExplorer::Project* Qt4Manager::openProject(const QString &fileName) +ProjectExplorer::Project *Qt4Manager::openProject(const QString &fileName) { Core::MessageManager *messageManager = Core::ICore::instance()->messageManager(); diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.h b/src/plugins/qt4projectmanager/qt4projectmanager.h index 199c4b98ee2..2235a17f536 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.h +++ b/src/plugins/qt4projectmanager/qt4projectmanager.h @@ -79,7 +79,7 @@ public: int projectLanguage() const; virtual QString mimeType() const; - ProjectExplorer::Project* openProject(const QString &fileName); + ProjectExplorer::Project *openProject(const QString &fileName); // Context information used in the slot implementations ProjectExplorer::Node *contextNode() const; -- GitLab