diff options
author | Frank Siegert <frank.siegert@durham.ac.uk> | 2009-07-13 11:39:08 +0200 |
---|---|---|
committer | con <qtc-committer@nokia.com> | 2009-07-13 11:39:08 +0200 |
commit | 7c88b3e96c5cf660c227f1e228bdfe005f6cf8a5 (patch) | |
tree | 74e692e1f9eda051eafde1f9b4feac6a10e97b15 | |
parent | 8c00de45360ca4d22ecb23edd3043fa57803bf24 (diff) | |
download | qt-creator-7c88b3e96c5cf660c227f1e228bdfe005f6cf8a5.tar.gz |
Allow for variable replacement in build directory and build arguments
of a generic project. This way one can use variables like
${CURRENT_DOCUMENT:path} or ${CURRENT_DOCUMENT:baseName}.
Amend: Fix coding style according to apoenitz's comment.
Amend2: Some more coding style issues.
Merge-request: 820
Reviewed-by: con <qtc-committer@nokia.com>
-rw-r--r-- | src/plugins/coreplugin/editormanager/editormanager.cpp | 6 | ||||
-rw-r--r-- | src/plugins/coreplugin/variablemanager.cpp | 40 | ||||
-rw-r--r-- | src/plugins/coreplugin/variablemanager.h | 7 | ||||
-rw-r--r-- | src/plugins/genericprojectmanager/genericmakestep.cpp | 16 |
4 files changed, 66 insertions, 3 deletions
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 8853bfcf00..1908936ec1 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -49,6 +49,7 @@ #include <coreplugin/baseview.h> #include <coreplugin/imode.h> #include <coreplugin/settingsdatabase.h> +#include <coreplugin/variablemanager.h> #include <extensionsystem/pluginmanager.h> @@ -395,6 +396,11 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) : cmd->setDefaultKeySequence(QKeySequence(tr("Alt+V,Alt+I"))); advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR); connect(m_d->m_openInExternalEditorAction, SIGNAL(triggered()), this, SLOT(openInExternalEditor())); + + // Connect to VariableManager for CURRENT_DOCUMENT variable setting + VariableManager *vm = VariableManager::instance(); + connect(this, SIGNAL(currentEditorChanged(Core::IEditor *)), + vm, SLOT(updateCurrentDocument(Core::IEditor *))); // other setup diff --git a/src/plugins/coreplugin/variablemanager.cpp b/src/plugins/coreplugin/variablemanager.cpp index b2d395fc64..0cbbf08abb 100644 --- a/src/plugins/coreplugin/variablemanager.cpp +++ b/src/plugins/coreplugin/variablemanager.cpp @@ -48,6 +48,46 @@ void VariableManager::insert(const QString &variable, const QString &value) m_map.insert(variable, value); } +void VariableManager::insertFileInfo(const QString &tag, const QFileInfo &file) +{ + insert(tag, file.filePath()); + insert(tag+":absoluteFilePath", file.absoluteFilePath()); + insert(tag+":absolutePath", file.absolutePath()); + insert(tag+":baseName", file.baseName()); + insert(tag+":canonicalPath", file.canonicalPath()); + insert(tag+":canonicalFilePath", file.canonicalFilePath()); + insert(tag+":completeBaseName", file.completeBaseName()); + insert(tag+":completeSuffix", file.completeSuffix()); + insert(tag+":fileName", file.fileName()); + insert(tag+":filePath", file.filePath()); + insert(tag+":path", file.path()); + insert(tag+":suffix", file.suffix()); +} + +void VariableManager::removeFileInfo(const QString &tag) +{ + remove(tag); + remove(tag+":absoluteFilePath"); + remove(tag+":absolutePath"); + remove(tag+":baseName"); + remove(tag+":canonicalPath"); + remove(tag+":canonicalFilePath"); + remove(tag+":completeBaseName"); + remove(tag+":completeSuffix"); + remove(tag+":fileName"); + remove(tag+":filePath"); + remove(tag+":path"); + remove(tag+":suffix"); +} + +void VariableManager::updateCurrentDocument(Core::IEditor *editor) +{ + removeFileInfo("CURRENT_DOCUMENT"); + if (editor==NULL || editor->file()==NULL) + return; + insertFileInfo("CURRENT_DOCUMENT", editor->file()->fileName()); +} + QString VariableManager::value(const QString &variable) { return m_map.value(variable); diff --git a/src/plugins/coreplugin/variablemanager.h b/src/plugins/coreplugin/variablemanager.h index 76a0592ec2..fb8d7fb7f1 100644 --- a/src/plugins/coreplugin/variablemanager.h +++ b/src/plugins/coreplugin/variablemanager.h @@ -31,10 +31,12 @@ #define VARIABLEMANAGER_H #include "core_global.h" +#include <coreplugin/editormanager/ieditor.h> #include <QtCore/QObject> #include <QtCore/QMap> #include <QtCore/QString> +#include <QtCore/QFileInfo> namespace Core { @@ -49,11 +51,16 @@ public: static VariableManager* instance() { return m_instance; } void insert(const QString &variable, const QString &value); + void insertFileInfo(const QString &tag, const QFileInfo &file); + void removeFileInfo(const QString &tag); QString value(const QString &variable); QString value(const QString &variable, const QString &defaultValue); void remove(const QString &variable); QString resolve(const QString &stringWithVariables); +private slots: + void updateCurrentDocument(Core::IEditor *editor); + private: QMap<QString, QString> m_map; static VariableManager *m_instance; diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index c4d4f2dc7d..bed00498a1 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -35,6 +35,7 @@ #include <extensionsystem/pluginmanager.h> #include <projectexplorer/toolchain.h> #include <utils/qtcassert.h> +#include <coreplugin/variablemanager.h> #include <QtGui/QFormLayout> #include <QtGui/QGroupBox> @@ -61,7 +62,10 @@ bool GenericMakeStep::init(const QString &buildConfiguration) qDebug() << "*** build parser:" << buildParser; setEnabled(buildConfiguration, true); - setWorkingDirectory(buildConfiguration, m_pro->buildDirectory(buildConfiguration)); + Core::VariableManager *vm = Core::VariableManager::instance(); + const QString rawBuildDir = m_pro->buildDirectory(buildConfiguration); + const QString buildDir = vm->resolve(rawBuildDir); + setWorkingDirectory(buildConfiguration, buildDir); QString command = value(buildConfiguration, "makeCommand").toString(); if (command.isEmpty()) { @@ -74,8 +78,14 @@ bool GenericMakeStep::init(const QString &buildConfiguration) const QStringList targets = value(buildConfiguration, "buildTargets").toStringList(); QStringList arguments = value(buildConfiguration, "makeArguments").toStringList(); - arguments.append(targets); - setArguments(buildConfiguration, arguments); + QStringList replacedArguments; + foreach (const QString &arg, arguments) { + replacedArguments.append(vm->resolve(arg)); + } + foreach (const QString &arg, targets) { + replacedArguments.append(vm->resolve(arg)); + } + setArguments(buildConfiguration, replacedArguments); setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration)); return AbstractMakeStep::init(buildConfiguration); |