diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 590d6244cbd3f3dd1f78d809d22dbf30f974d40b..28731fbcc50db3857c9a019735c97ad682506db0 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -50,6 +50,7 @@ #include <QtGui/QComboBox> #include <QtGui/QStringListModel> #include <QtGui/QListWidget> +#include <QtGui/QPushButton> using namespace GenericProjectManager; using namespace GenericProjectManager::Internal; @@ -198,6 +199,9 @@ void GenericProject::setIncludePaths(const QStringList &includePaths) QStringList GenericProject::defines() const { return _defines; } +void GenericProject::setDefines(const QStringList &defines) +{ _defines = defines; } + void GenericProject::setToolChainId(const QString &toolChainId) { using namespace ProjectExplorer; @@ -446,6 +450,15 @@ GenericBuildSettingsWidget::GenericBuildSettingsWidget(GenericProject *project) _definesModel->setStringList(_project->defines()); definesView->setModel(_definesModel); fl->addRow(tr("Defines:"), definesView); + + _applyButton = new QPushButton(tr("Apply")); + _applyButton->setEnabled(false); + fl->addRow(QString(), _applyButton); + connect(_applyButton, SIGNAL(clicked()), this, SLOT(applyChanges())); + connect(_includePathsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), + this, SLOT(markDirty())); + connect(_definesModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), + this, SLOT(markDirty())); } GenericBuildSettingsWidget::~GenericBuildSettingsWidget() @@ -469,6 +482,19 @@ void GenericBuildSettingsWidget::buildDirectoryChanged() _project->setValue(_buildConfiguration, "buildDirectory", _pathChooser->path()); } +void GenericBuildSettingsWidget::markDirty() +{ + _applyButton->setEnabled(true); +} + +void GenericBuildSettingsWidget::applyChanges() +{ + _project->setIncludePaths(_includePathsModel->stringList()); + _project->setDefines(_definesModel->stringList()); + + _project->refresh(); + _applyButton->setEnabled(false); +} //////////////////////////////////////////////////////////////////////////////////// // GenericProjectFile diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index 9578be7bbe12c946e49ef77e9066d17ffef86254..2c63d1945f59a795a380a33f501f1b7c94e021ce 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -42,6 +42,7 @@ #include <utils/pathchooser.h> QT_BEGIN_NAMESPACE +class QPushButton; class QStringListModel; QT_END_NAMESPACE @@ -85,13 +86,16 @@ public: QStringList includePaths() const; void setIncludePaths(const QStringList &includePaths); - QStringList files() const; - QStringList generated() const; QStringList defines() const; + void setDefines(const QStringList &defines); + + QStringList files() const; + QStringList generated() const; QString toolChainId() const; public Q_SLOTS: void setToolChainId(const QString &toolChainId); + void refresh(); protected: virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer); @@ -99,7 +103,6 @@ protected: private: void parseProject(); - void refresh(); Manager *_manager; QString _fileName; @@ -156,11 +159,14 @@ public: private Q_SLOTS: void buildDirectoryChanged(); + void markDirty(); + void applyChanges(); private: GenericProject *_project; Core::Utils::PathChooser *_pathChooser; QString _buildConfiguration; + QPushButton *_applyButton; QStringListModel *_includePathsModel; QStringListModel *_definesModel; }; diff --git a/src/plugins/genericprojectmanager/genericprojectnodes.cpp b/src/plugins/genericprojectmanager/genericprojectnodes.cpp index 85dc20819e0ebdb05bc71f7bf12ee831c0d85d7d..e37f1dd31f3cc7292f2806d3765a3fb59af65302 100644 --- a/src/plugins/genericprojectmanager/genericprojectnodes.cpp +++ b/src/plugins/genericprojectmanager/genericprojectnodes.cpp @@ -30,6 +30,8 @@ #include "genericprojectnodes.h" #include "genericproject.h" +#include <projectexplorer/projectexplorer.h> + #include <QDir> #include <QFileInfo> #include <QSettings> @@ -61,6 +63,8 @@ void GenericProjectNode::refresh() removeFileNodes(fileNodes(), this); removeFolderNodes(subFolderNodes(), this); + ProjectExplorerPlugin::instance()->setCurrentNode(0); // ### remove me + FileNode *projectFileNode = new FileNode(projectFilePath(), ProjectFileType, /* generated = */ false); @@ -96,6 +100,8 @@ void GenericProjectNode::refresh() addFileNodes(fileNodes, folder); } + + _folderByName.clear(); } ProjectExplorer::FolderNode *GenericProjectNode::findOrCreateFolderByName(const QStringList &components, int end) diff --git a/src/plugins/genericprojectmanager/genericprojectnodes.h b/src/plugins/genericprojectmanager/genericprojectnodes.h index 1c1b2cad2d23da052cc29bb38161d6c14681a936..d31a14dbd625364b0d5f0d000b4ce1e2505b2b38 100644 --- a/src/plugins/genericprojectmanager/genericprojectnodes.h +++ b/src/plugins/genericprojectmanager/genericprojectnodes.h @@ -78,7 +78,6 @@ private: private: GenericProject *_project; Core::IFile *_projectFile; - QHash<QString, FolderNode *> _folderByName; };