summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/bookmarks/bookmarkmanager.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.cpp5
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.h1
-rw-r--r--src/plugins/projectexplorer/buildparserinterface.h2
-rw-r--r--src/plugins/projectexplorer/dependenciesdialog.cpp245
-rw-r--r--src/plugins/projectexplorer/dependenciesdialog.ui84
-rw-r--r--src/plugins/projectexplorer/dependenciespanel.cpp217
-rw-r--r--src/plugins/projectexplorer/dependenciespanel.h (renamed from src/plugins/projectexplorer/dependenciesdialog.h)38
-rw-r--r--src/plugins/projectexplorer/dependenciespanel.ui44
-rw-r--r--src/plugins/projectexplorer/editorsettingspropertiespage.h1
-rw-r--r--src/plugins/projectexplorer/iprojectproperties.h4
-rw-r--r--src/plugins/projectexplorer/project.cpp20
-rw-r--r--src/plugins/projectexplorer/project.h43
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp24
-rw-r--r--src/plugins/projectexplorer/projectexplorer.h2
-rw-r--r--src/plugins/projectexplorer/projectexplorer.pro6
-rw-r--r--src/plugins/projectexplorer/session.cpp65
-rw-r--r--src/plugins/projectexplorer/session.h13
-rw-r--r--src/plugins/qt4projectmanager/qt4project.cpp11
-rw-r--r--src/plugins/qt4projectmanager/qt4projectmanager.cpp7
20 files changed, 375 insertions, 459 deletions
diff --git a/src/plugins/bookmarks/bookmarkmanager.cpp b/src/plugins/bookmarks/bookmarkmanager.cpp
index 735afc3798..86b5d889db 100644
--- a/src/plugins/bookmarks/bookmarkmanager.cpp
+++ b/src/plugins/bookmarks/bookmarkmanager.cpp
@@ -563,7 +563,7 @@ TextEditor::ITextEditor *BookmarkManager::currentTextEditor() const
}
/* Returns the current session. */
-SessionManager* BookmarkManager::sessionManager() const
+SessionManager *BookmarkManager::sessionManager() const
{
ExtensionSystem::PluginManager *pm = m_core->pluginManager();
ProjectExplorerPlugin *pe = pm->getObject<ProjectExplorerPlugin>();
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index 0f5029c8ea..effe432e36 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -215,11 +215,6 @@ ProjectExplorer::IProjectManager *CMakeProject::projectManager() const
return m_manager;
}
-QList<Core::IFile *> CMakeProject::dependencies()
-{
- return QList<Core::IFile *>();
-}
-
QList<ProjectExplorer::Project *> CMakeProject::dependsOn()
{
return QList<Project *>();
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h
index cdabdf1d08..a71ca7c8b0 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.h
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.h
@@ -73,7 +73,6 @@ public:
virtual Core::IFile *file() const;
virtual ProjectExplorer::IProjectManager *projectManager() const;
- virtual QList<Core::IFile *> dependencies(); //NBS TODO remove
virtual QList<ProjectExplorer::Project *> dependsOn(); //NBS TODO implement dependsOn
virtual bool isApplication() const;
diff --git a/src/plugins/projectexplorer/buildparserinterface.h b/src/plugins/projectexplorer/buildparserinterface.h
index 6dba4dfec0..2857926e18 100644
--- a/src/plugins/projectexplorer/buildparserinterface.h
+++ b/src/plugins/projectexplorer/buildparserinterface.h
@@ -66,7 +66,7 @@ class PROJECTEXPLORER_EXPORT IBuildParserFactory
Q_OBJECT
public:
- IBuildParserFactory() {};
+ IBuildParserFactory() {}
virtual ~IBuildParserFactory();
virtual bool canCreate(const QString & name) const = 0;
virtual BuildParserInterface * create(const QString & name) const = 0;
diff --git a/src/plugins/projectexplorer/dependenciesdialog.cpp b/src/plugins/projectexplorer/dependenciesdialog.cpp
deleted file mode 100644
index 9c78de543a..0000000000
--- a/src/plugins/projectexplorer/dependenciesdialog.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/***************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-**
-** Non-Open Source Usage
-**
-** Licensees may use this file in accordance with the Qt Beta Version
-** License Agreement, Agreement version 2.2 provided with the Software or,
-** alternatively, in accordance with the terms contained in a written
-** agreement between you and Nokia.
-**
-** GNU General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the packaging
-** of this file. Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-**
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt GPL Exception
-** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
-**
-***************************************************************************/
-
-#include "dependenciesdialog.h"
-#include "project.h"
-#include "session.h"
-
-#include <QtCore/QVector>
-#include <QtCore/QDebug>
-#include <QtCore/QAbstractTableModel>
-#include <QtGui/QPushButton>
-#include <QtGui/QHeaderView>
-
-namespace ProjectExplorer {
-namespace Internal {
-
-// ------ DependencyModel
-
-class DependencyModel : public QAbstractTableModel {
-public:
- typedef ProjectExplorer::Project Project;
- typedef DependenciesDialog::ProjectList ProjectList;
-
- DependencyModel(SessionManager *sln, const ProjectList &projectList, QObject * parent = 0);
-
- virtual int rowCount(const QModelIndex&) const { return m_projects.size(); }
- virtual int columnCount(const QModelIndex&) const { return m_projects.size(); }
-
- virtual QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const;
- bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
-
- virtual Qt::ItemFlags flags ( const QModelIndex & index ) const;
-
- QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
-
- // Apply changed items
- unsigned apply(SessionManager *sln) const;
-
- void resetDependencies();
-
-private:
-
- struct Entry {
- Entry(SessionManager *sln, Project *rootProject, Project *dependentProject);
- Entry() : m_dependentProject(0), m_dependent(false), m_defaultValue(false), m_canAddDependency(false) {}
- Project* m_dependentProject;
- bool m_dependent;
- bool m_defaultValue;
- bool m_canAddDependency;
- };
-
- // column
- typedef QVector<Entry> ProjectDependencies;
- typedef QList<ProjectDependencies> Projects;
- Projects m_projects;
- ProjectList m_projectList;
-};
-
-DependencyModel::Entry::Entry(SessionManager *sln,
- Project *rootProject,
- Project *dependentProject) :
- m_dependentProject(dependentProject),
- m_dependent(sln->hasDependency(rootProject, dependentProject)),
- m_defaultValue(m_dependent),
- m_canAddDependency(sln->canAddDependency(rootProject, dependentProject))
-{
-}
-
-DependencyModel::DependencyModel(SessionManager *sln,
- const ProjectList &projectList,
- QObject * parent) :
- QAbstractTableModel(parent),
- m_projectList(projectList)
-{
- const int count = projectList.size();
- for (int p = 0; p < count; p++) {
- Project *rootProject = projectList.at(p);
- ProjectDependencies dependencies;
- dependencies.reserve(count);
- for (int d = 0; d < count ; d++)
- dependencies.push_back(p == d ? Entry() : Entry(sln, rootProject, projectList.at(d)));
-
- m_projects += dependencies;
- }
-}
-
-QVariant DependencyModel::data ( const QModelIndex & index, int role ) const
-{
- static const QVariant empty = QVariant(QString());
- // TO DO: find a checked icon
- static const QVariant checked = QVariant(QString(QLatin1Char('x')));
-
- const int p = index.column();
- const int d = index.row();
- switch (role) {
- case Qt::EditRole:
- return QVariant(m_projects[p][d].m_dependent);
- case Qt::DisplayRole:
- return m_projects[p][d].m_dependent ? checked : empty;
- default:
- break;
- }
- return QVariant();
-}
-
-bool DependencyModel::setData ( const QModelIndex & index, const QVariant & value, int role)
-{
- switch (role) {
- case Qt::EditRole: {
- const int p = index.column();
- const int d = index.row();
- if (d == p)
- return false;
- Entry &e(m_projects[p][d]);
- e.m_dependent = value.toBool();
- emit dataChanged(index, index);
- }
- return true;
- default:
- break;
- }
- return false;
-}
-
-Qt::ItemFlags DependencyModel::flags ( const QModelIndex & index ) const
-{
- const int p = index.column();
- const int d = index.row();
-
- if (d == p)
- return 0;
-
- const Entry &e(m_projects[p][d]);
- Qt::ItemFlags rc = Qt::ItemIsEnabled|Qt::ItemIsUserCheckable | Qt::ItemIsSelectable;
- if (e.m_canAddDependency)
- rc |= Qt::ItemIsEditable;
- return rc;
-}
-
-QVariant DependencyModel::headerData ( int section, Qt::Orientation , int role ) const
-{
- switch (role) {
- case Qt::DisplayRole:
- return QVariant(m_projectList.at(section)->name());
- default:
- break;
- }
- return QVariant();
-}
-
-void DependencyModel::resetDependencies()
-{
- if (const int count = m_projectList.size()) {
- for (int p = 0; p < count; p++)
- for (int d = 0; d < count; d++)
- m_projects[p][d].m_dependent = false;
- reset();
- }
-}
-
-unsigned DependencyModel::apply(SessionManager *sln) const
-{
- unsigned rc = 0;
- const int count = m_projectList.size();
- for (int p = 0; p < count; p++) {
- Project *rootProject = m_projectList.at(p);
- for (int d = 0; d < count; d++) {
- if (d != p) {
- const Entry &e(m_projects[p][d]);
- if (e.m_dependent != e. m_defaultValue) {
- rc++;
- if (e.m_dependent) {
- sln->addDependency(rootProject, e.m_dependentProject);
- } else {
- sln->removeDependency(rootProject, e.m_dependentProject);
- }
- }
- }
- }
- }
- return rc;
-}
-
-// ------ DependenciesDialog
-DependenciesDialog::DependenciesDialog(QWidget *parent, SessionManager *sln) :
- QDialog(parent),
- m_sln(sln),
- m_projectList(m_sln->projects()),
- m_model(new DependencyModel(sln, m_projectList))
-{
- m_ui.setupUi(this);
- m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
- QPushButton *resetButton = m_ui.buttonBox->addButton (QDialogButtonBox::Reset);
- connect(resetButton, SIGNAL(clicked()), this, SLOT(reset()));
-
- m_ui.dependencyTable->setModel(m_model);
-}
-
-void DependenciesDialog::accept()
-{
- m_model->apply(m_sln);
- QDialog::accept();
-}
-
-void DependenciesDialog::reset()
-{
- m_model->resetDependencies();
-}
-
-DependenciesDialog::~DependenciesDialog()
-{
-}
-
-}
-}
diff --git a/src/plugins/projectexplorer/dependenciesdialog.ui b/src/plugins/projectexplorer/dependenciesdialog.ui
deleted file mode 100644
index 31a70dae98..0000000000
--- a/src/plugins/projectexplorer/dependenciesdialog.ui
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ProjectExplorer::Internal::DependenciesDialog</class>
- <widget class="QDialog" name="ProjectExplorer::Internal::DependenciesDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>492</width>
- <height>435</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Project Dependencies</string>
- </property>
- <layout class="QVBoxLayout">
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="margin">
- <number>9</number>
- </property>
- <item>
- <widget class="QTableView" name="dependencyTable">
- <property name="selectionMode">
- <enum>QAbstractItemView::SingleSelection</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>ProjectExplorer::Internal::DependenciesDialog</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>142</x>
- <y>285</y>
- </hint>
- <hint type="destinationlabel">
- <x>142</x>
- <y>155</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>ProjectExplorer::Internal::DependenciesDialog</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>142</x>
- <y>285</y>
- </hint>
- <hint type="destinationlabel">
- <x>142</x>
- <y>155</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp
new file mode 100644
index 0000000000..bc83f7408a
--- /dev/null
+++ b/src/plugins/projectexplorer/dependenciespanel.cpp
@@ -0,0 +1,217 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+**
+** Non-Open Source Usage
+**
+** Licensees may use this file in accordance with the Qt Beta Version
+** License Agreement, Agreement version 2.2 provided with the Software or,
+** alternatively, in accordance with the terms contained in a written
+** agreement between you and Nokia.
+**
+** GNU General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the packaging
+** of this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+**
+** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt GPL Exception
+** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+
+#include "dependenciespanel.h"
+#include "project.h"
+#include "session.h"
+
+#include <coreplugin/fileiconprovider.h>
+
+#include <QtCore/QVector>
+#include <QtCore/QDebug>
+#include <QtCore/QAbstractListModel>
+#include <QtGui/QHeaderView>
+#include <QtGui/QMessageBox>
+#include <QtGui/QPushButton>
+
+namespace ProjectExplorer {
+namespace Internal {
+
+///
+/// DependenciesModel
+///
+
+class DependenciesModel : public QAbstractListModel
+{
+public:
+ DependenciesModel(SessionManager *session, Project *project, QObject *parent = 0);
+
+ int rowCount(const QModelIndex &index) const;
+ int columnCount(const QModelIndex &index) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ Qt::ItemFlags flags(const QModelIndex &index) const;
+
+private:
+ SessionManager *m_session;
+ Project *m_project;
+ QList<Project *> m_projects;
+};
+
+DependenciesModel::DependenciesModel(SessionManager *session,
+ Project *project,
+ QObject *parent)
+ : QAbstractListModel(parent)
+ , m_session(session)
+ , m_project(project)
+ , m_projects(session->projects())
+{
+ // We can't select ourselves as a dependency
+ m_projects.removeAll(m_project);
+}
+
+int DependenciesModel::rowCount(const QModelIndex &index) const
+{
+ return index.isValid() ? 0 : m_projects.size();
+}
+
+int DependenciesModel::columnCount(const QModelIndex &index) const
+{
+ return index.isValid() ? 0 : 1;
+}
+
+QVariant DependenciesModel::data(const QModelIndex &index, int role) const
+{
+ const Project *p = m_projects.at(index.row());
+
+ switch (role) {
+ case Qt::DisplayRole:
+ return p->name();
+ case Qt::CheckStateRole:
+ return m_session->hasDependency(m_project, p) ? Qt::Checked : Qt::Unchecked;
+ case Qt::DecorationRole:
+ return Core::FileIconProvider::instance()->icon(QFileInfo(p->file()->fileName()));
+ default:
+ return QVariant();
+ }
+}
+
+bool DependenciesModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+ qDebug() << index << value << role << value.toBool();
+
+ if (role == Qt::CheckStateRole) {
+ const Project *p = m_projects.at(index.row());
+ const Qt::CheckState c = static_cast<Qt::CheckState>(value.toInt());
+
+ if (c == Qt::Checked) {
+ if (m_session->addDependency(m_project, p)) {
+ emit dataChanged(index, index);
+ return true;
+ } else {
+ QMessageBox::warning(0, tr("Unable to add dependency"),
+ tr("This would create a circular dependency."));
+ }
+ } else if (c == Qt::Unchecked) {
+ if (m_session->hasDependency(m_project, p)) {
+ m_session->removeDependency(m_project, p);
+ emit dataChanged(index, index);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+Qt::ItemFlags DependenciesModel::flags(const QModelIndex &index) const
+{
+ Qt::ItemFlags rc = QAbstractListModel::flags(index);
+ if (index.column() == 0)
+ rc |= Qt::ItemIsUserCheckable | Qt::ItemIsEditable;
+ return rc;
+}
+
+///
+/// DependenciesWidget
+///
+
+class DependenciesWidget : public QWidget
+{
+public:
+ DependenciesWidget(SessionManager *session, Project *project,
+ QWidget *parent = 0);
+
+private:
+ Ui::DependenciesWidget m_ui;
+ SessionManager *m_session;
+ DependenciesModel *m_model;
+};
+
+DependenciesWidget::DependenciesWidget(SessionManager *session,
+ Project *project,
+ QWidget *parent)
+ : QWidget(parent)
+ , m_session(session)
+ , m_model(new DependenciesModel(session, project, this))
+{
+ m_ui.setupUi(this);
+ m_ui.dependenciesView->setModel(m_model);
+ m_ui.dependenciesView->setHeaderHidden(true);
+}
+
+///
+/// DependenciesPanel
+///
+
+DependenciesPanel::DependenciesPanel(SessionManager *session, Project *project)
+ : PropertiesPanel()
+ , m_widget(new DependenciesWidget(session, project))
+{
+}
+
+DependenciesPanel::~DependenciesPanel()
+{
+ delete m_widget;
+}
+
+QString DependenciesPanel::name() const
+{
+ return tr("Dependencies");
+}
+
+QWidget *DependenciesPanel::widget()
+{
+ return m_widget;
+}
+
+///
+/// DependenciesPanelFactory
+///
+
+DependenciesPanelFactory::DependenciesPanelFactory(SessionManager *session)
+ : m_session(session)
+{
+}
+
+bool DependenciesPanelFactory::supports(Project * /* project */)
+{
+ return true;
+}
+
+PropertiesPanel *DependenciesPanelFactory::createPanel(Project *project)
+{
+ return new DependenciesPanel(m_session, project);
+}
+
+} // namespace Internal
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/dependenciesdialog.h b/src/plugins/projectexplorer/dependenciespanel.h
index 1dd8621a1e..73c7755620 100644
--- a/src/plugins/projectexplorer/dependenciesdialog.h
+++ b/src/plugins/projectexplorer/dependenciespanel.h
@@ -34,9 +34,10 @@
#ifndef DEPENDENCIESDIALOG_H
#define DEPENDENCIESDIALOG_H
-#include "ui_dependenciesdialog.h"
+#include "iprojectproperties.h"
+#include "ui_dependenciespanel.h"
-#include <QtGui/QDialog>
+#include <QtGui/QWidget>
namespace ProjectExplorer {
@@ -45,27 +46,32 @@ class SessionManager;
namespace Internal {
-class DependencyModel;
+class DependenciesWidget;
-// NBS kill DependenciesDialog?
-class DependenciesDialog : public QDialog
+class DependenciesPanelFactory : public IPanelFactory
{
- Q_OBJECT
public:
- typedef QList<ProjectExplorer::Project *> ProjectList;
+ DependenciesPanelFactory(SessionManager *session);
+
+ bool supports(Project *project);
+ PropertiesPanel *createPanel(Project *project);
+
+private:
+ SessionManager *m_session;
+};
- DependenciesDialog(QWidget *parent, SessionManager *sln);
- virtual ~DependenciesDialog();
-public slots:
- virtual void accept();
- void reset();
+class DependenciesPanel : public PropertiesPanel
+{
+ Q_OBJECT
+public:
+ DependenciesPanel(SessionManager *session, Project *project);
+ ~DependenciesPanel();
+ QString name() const;
+ QWidget *widget();
private:
- Ui::DependenciesDialog m_ui;
- SessionManager *m_sln;
- ProjectList m_projectList;
- DependencyModel *m_model;
+ DependenciesWidget *m_widget;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/dependenciespanel.ui b/src/plugins/projectexplorer/dependenciespanel.ui
new file mode 100644
index 0000000000..83fc95b1a3
--- /dev/null
+++ b/src/plugins/projectexplorer/dependenciespanel.ui
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ProjectExplorer::Internal::DependenciesWidget</class>
+ <widget class="QWidget" name="ProjectExplorer::Internal::DependenciesWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>502</width>
+ <height>375</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Project Dependencies</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="1" column="0">
+ <widget class="QTreeView" name="dependenciesView"/>
+ </item>
+ <item row="1" column="1">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Project Dependencies:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.h b/src/plugins/projectexplorer/editorsettingspropertiespage.h
index 3be9f229c4..45da481767 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.h
@@ -73,7 +73,6 @@ private slots:
void currentEncodingChanged(int index);
private:
-
Ui::EditorSettingsPropertiesPage m_ui;
Project *m_project;
QList<QTextCodec *> m_codecs;
diff --git a/src/plugins/projectexplorer/iprojectproperties.h b/src/plugins/projectexplorer/iprojectproperties.h
index aab3b50433..aa823f4901 100644
--- a/src/plugins/projectexplorer/iprojectproperties.h
+++ b/src/plugins/projectexplorer/iprojectproperties.h
@@ -39,8 +39,6 @@
#include <coreplugin/icontext.h>
-#include <QtGui/QWidget>
-
namespace ProjectExplorer {
class PropertiesPanel;
@@ -57,7 +55,7 @@ class PROJECTEXPLORER_EXPORT PropertiesPanel : public Core::IContext
{
Q_OBJECT
public:
- virtual void finish() {};
+ virtual void finish() {}
virtual QString name() const = 0;
// IContext
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 3f377b52a1..961ad1a770 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -46,7 +46,6 @@
#include <QtCore/QTextCodec>
using namespace ProjectExplorer;
-using ExtensionSystem::PluginManager;
Project::Project()
: m_activeRunConfiguration(0),
@@ -54,6 +53,14 @@ Project::Project()
{
}
+Project::~Project()
+{
+ qDeleteAll(m_buildSteps);
+ qDeleteAll(m_cleanSteps);
+ qDeleteAll(m_buildConfigurationValues);
+ delete m_editorConfiguration;
+}
+
void Project::insertBuildStep(int position, BuildStep *step)
{
m_buildSteps.insert(position, step);
@@ -508,14 +515,3 @@ void Project::setDisplayNameFor(const QString &buildConfiguration, const QString
}
emit buildConfigurationDisplayNameChanged(buildConfiguration);
}
-
-
-Project::~Project()
-{
- qDeleteAll(m_buildSteps);
- qDeleteAll(m_cleanSteps);
- qDeleteAll(m_buildConfigurationValues);
- delete m_editorConfiguration;
-}
-
-
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 2a30a0e20f..9a8c7bf0cb 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -31,7 +31,6 @@
**
***************************************************************************/
-
#ifndef PROJECT_H
#define PROJECT_H
@@ -50,7 +49,7 @@
#include <QtGui/QIcon>
namespace Core {
- class IFile;
+class IFile;
}
namespace ProjectExplorer {
@@ -68,8 +67,7 @@ class PROJECTEXPLORER_EXPORT Project
Q_OBJECT
public:
- // Roles to be implemented by all models that are exported
- // via model()
+ // Roles to be implemented by all models that are exported via model()
enum ModelRoles {
// Absolute file path
FilePathRole = QFileSystemModel::FilePathRole
@@ -82,12 +80,11 @@ public:
virtual Core::IFile *file() const = 0;
virtual IProjectManager *projectManager() const = 0;
- virtual QList<Core::IFile *> dependencies() = 0; //NBS TODO remove
virtual QList<Project *> dependsOn() = 0; //NBS TODO implement dependsOn
virtual bool isApplication() const = 0;
- //Build/Clean Step functions
+ // Build/Clean Step functions
QList<BuildStep *> buildSteps() const;
void insertBuildStep(int position, BuildStep *step);
void removeBuildStep(int position);
@@ -97,7 +94,7 @@ public:
void insertCleanStep(int position, BuildStep *step);
void removeCleanStep(int position);
- //Build configuration
+ // Build configuration
void addBuildConfiguration(const QString &name);
void removeBuildConfiguration(const QString &name);
void copyBuildConfiguration(const QString &source, const QString &dest);
@@ -133,8 +130,9 @@ public:
virtual BuildStepConfigWidget *createConfigWidget() = 0;
virtual QList<BuildStepConfigWidget*> subConfigWidgets();
- // This method is called for new build configurations
- // You should probably set some default values in this method
+ /* This method is called for new build configurations. You should probably
+ * set some default values in this method.
+ */
virtual void newBuildConfiguration(const QString &buildConfiguration) = 0;
virtual ProjectNode *rootProjectNode() const = 0;
@@ -150,19 +148,22 @@ signals:
void buildConfigurationDisplayNameChanged(const QString &buildConfiguraiton);
protected:
- // This method is called when the project .user file is saved.
- // Simply call writer.saveValue() for each value you want to save
- // Make sure to always call your base class implementation
- // Note: All the values from the project/buildsteps and buildconfigurations
- // are automatically stored.
+ /* This method is called when the project .user file is saved. Simply call
+ * writer.saveValue() for each value you want to save. Make sure to always
+ * call your base class implementation.
+ *
+ * Note: All the values from the project/buildsteps and buildconfigurations
+ * are automatically stored.
+ */
virtual void saveSettingsImpl(PersistentSettingsWriter &writer);
- // This method is called when the project is opened
- // You can retrieve all the values you saved in saveSettingsImpl()
- // in this method.
- // Note: This function is also called if there is no .user file
- // You should probably add some default build and run settings to the project
- // so that it can be build and run
+ /* This method is called when the project is opened. You can retrieve all
+ * the values you saved in saveSettingsImpl() in this method.
+ *
+ * Note: This function is also called if there is no .user file. You should
+ * probably add some default build and run settings to the project so that
+ * it can be build and run.
+ */
virtual void restoreSettingsImpl(PersistentSettingsReader &reader);
private:
@@ -181,4 +182,4 @@ private:
} // namespace ProjectExplorer
-#endif // PROJECTINTERFACE_H
+#endif // PROJECT_H
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 5e41913db0..20e4e15fc8 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -34,12 +34,13 @@
#include "applicationrunconfiguration.h"
#include "allprojectsfilter.h"
#include "allprojectsfind.h"
-#include "currentprojectfind.h"
#include "buildmanager.h"
#include "buildsettingspropertiespage.h"
-#include "editorsettingspropertiespage.h"
+#include "currentprojectfind.h"
#include "currentprojectfilter.h"
#include "customexecutablerunconfiguration.h"
+#include "editorsettingspropertiespage.h"
+#include "dependenciespanel.h"
#include "foldernavigationwidget.h"
#include "iprojectmanager.h"
#include "metatypedeclarations.h"
@@ -215,6 +216,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
addAutoReleasedObject(new BuildSettingsPanelFactory);
addAutoReleasedObject(new RunSettingsPanelFactory);
addAutoReleasedObject(new EditorSettingsPanelFactory);
+ addAutoReleasedObject(new DependenciesPanelFactory(m_session));
ProcessStepFactory *processStepFactory = new ProcessStepFactory;
addAutoReleasedObject(processStepFactory);
@@ -485,11 +487,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
mbuild->addAction(cmd, Constants::G_BUILD_SESSION);
msessionContextMenu->addAction(cmd, Constants::G_SESSION_BUILD);
- // dependencies action
- m_dependenciesAction = new QAction(tr("Edit Dependencies..."), this);
- cmd = am->registerAction(m_dependenciesAction, Constants::DEPENDENCIES, globalcontext);
- mbuild->addAction(cmd, Constants::G_BUILD_SESSION);
-
// build action
m_buildAction = new QAction(tr("Build Project"), this);
cmd = am->registerAction(m_buildAction, Constants::BUILD, globalcontext);
@@ -622,7 +619,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
connect(m_runActionContextMenu, SIGNAL(triggered()), this, SLOT(runProjectContextMenu()));
connect(m_cancelBuildAction, SIGNAL(triggered()), this, SLOT(cancelBuild()));
connect(m_debugAction, SIGNAL(triggered()), this, SLOT(debugProject()));
- connect(m_dependenciesAction, SIGNAL(triggered()), this, SLOT(editDependencies()));
connect(m_unloadAction, SIGNAL(triggered()), this, SLOT(unloadProject()));
connect(m_clearSession, SIGNAL(triggered()), this, SLOT(clearSession()));
connect(m_taskAction, SIGNAL(triggered()), this, SLOT(goToTaskWindow()));
@@ -701,7 +697,7 @@ void ProjectExplorerPlugin::unloadProject()
QList<Core::IFile*> filesToSave;
filesToSave << fi;
- filesToSave << m_currentProject->dependencies();
+ // FIXME: What we want here is to check whether we need to safe any of the pro/pri files in this project
// check the number of modified files
int readonlycount = 0;
@@ -1203,13 +1199,13 @@ void ProjectExplorerPlugin::updateActions()
m_rebuildSessionAction->setEnabled(hasProjects && !building);
m_cleanSessionAction->setEnabled(hasProjects && !building);
m_cancelBuildAction->setEnabled(building);
- m_dependenciesAction->setEnabled(hasProjects && !building);
updateRunAction();
updateTaskActions();
}
+
// NBS TODO check projectOrder()
// what we want here is all the projects pro depends on
QStringList ProjectExplorerPlugin::allFilesWithDependencies(Project *pro)
@@ -1467,14 +1463,6 @@ void ProjectExplorerPlugin::cancelBuild()
m_buildManager->cancel();
}
-void ProjectExplorerPlugin::editDependencies()
-{
- if (debug)
- qDebug() << "ProjectExplorerPlugin::editDependencies";
-
- m_session->editDependencies();
-}
-
void ProjectExplorerPlugin::addToRecentProjects(const QString &fileName)
{
if (debug)
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index ff58e7ba8c..94e2515992 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -138,7 +138,6 @@ private slots:
void cleanSession();
void cancelBuild();
void debugProject();
- void editDependencies();
void loadAction();
void unloadProject();
void clearSession();
@@ -228,7 +227,6 @@ private:
QAction *m_runActionContextMenu;
QAction *m_cancelBuildAction;
QAction *m_debugAction;
- QAction *m_dependenciesAction;
QAction *m_taskAction;
QAction *m_addNewFileAction;
QAction *m_addExistingFilesAction;
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index bbb8a4c74d..e345ff1c1c 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -15,7 +15,7 @@ HEADERS += projectexplorer.h \
persistentsettings.h \
projectfilewizardextension.h \
session.h \
- dependenciesdialog.h \
+ dependenciespanel.h \
allprojectsfilter.h \
buildparserinterface.h \
projectexplorerconstants.h \
@@ -62,7 +62,7 @@ SOURCES += projectexplorer.cpp \
persistentsettings.cpp \
projectfilewizardextension.cpp \
session.cpp \
- dependenciesdialog.cpp \
+ dependenciespanel.cpp \
allprojectsfilter.cpp \
currentprojectfilter.cpp \
scriptwrappers.cpp \
@@ -94,7 +94,7 @@ SOURCES += projectexplorer.cpp \
nodesvisitor.cpp \
projectmodels.cpp \
currentprojectfind.cpp
-FORMS += dependenciesdialog.ui \
+FORMS += dependenciespanel.ui \
buildsettingspropertiespage.ui \
processstep.ui \
editorsettingspropertiespage.ui \
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index ef848ff178..f5b83d162c 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -33,7 +33,6 @@
#include "session.h"
-#include "dependenciesdialog.h"
#include "project.h"
#include "projectexplorer.h"
#include "projectexplorerconstants.h"
@@ -59,6 +58,7 @@
#include <QtCore/QFuture>
#include <QtCore/QSettings>
+#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtGui/QMessageBox>
@@ -118,7 +118,6 @@ private:
using namespace ProjectExplorer;
using Internal::SessionFile;
-using Internal::DependenciesDialog;
void SessionFile::sessionLoadingProgress()
@@ -452,7 +451,28 @@ bool SessionManager::recursiveDependencyCheck(const QString &newDep, const QStri
return true;
}
-bool SessionManager::hasDependency(Project *project, Project *depProject) const
+/*
+ * TODO: The dependency management exposes an interface based on projects, but
+ * is internally purely string based. This is suboptimal. Probably it would be
+ * nicer to map the filenames to projects on load and only map it back to
+ * filenames when saving.
+ */
+
+QList<Project *> SessionManager::dependencies(const Project *project) const
+{
+ const QString &proName = project->file()->fileName();
+ const QStringList &proDeps = m_file->m_depMap.value(proName);
+
+ QList<Project *> projects;
+ foreach (const QString &dep, proDeps) {
+ if (Project *pro = projectForFile(dep))
+ projects += pro;
+ }
+
+ return projects;
+}
+
+bool SessionManager::hasDependency(const Project *project, const Project *depProject) const
{
const QString &proName = project->file()->fileName();
const QString &depName = depProject->file()->fileName();
@@ -461,7 +481,7 @@ bool SessionManager::hasDependency(Project *project, Project *depProject) const
return proDeps.contains(depName);
}
-bool SessionManager::canAddDependency(Project *project, Project *depProject) const
+bool SessionManager::canAddDependency(const Project *project, const Project *depProject) const
{
const QString &newDep = project->file()->fileName();
const QString &checkDep = depProject->file()->fileName();
@@ -469,7 +489,7 @@ bool SessionManager::canAddDependency(Project *project, Project *depProject) con
return recursiveDependencyCheck(newDep, checkDep);
}
-bool SessionManager::addDependency(Project *project, Project *depProject)
+bool SessionManager::addDependency(const Project *project, const Project *depProject)
{
const QString &proName = project->file()->fileName();
const QString &depName = depProject->file()->fileName();
@@ -487,6 +507,20 @@ bool SessionManager::addDependency(Project *project, Project *depProject)
return true;
}
+void SessionManager::removeDependency(const Project *project, const Project *depProject)
+{
+ const QString &proName = project->file()->fileName();
+ const QString &depName = depProject->file()->fileName();
+
+ QStringList proDeps = m_file->m_depMap.value(proName);
+ proDeps.removeAll(depName);
+ if (proDeps.isEmpty()) {
+ m_file->m_depMap.remove(proName);
+ } else {
+ m_file->m_depMap[proName] = proDeps;
+ }
+}
+
void SessionManager::setStartupProject(Project *startupProject)
{
if (debug)
@@ -505,21 +539,6 @@ Project *SessionManager::startupProject() const
return m_file->m_startupProject;
}
-void SessionManager::removeDependency(Project *project,
- Project *depProject)
-{
- const QString &proName = project->file()->fileName();
- const QString &depName = depProject->file()->fileName();
-
- QStringList proDeps = m_file->m_depMap.value(proName);
- proDeps.removeAll(depName);
- if (proDeps.isEmpty()) {
- m_file->m_depMap.remove(proName);
- } else {
- m_file->m_depMap[proName] = proDeps;
- }
-}
-
void SessionManager::addProject(Project *project)
{
addProjects(QList<Project*>() << project);
@@ -702,12 +721,6 @@ bool SessionManager::clear()
return success;
}
-void SessionManager::editDependencies()
-{
- DependenciesDialog dlg(0, this);
- dlg.exec();
-}
-
const QList<Project *> &SessionManager::projects() const
{
return m_file->m_projects;
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index 49d15b7e8d..f8768ab468 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -123,16 +123,13 @@ public:
void removeProject(Project *project);
void removeProjects(QList<Project *> remove);
- void editDependencies();
void setStartupProject(Project *startupProject);
- // NBS think about dependency management again.
- // Probably kill these here
- bool canAddDependency(Project *project, Project *depProject) const;
- bool hasDependency(Project *project, Project *depProject) const;
- // adds the 'requiredProject' as a dependency to 'project'
- bool addDependency(Project *project, Project *depProject);
- void removeDependency(Project *project, Project *depProject);
+ QList<Project *> dependencies(const Project *project) const;
+ bool hasDependency(const Project *project, const Project *depProject) const;
+ bool canAddDependency(const Project *project, const Project *depProject) const;
+ bool addDependency(const Project *project, const Project *depProject);
+ void removeDependency(const Project *project, const Project *depProject);
Core::IFile *file() const;
Project *startupProject() const;
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 611d4930b4..cb5d99a642 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -569,17 +569,6 @@ QStringList Qt4Project::files(FilesMode fileMode) const
return files;
}
-QList<Core::IFile *> Qt4Project::dependencies()
-{
- QList<Core::IFile *> result;
- // TODO profile cache is no longer
-// ProFileCache *cache = m_manager->proFileCache();
-// foreach (const QString &file, cache->dependencies(m_rootProjectNode)) {
-// result << cache->fileInterface(file);
-// }
- return result;
-}
-
QList<ProjectExplorer::Project*> Qt4Project::dependsOn()
{
// NBS implement dependsOn
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
index 792ae2aed4..c589d2eb86 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
@@ -74,7 +74,12 @@ using ProjectExplorer::ResourceType;
using ProjectExplorer::UnknownFileType;
// Known file types of a Qt 4 project
-static const char* qt4FileTypes[] = {"CppHeaderFiles", "CppSourceFiles", "Qt4FormFiles", "Qt4ResourceFiles" };
+static const char* qt4FileTypes[] = {
+ "CppHeaderFiles",
+ "CppSourceFiles",
+ "Qt4FormFiles",
+ "Qt4ResourceFiles"
+};
Qt4Manager::Qt4Manager(Qt4ProjectManagerPlugin *plugin, Core::ICore *core) :
m_mimeType(QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE)),