diff options
author | Tobias Hunger <tobias.hunger@digia.com> | 2012-11-16 19:11:36 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@digia.com> | 2012-11-21 13:25:56 +0100 |
commit | 1c4d51ef7a43009c84bcc92ed28699db4bd45041 (patch) | |
tree | 616d3d35012dbebf5e71c4acc4cc80f9f2d5a56a | |
parent | c5fa9c30a19027c546fcf8db9c0335b9c9037df2 (diff) | |
download | qt-creator-1c4d51ef7a43009c84bcc92ed28699db4bd45041.tar.gz |
Add configuration option for default build directory
Change the UI to always show the editor for the build directory.
Default to what we do for qmake projects right now (with shadow-
building enabled).
Use this setting in qmake based projects.
Set this to '.' for in-source builds by default.
Change-Id: I3fb26ab817b0f545e9b318b68e592df8040d5562
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
-rw-r--r-- | src/plugins/coreplugin/coreconstants.h | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/documentmanager.cpp | 43 | ||||
-rw-r--r-- | src/plugins/coreplugin/documentmanager.h | 3 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorer.cpp | 46 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorerconstants.h | 11 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorersettingspage.cpp | 39 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorersettingspage.h | 6 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorersettingspage.ui | 78 | ||||
-rw-r--r-- | src/plugins/qt4projectmanager/qt4project.cpp | 78 |
9 files changed, 155 insertions, 151 deletions
diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h index 7c6032cc0e..982a9f2d65 100644 --- a/src/plugins/coreplugin/coreconstants.h +++ b/src/plugins/coreplugin/coreconstants.h @@ -227,6 +227,8 @@ const char VARIABLE_SUPPORT_PROPERTY[] = "QtCreator.VariableSupport"; const char TR_CLEAR_MENU[] = QT_TRANSLATE_NOOP("Core", "Clear Menu"); +const char DEFAULT_BUILD_DIRECTORY[] = "../build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}"; + const int TARGET_ICON_SIZE = 32; } // namespace Constants diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp index 50d818b851..42d8787a6d 100644 --- a/src/plugins/coreplugin/documentmanager.cpp +++ b/src/plugins/coreplugin/documentmanager.cpp @@ -98,8 +98,6 @@ static const char directoryGroupC[] = "Directories"; static const char projectDirectoryKeyC[] = "Projects"; static const char useProjectDirectoryKeyC[] = "UseProjectsDirectory"; static const char buildDirectoryKeyC[] = "BuildDirectory"; -static const char useBuildDirectoryKeyC[] = "UseBuildDirectory"; - namespace Core { @@ -159,7 +157,6 @@ struct DocumentManagerPrivate QString m_projectsDirectory; bool m_useProjectsDirectory; QString m_buildDirectory; - bool m_useBuildDirectory; // When we are callling into a IDocument // we don't want to receive a changed() // signal @@ -202,7 +199,6 @@ DocumentManagerPrivate::DocumentManagerPrivate(QMainWindow *mw) : m_blockActivated(false), m_lastVisitedDirectory(QDir::currentPath()), m_useProjectsDirectory(Utils::HostOsInfo::isMacHost()), // Creator is in bizarre places when launched via finder. - m_useBuildDirectory(false), m_blockedIDocument(0) { } @@ -1171,7 +1167,6 @@ void DocumentManager::saveSettings() s->setValue(QLatin1String(projectDirectoryKeyC), d->m_projectsDirectory); s->setValue(QLatin1String(useProjectDirectoryKeyC), d->m_useProjectsDirectory); s->setValue(QLatin1String(buildDirectoryKeyC), d->m_buildDirectory); - s->setValue(QLatin1String(useBuildDirectoryKeyC), d->m_useBuildDirectory); s->endGroup(); } @@ -1197,23 +1192,20 @@ void readSettings() s->beginGroup(QLatin1String(directoryGroupC)); const QString settingsProjectDir = s->value(QLatin1String(projectDirectoryKeyC), QString()).toString(); - if (!settingsProjectDir.isEmpty() && QFileInfo(settingsProjectDir).isDir()) { + if (!settingsProjectDir.isEmpty() && QFileInfo(settingsProjectDir).isDir()) d->m_projectsDirectory = settingsProjectDir; - } else { + else d->m_projectsDirectory = Utils::PathChooser::homePath(); - } d->m_useProjectsDirectory = s->value(QLatin1String(useProjectDirectoryKeyC), d->m_useProjectsDirectory).toBool(); const QString settingsShadowDir = s->value(QLatin1String(buildDirectoryKeyC), QString()).toString(); - if (!settingsShadowDir.isEmpty() && QFileInfo(settingsShadowDir).isDir()) + if (!settingsShadowDir.isEmpty()) d->m_buildDirectory = settingsShadowDir; else - d->m_buildDirectory = Utils::PathChooser::homePath(); + d->m_buildDirectory = QLatin1String(Constants::DEFAULT_BUILD_DIRECTORY); - d->m_useBuildDirectory = s->value(QLatin1String(useBuildDirectoryKeyC), - d->m_useBuildDirectory).toBool(); s->endGroup(); } @@ -1285,30 +1277,9 @@ void DocumentManager::setProjectsDirectory(const QString &dir) } /*! - Returns whether the default shadow build directory is placed adjacent to the source in the - projects directory or in a separate build tree. - - \sa setUseBuildDirectory, setBuildDirectory -*/ -bool DocumentManager::useBuildDirectory() -{ - return d->m_useBuildDirectory; -} - -/*! - Sets whether a separate build directory is to the used when shadow building. - - \sa buildDirectory, usebuildDirectory -*/ -void DocumentManager::setUseBuildDirectory(bool use) -{ - d->m_useBuildDirectory = use; -} - -/*! - Returns the shadow build directory. + Returns the default build directory. - \sa setBuildDirectory, useBuildDirectory + \sa setBuildDirectory */ QString DocumentManager::buildDirectory() { @@ -1318,7 +1289,7 @@ QString DocumentManager::buildDirectory() /*! Sets the shadow build directory to \a directory. - \sa buildDirectory, useBuildDirectory + \sa buildDirectory */ void DocumentManager::setBuildDirectory(const QString &directory) { diff --git a/src/plugins/coreplugin/documentmanager.h b/src/plugins/coreplugin/documentmanager.h index 7d5ba7a84d..31893224ac 100644 --- a/src/plugins/coreplugin/documentmanager.h +++ b/src/plugins/coreplugin/documentmanager.h @@ -129,9 +129,6 @@ public: static QString projectsDirectory(); static void setProjectsDirectory(const QString &); - static bool useBuildDirectory(); - static void setUseBuildDirectory(bool use); - static QString buildDirectory(); static void setBuildDirectory(const QString &directory); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index d3a40d062b..a26be61a5d 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -155,16 +155,6 @@ namespace { bool debug = false; } -static const char kCurrentProjectPath[] = "CurrentProject:Path"; -static const char kCurrentProjectFilePath[] = "CurrentProject:FilePath"; -static const char kCurrentProjectBuildPath[] = "CurrentProject:BuildPath"; -static const char kCurrentProjectName[] = "CurrentProject:Name"; -static const char kCurrentKitName[] = "CurrentKit:Name"; -static const char kCurrentKitFileSystemName[] = "CurrentKit:FileSystemName"; -static const char kCurrentKitId[] = "CurrentKit:Id"; -static const char kCurrentBuildName[] = "CurrentBuild:Name"; -static const char kCurrentBuildType[] = "CurrentBuild:Type"; - namespace ProjectExplorer { struct ProjectExplorerPluginPrivate { @@ -996,19 +986,19 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er updateWelcomePage(); Core::VariableManager *vm = Core::VariableManager::instance(); - vm->registerVariable(kCurrentProjectFilePath, + vm->registerVariable(Constants::VAR_CURRENTPROJECT_FILEPATH, tr("Full path of the current project's main file, including file name.")); - vm->registerVariable(kCurrentProjectPath, + vm->registerVariable(Constants::VAR_CURRENTPROJECT_PATH, tr("Full path of the current project's main file, excluding file name.")); - vm->registerVariable(kCurrentProjectBuildPath, + vm->registerVariable(Constants::VAR_CURRENTPROJECT_BUILDPATH, tr("Full build path of the current project's active build configuration.")); - vm->registerVariable(kCurrentProjectName, tr("The current project's name.")); - vm->registerVariable(kCurrentKitName, tr("The currently active kit's name.")); - vm->registerVariable(kCurrentKitFileSystemName, + vm->registerVariable(Constants::VAR_CURRENTPROJECT_NAME, tr("The current project's name.")); + vm->registerVariable(Constants::VAR_CURRENTKIT_NAME, tr("The currently active kit's name.")); + vm->registerVariable(Constants::VAR_CURRENTKIT_FILESYSTEMNAME, tr("The currently active kit's name in a filesystem friendly version.")); - vm->registerVariable(kCurrentKitId, tr("The currently active kit's id.")); - vm->registerVariable(kCurrentBuildName, tr("The currently active build configuration's name.")); - vm->registerVariable(kCurrentBuildType, tr("The currently active build configuration's type.")); + vm->registerVariable(Constants::VAR_CURRENTKIT_ID, tr("The currently active kit's id.")); + vm->registerVariable(Constants::VAR_CURRENTBUILD_NAME, tr("The currently active build configuration's name.")); + vm->registerVariable(Constants::VAR_CURRENTBUILD_TYPE, tr("The currently active build configuration's type.")); connect(vm, SIGNAL(variableUpdateRequested(QByteArray)), this, SLOT(updateVariable(QByteArray))); @@ -1142,58 +1132,58 @@ void ProjectExplorerPlugin::loadCustomWizards() void ProjectExplorerPlugin::updateVariable(const QByteArray &variable) { - if (variable == kCurrentProjectFilePath) { + if (variable == Constants::VAR_CURRENTPROJECT_FILEPATH) { if (currentProject() && currentProject()->document()) { Core::VariableManager::instance()->insert(variable, currentProject()->document()->fileName()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentProjectPath) { + } else if (variable == Constants::VAR_CURRENTPROJECT_PATH) { if (currentProject() && currentProject()->document()) { Core::VariableManager::instance()->insert(variable, QFileInfo(currentProject()->document()->fileName()).path()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentProjectBuildPath) { + } else if (variable == Constants::VAR_CURRENTPROJECT_BUILDPATH) { if (currentProject() && currentProject()->activeTarget() && currentProject()->activeTarget()->activeBuildConfiguration()) { Core::VariableManager::instance()->insert(variable, currentProject()->activeTarget()->activeBuildConfiguration()->buildDirectory()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentProjectName) { + } else if (variable == Constants::VAR_CURRENTPROJECT_NAME) { if (currentProject()) { Core::VariableManager::instance()->insert(variable, currentProject()->displayName()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentKitName) { + } else if (variable == Constants::VAR_CURRENTKIT_NAME) { if (currentProject() && currentProject()->activeTarget() && currentProject()->activeTarget()->kit()) { Core::VariableManager::instance()->insert(variable, currentProject()->activeTarget()->kit()->displayName()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentKitFileSystemName) { + } else if (variable == Constants::VAR_CURRENTKIT_FILESYSTEMNAME) { if (currentProject() && currentProject()->activeTarget() && currentProject()->activeTarget()->kit()) { Core::VariableManager::instance()->insert(variable, currentProject()->activeTarget()->kit()->fileSystemFriendlyName()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentKitId) { + } else if (variable == Constants::VAR_CURRENTKIT_ID) { if (currentProject() && currentProject()->activeTarget() && currentProject()->activeTarget()->kit()) { Core::VariableManager::instance()->insert(variable, currentProject()->activeTarget()->kit()->id().toString()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentBuildName) { + } else if (variable == Constants::VAR_CURRENTBUILD_NAME) { if (currentProject() && currentProject()->activeTarget() && currentProject()->activeTarget()->activeBuildConfiguration()) { Core::VariableManager::instance()->insert(variable, currentProject()->activeTarget()->activeBuildConfiguration()->displayName()); } else { Core::VariableManager::instance()->remove(variable); } - } else if (variable == kCurrentBuildType) { + } else if (variable == Constants::VAR_CURRENTBUILD_TYPE) { if (currentProject() && currentProject()->activeTarget() && currentProject()->activeTarget()->activeBuildConfiguration()) { BuildConfiguration::BuildType type = currentProject()->activeTarget()->activeBuildConfiguration()->buildType(); QString typeString; diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h index 4359e7cae1..cdf2408e75 100644 --- a/src/plugins/projectexplorer/projectexplorerconstants.h +++ b/src/plugins/projectexplorer/projectexplorerconstants.h @@ -235,6 +235,17 @@ const char DEFAULT_WORKING_DIR[] = "%{buildDir}"; const char DESKTOP_DEVICE_ID[] = "Desktop Device"; const char DESKTOP_DEVICE_TYPE[] = "Desktop"; +// Variable Names: +const char VAR_CURRENTPROJECT_PATH[] = "CurrentProject:Path"; +const char VAR_CURRENTPROJECT_FILEPATH[] = "CurrentProject:FilePath"; +const char VAR_CURRENTPROJECT_BUILDPATH[] = "CurrentProject:BuildPath"; +const char VAR_CURRENTPROJECT_NAME[] = "CurrentProject:Name"; +const char VAR_CURRENTKIT_NAME[] = "CurrentKit:Name"; +const char VAR_CURRENTKIT_FILESYSTEMNAME[] = "CurrentKit:FileSystemName"; +const char VAR_CURRENTKIT_ID[] = "CurrentKit:Id"; +const char VAR_CURRENTBUILD_NAME[] = "CurrentBuild:Name"; +const char VAR_CURRENTBUILD_TYPE[] = "CurrentBuild:Type"; + } // namespace Constants // Run modes diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.cpp b/src/plugins/projectexplorer/projectexplorersettingspage.cpp index bb40f64a20..ce6125e714 100644 --- a/src/plugins/projectexplorer/projectexplorersettingspage.cpp +++ b/src/plugins/projectexplorer/projectexplorersettingspage.cpp @@ -32,8 +32,9 @@ #include "projectexplorerconstants.h" #include "projectexplorer.h" -#include <coreplugin/icore.h> +#include <coreplugin/coreconstants.h> #include <coreplugin/documentmanager.h> +#include <coreplugin/icore.h> #include <utils/hostosinfo.h> #include <QLabel> @@ -51,10 +52,12 @@ ProjectExplorerSettingsWidget::ProjectExplorerSettingsWidget(QWidget *parent) : setJomVisible(Utils::HostOsInfo::isWindowsHost()); m_ui.directoryButtonGroup->setId(m_ui.currentDirectoryRadioButton, UseCurrentDirectory); m_ui.directoryButtonGroup->setId(m_ui.directoryRadioButton, UseProjectDirectory); + m_ui.buildDirectoryEdit->setProperty(Core::Constants::VARIABLE_SUPPORT_PROPERTY, true); + connect(m_ui.directoryButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(slotDirectoryButtonGroupChanged())); - connect(m_ui.buildDirectoryCheckBox, SIGNAL(toggled(bool)), - this, SLOT(slotBuildDirectoryCheckBoxChanged(bool))); + connect(m_ui.resetButton, SIGNAL(clicked()), this, SLOT(resetDefaultBuildDirectory())); + connect(m_ui.buildDirectoryEdit, SIGNAL(textChanged(QString)), this, SLOT(updateResetButton())); } void ProjectExplorerSettingsWidget::setJomVisible(bool v) @@ -120,40 +123,30 @@ void ProjectExplorerSettingsWidget::setUseProjectsDirectory(bool b) } } -bool ProjectExplorerSettingsWidget::useBuildDirectory() const -{ - return m_ui.buildDirectoryCheckBox->isChecked(); -} - -void ProjectExplorerSettingsWidget::setUseBuildDirectory(bool v) -{ - if (useBuildDirectory() != v) { - m_ui.buildDirectoryCheckBox->setChecked(v); - slotBuildDirectoryCheckBoxChanged(v); - } -} - QString ProjectExplorerSettingsWidget::buildDirectory() const { - return m_ui.buildDirectoryPathChooser->path(); + return m_ui.buildDirectoryEdit->text(); } void ProjectExplorerSettingsWidget::setBuildDirectory(const QString &bd) { - m_ui.buildDirectoryPathChooser->setPath(bd); + m_ui.buildDirectoryEdit->setText(bd); } void ProjectExplorerSettingsWidget::slotDirectoryButtonGroupChanged() { bool enable = useProjectsDirectory(); m_ui.projectsDirectoryPathChooser->setEnabled(enable); - m_ui.buildDirectoryCheckBox->setEnabled(enable); - m_ui.buildDirectoryPathChooser->setEnabled(enable && useBuildDirectory()); } -void ProjectExplorerSettingsWidget::slotBuildDirectoryCheckBoxChanged(bool checked) +void ProjectExplorerSettingsWidget::resetDefaultBuildDirectory() +{ + setBuildDirectory(QLatin1String(Core::Constants::DEFAULT_BUILD_DIRECTORY)); +} + +void ProjectExplorerSettingsWidget::updateResetButton() { - m_ui.buildDirectoryPathChooser->setEnabled(useProjectsDirectory() && checked); + m_ui.resetButton->setEnabled(buildDirectory() != QLatin1String(Core::Constants::DEFAULT_BUILD_DIRECTORY)); } QString ProjectExplorerSettingsWidget::searchKeywords() const @@ -200,7 +193,6 @@ QWidget *ProjectExplorerSettingsPage::createPage(QWidget *parent) m_widget->setSettings(ProjectExplorerPlugin::instance()->projectExplorerSettings()); m_widget->setProjectsDirectory(Core::DocumentManager::projectsDirectory()); m_widget->setUseProjectsDirectory(Core::DocumentManager::useProjectsDirectory()); - m_widget->setUseBuildDirectory(Core::DocumentManager::useBuildDirectory()); m_widget->setBuildDirectory(Core::DocumentManager::buildDirectory()); if (m_searchKeywords.isEmpty()) m_searchKeywords = m_widget->searchKeywords(); @@ -213,7 +205,6 @@ void ProjectExplorerSettingsPage::apply() ProjectExplorerPlugin::instance()->setProjectExplorerSettings(m_widget->settings()); Core::DocumentManager::setProjectsDirectory(m_widget->projectsDirectory()); Core::DocumentManager::setUseProjectsDirectory(m_widget->useProjectsDirectory()); - Core::DocumentManager::setUseBuildDirectory(m_widget->useBuildDirectory()); Core::DocumentManager::setBuildDirectory(m_widget->buildDirectory()); } } diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.h b/src/plugins/projectexplorer/projectexplorersettingspage.h index 5e37b23eaa..3e0a606ed2 100644 --- a/src/plugins/projectexplorer/projectexplorersettingspage.h +++ b/src/plugins/projectexplorer/projectexplorersettingspage.h @@ -55,9 +55,6 @@ public: bool useProjectsDirectory(); void setUseProjectsDirectory(bool v); - bool useBuildDirectory() const; - void setUseBuildDirectory(bool v); - QString buildDirectory() const; void setBuildDirectory(const QString &bd); @@ -65,7 +62,8 @@ public: private slots: void slotDirectoryButtonGroupChanged(); - void slotBuildDirectoryCheckBoxChanged(bool checked); + void resetDefaultBuildDirectory(); + void updateResetButton(); private: void setJomVisible(bool); diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.ui b/src/plugins/projectexplorer/projectexplorersettingspage.ui index ec29fa134b..7963fd4bc7 100644 --- a/src/plugins/projectexplorer/projectexplorersettingspage.ui +++ b/src/plugins/projectexplorer/projectexplorersettingspage.ui @@ -33,23 +33,6 @@ </attribute> </widget> </item> - <item row="1" column="1"> - <widget class="Utils::PathChooser" name="projectsDirectoryPathChooser" native="true"/> - </item> - <item row="2" column="0"> - <widget class="QCheckBox" name="buildDirectoryCheckBox"> - <property name="text"> - <string>Build directory</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="Utils::PathChooser" name="buildDirectoryPathChooser" native="true"> - <property name="enabled"> - <bool>false</bool> - </property> - </widget> - </item> <item row="1" column="0"> <widget class="QRadioButton" name="directoryRadioButton"> <property name="text"> @@ -63,6 +46,9 @@ </attribute> </widget> </item> + <item row="1" column="1"> + <widget class="Utils::PathChooser" name="projectsDirectoryPathChooser"/> + </item> </layout> </widget> </item> @@ -124,7 +110,7 @@ </property> </widget> </item> - <item row="3" column="1" rowspan="2"> + <item row="3" column="1"> <widget class="QWidget" name="widget" native="true"> <layout class="QHBoxLayout" name="horizontalLayout"> <property name="margin"> @@ -163,7 +149,21 @@ </layout> </widget> </item> - <item row="7" column="0"> + <item row="4" column="0"> + <widget class="QCheckBox" name="showRunOutputCheckBox"> + <property name="text"> + <string>Open application output pane when running</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QCheckBox" name="showDebugOutputCheckBox"> + <property name="text"> + <string>Open application output pane when debugging</string> + </property> + </widget> + </item> + <item row="6" column="0"> <widget class="QCheckBox" name="promptToStopRunControlCheckBox"> <property name="toolTip"> <string>Ask before terminating the running application in response to clicking the stop button in Application Output.</string> @@ -173,7 +173,7 @@ </property> </widget> </item> - <item row="8" column="0" colspan="2"> + <item row="7" column="0" colspan="2"> <layout class="QVBoxLayout" name="verticalLayout"> <property name="spacing"> <number>0</number> @@ -206,19 +206,29 @@ </item> </layout> </item> - <item row="5" column="0"> - <widget class="QCheckBox" name="showRunOutputCheckBox"> - <property name="text"> - <string>Open application output pane when running</string> - </property> - </widget> - </item> - <item row="6" column="0"> - <widget class="QCheckBox" name="showDebugOutputCheckBox"> - <property name="text"> - <string>Open application output pane when debugging</string> + <item row="8" column="0" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="topMargin"> + <number>12</number> </property> - </widget> + <item> + <widget class="QLabel" name="buildDirLabel"> + <property name="text"> + <string>Default Build Directory:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="buildDirectoryEdit"/> + </item> + <item> + <widget class="QPushButton" name="resetButton"> + <property name="text"> + <string>Reset</string> + </property> + </widget> + </item> + </layout> </item> </layout> <zorder>saveAllFilesCheckBox</zorder> @@ -252,8 +262,8 @@ <customwidgets> <customwidget> <class>Utils::PathChooser</class> - <extends>QWidget</extends> - <header location="global">utils/pathchooser.h</header> + <extends>QLineEdit</extends> + <header>utils/pathchooser.h</header> <container>1</container> </customwidget> </customwidgets> diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 10e5af5186..4b60ccc7d4 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -47,6 +47,7 @@ #include <coreplugin/coreconstants.h> #include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/documentmanager.h> +#include <coreplugin/variablemanager.h> #include <extensionsystem/pluginmanager.h> #include <cpptools/ModelManagerInterface.h> #include <qmljs/qmljsmodelmanagerinterface.h> @@ -67,6 +68,7 @@ #include <qtsupport/qtsupportconstants.h> #include <qtsupport/qtversionmanager.h> #include <utils/QtConcurrentTools> +#include <utils/stringutils.h> #include <QDebug> #include <QDir> @@ -115,6 +117,53 @@ QString sanitize(const QString &input) return result; } +class Qt4ProjectExpander : public Utils::AbstractQtcMacroExpander +{ +public: + Qt4ProjectExpander(const QString &proFilePath, const Kit *k, const QString &bcName) : + m_proFile(proFilePath), m_kit(k), m_bcName(bcName) + { } + + bool resolveMacro(const QString &name, QString *ret) + { + QString result; + bool found = false; + if (name == QLatin1String(ProjectExplorer::Constants::VAR_CURRENTPROJECT_NAME)) { + result = m_proFile.baseName(); + found = true; + } else if (name == QLatin1String(ProjectExplorer::Constants::VAR_CURRENTPROJECT_PATH)) { + result = m_proFile.absolutePath(); + found = true; + } else if (name == QLatin1String(ProjectExplorer::Constants::VAR_CURRENTPROJECT_FILEPATH)) { + result = m_proFile.absoluteFilePath(); + found = true; + } else if (m_kit && name == QLatin1String(ProjectExplorer::Constants::VAR_CURRENTKIT_NAME)) { + result = m_kit->displayName(); + found = true; + } else if (m_kit && name == QLatin1String(ProjectExplorer::Constants::VAR_CURRENTKIT_FILESYSTEMNAME)) { + result = m_kit->fileSystemFriendlyName(); + found = true; + } else if (m_kit && name == QLatin1String(ProjectExplorer::Constants::VAR_CURRENTKIT_ID)) { + result = m_kit->id().toString(); + found = true; + } else if (name == QLatin1String(ProjectExplorer::Constants::VAR_CURRENTBUILD_NAME)) { + result = m_bcName; + found = true; + } else { + result = Core::VariableManager::instance()->value(name.toUtf8(), &found); + } + if (ret) + *ret = result; + return found; + } + +private: + QFileInfo m_proFile; + const Kit *m_kit; + QString m_bcName; + Utils::AbstractMacroExpander *m_expander; +}; + } // namespace namespace Qt4ProjectManager { @@ -1411,35 +1460,20 @@ QString Qt4Project::disabledReasonForRunConfiguration(const QString &proFilePath .arg(QFileInfo(proFilePath).fileName()); } -QString Qt4Project::shadowBuildDirectory(const QString &profilePath, const Kit *k, const QString &suffix) +QString Qt4Project::shadowBuildDirectory(const QString &proFilePath, const Kit *k, const QString &suffix) { - if (profilePath.isEmpty()) + if (proFilePath.isEmpty()) return QString(); - QFileInfo info(profilePath); + QFileInfo info(proFilePath); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); if (version && !version->supportsShadowBuilds()) return info.absolutePath(); - Utils::FileName buildDirBase = Utils::FileName::fromString(projectDirectory(profilePath)); - if (Core::DocumentManager::useProjectsDirectory() && - Core::DocumentManager::useBuildDirectory()) { - const Utils::FileName projectsDirectory = - Utils::FileName::fromString(Core::DocumentManager::projectsDirectory()); - - if (buildDirBase.isChildOf(projectsDirectory)) { - Utils::FileName buildDirectory = - Utils::FileName::fromString(Core::DocumentManager::buildDirectory()); - - buildDirectory.appendPath(buildDirBase.relativeChildPath(projectsDirectory).toString()); - buildDirBase = buildDirectory; - } - } - - buildDirBase.append(QLatin1String("-build-") + buildNameFor(k) + - QLatin1Char('-') + sanitize(suffix)); - - return QDir::cleanPath(buildDirBase.toString()); + Qt4ProjectExpander expander(proFilePath, k, suffix); + QDir projectDir = QDir(projectDirectory(proFilePath)); + QString buildPath = Utils::expandMacros(Core::DocumentManager::buildDirectory(), &expander); + return QDir::cleanPath(projectDir.absoluteFilePath(buildPath)); } QString Qt4Project::buildNameFor(const Kit *k) |