summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Siegert <frank.siegert@durham.ac.uk>2009-07-13 11:39:08 +0200
committercon <qtc-committer@nokia.com>2009-07-13 11:39:08 +0200
commit7c88b3e96c5cf660c227f1e228bdfe005f6cf8a5 (patch)
tree74e692e1f9eda051eafde1f9b4feac6a10e97b15
parent8c00de45360ca4d22ecb23edd3043fa57803bf24 (diff)
downloadqt-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.cpp6
-rw-r--r--src/plugins/coreplugin/variablemanager.cpp40
-rw-r--r--src/plugins/coreplugin/variablemanager.h7
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.cpp16
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);