summaryrefslogtreecommitdiff
path: root/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp')
-rw-r--r--src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp257
1 files changed, 257 insertions, 0 deletions
diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
new file mode 100644
index 0000000000..5efb108686
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp
@@ -0,0 +1,257 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2008 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.2, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+#include "qt4buildconfigwidget.h"
+#include "ui_qt4buildconfigwidget.h"
+#include "qt4project.h"
+#include "qt4projectmanager.h"
+#include "qmakestep.h"
+#include "makestep.h"
+
+#include <QtGui/QFileDialog>
+
+namespace {
+bool debug = false;
+}
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+Qt4BuildConfigWidget::Qt4BuildConfigWidget(Qt4Project *project)
+ : BuildStepConfigWidget(),
+ m_pro(project)
+{
+ m_ui = new Ui::Qt4BuildConfigWidget();
+ m_ui->setupUi(this);
+ m_ui->invalidQtWarningLabel->setVisible(false);
+
+ connect(m_ui->nameLineEdit, SIGNAL(textEdited(QString)),
+ this, SLOT(changeConfigName(QString)));
+
+ connect(m_ui->shadowBuildCheckBox, SIGNAL(clicked(bool)),
+ this, SLOT(shadowBuildCheckBoxClicked(bool)));
+
+ connect(m_ui->shadowBuildButton, SIGNAL(clicked(bool)),
+ this, SLOT(shadowBuildButtonClicked()));
+
+ connect(m_ui->shadowBuildLineEdit, SIGNAL(textEdited(QString)),
+ this, SLOT(shadowBuildLineEditTextChanged()));
+
+ connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)),
+ this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString)));
+
+ connect(m_ui->importLabel, SIGNAL(linkActivated(QString)),
+ this, SLOT(importLabelClicked()));
+
+ connect(m_pro->qt4ProjectManager()->versionManager(), SIGNAL(qtVersionsChanged()),
+ this, SLOT(setupQtVersionsComboBox()));
+
+}
+
+Qt4BuildConfigWidget::~Qt4BuildConfigWidget()
+{
+ delete m_ui;
+}
+
+QString Qt4BuildConfigWidget::displayName() const
+{
+ return tr("General");
+}
+
+void Qt4BuildConfigWidget::init(const QString &buildConfiguration)
+{
+ if (debug)
+ qDebug() << "Qt4BuildConfigWidget::init()";
+
+ m_buildConfiguration = buildConfiguration;
+
+ m_ui->nameLineEdit->setText(m_pro->displayNameFor(m_buildConfiguration));
+
+ setupQtVersionsComboBox();
+
+ bool shadowBuild = m_pro->value(buildConfiguration, "useShadowBuild").toBool();
+ m_ui->shadowBuildCheckBox->setChecked(shadowBuild);
+ m_ui->shadowBuildLineEdit->setEnabled(shadowBuild);
+ m_ui->shadowBuildLineEdit->setText(m_pro->buildDirectory(buildConfiguration));
+ shadowBuildLineEditTextChanged(); // Update the import label
+ m_ui->shadowBuildButton->setEnabled(shadowBuild);
+}
+
+void Qt4BuildConfigWidget::changeConfigName(const QString &newName)
+{
+ m_pro->setDisplayNameFor(m_buildConfiguration, newName);
+}
+
+void Qt4BuildConfigWidget::setupQtVersionsComboBox()
+{
+ if (m_buildConfiguration.isEmpty()) // not yet initialized
+ return;
+
+ disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(const QString &)),
+ this, SLOT(qtVersionComboBoxCurrentIndexChanged(const QString &)));
+
+ m_ui->qtVersionComboBox->clear();
+ m_ui->qtVersionComboBox->addItem(tr("Default Qt Version"), 0);
+
+ if(m_pro->qtVersionId(m_buildConfiguration) == 0) {
+ m_ui->qtVersionComboBox->setCurrentIndex(0);
+ m_ui->invalidQtWarningLabel->setVisible(false);
+ }
+ // Add Qt Versions to the combo box
+ QtVersionManager *vm = m_pro->qt4ProjectManager()->versionManager();
+ const QList<QtVersion *> &versions = vm->versions();
+ for(int i=0; i<versions.size(); ++i) {
+ m_ui->qtVersionComboBox->addItem(versions.at(i)->name(), versions.at(i)->uniqueId());
+
+ if(versions.at(i)->uniqueId() == m_pro->qtVersionId(m_buildConfiguration)) {
+ m_ui->qtVersionComboBox->setCurrentIndex(i+1);
+ m_ui->invalidQtWarningLabel->setVisible(!versions.at(i)->isValid());
+ }
+ }
+
+ // And connect again
+ connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(const QString &)),
+ this, SLOT(qtVersionComboBoxCurrentIndexChanged(const QString &)));
+}
+
+void Qt4BuildConfigWidget::shadowBuildButtonClicked()
+{
+ QString initialDirectory = m_ui->shadowBuildLineEdit->text();
+ if (initialDirectory.isEmpty())
+ initialDirectory = QFileInfo(m_pro->file()->fileName()).absolutePath();
+
+ QString shadowBuildDirectory =
+ QFileDialog::getExistingDirectory(this, tr("Shadow Build Directory"), initialDirectory );
+
+ if (shadowBuildDirectory != QString::null)
+ m_ui->shadowBuildLineEdit->setText(shadowBuildDirectory);
+ shadowBuildLineEditTextChanged();
+}
+
+void Qt4BuildConfigWidget::shadowBuildCheckBoxClicked(bool checked)
+{
+ m_ui->shadowBuildLineEdit->setEnabled(checked);
+ m_ui->shadowBuildButton->setEnabled(checked);
+ bool b = m_ui->shadowBuildCheckBox->isChecked();
+ m_pro->setValue(m_buildConfiguration, "useShadowBuild", b);
+ if (b)
+ m_pro->setValue(m_buildConfiguration, "buildDirectory", m_ui->shadowBuildLineEdit->text());
+ else
+ m_pro->setValue(m_buildConfiguration, "buildDirectory", QVariant(QString::null));
+}
+
+void Qt4BuildConfigWidget::shadowBuildLineEditTextChanged()
+{
+ m_pro->setValue(m_buildConfiguration, "buildDirectory", m_ui->shadowBuildLineEdit->text());
+ // if the directory already exists
+ // check if we have a build in there and
+ // offer to import it
+ m_ui->importLabel->setVisible(false);
+ if (m_ui->shadowBuildCheckBox->isChecked()) {
+ QString qtPath = m_pro->qt4ProjectManager()->versionManager()->findQtVersionFromMakefile(m_ui->shadowBuildLineEdit->text());
+ if(!qtPath.isEmpty()) {
+ m_ui->importLabel->setVisible(true);
+ }
+ }
+
+// QFileInfo fi(m_ui->shadowBuildLineEdit->text());
+// if (fi.exists()) {
+// m_ui->shadowBuildLineEdit->setStyleSheet("");
+// m_ui->shadowBuildLineEdit->setToolTip("");
+// } else {
+// m_ui->shadowBuildLineEdit->setStyleSheet("background: red;");
+// m_ui->shadowBuildLineEdit->setToolTip(tr("Directory does not exist."));
+// }
+}
+
+void Qt4BuildConfigWidget::importLabelClicked()
+{
+ if (m_ui->shadowBuildCheckBox->isChecked()) {
+ QString directory = m_ui->shadowBuildLineEdit->text();
+ if (!directory.isEmpty()) {
+ QtVersionManager *vm = m_pro->qt4ProjectManager()->versionManager();
+ QString qtPath = vm->findQtVersionFromMakefile(directory);
+ if (!qtPath.isEmpty()) {
+ QtVersion *version = vm->qtVersionForDirectory(qtPath);
+ if (!version) {
+ version = new QtVersion(QFileInfo(qtPath).baseName(), qtPath);
+ vm->addVersion(version);
+ }
+ QtVersion::QmakeBuildConfig qmakeBuildConfig = version->defaultBuildConfig();
+ qmakeBuildConfig = vm->scanMakefileForQmakeConfig(directory, qmakeBuildConfig);
+
+ // So we got all the information now apply it...
+ m_pro->setQtVersion(m_buildConfiguration, version->uniqueId());
+ // Combo box will be updated at the end
+
+ // Find qmakestep...
+ QMakeStep *qmakeStep = m_pro->qmakeStep();
+ MakeStep *makeStep = m_pro->makeStep();
+
+ qmakeStep->setValue(m_buildConfiguration, "buildConfiguration", int(qmakeBuildConfig));
+ // Adjust command line arguments, this is ugly as hell
+ // If we are switching to BuildAll we want "release" in there and no "debug"
+ // or "debug" in there and no "release"
+ // If we are switching to not BuildAl we want neither "release" nor "debug" in there
+ QStringList makeCmdArguments = makeStep->value(m_buildConfiguration, "makeargs").toStringList();
+ bool debug = qmakeBuildConfig & QtVersion::DebugBuild;
+ if (qmakeBuildConfig & QtVersion::BuildAll) {
+ makeCmdArguments.removeAll(debug ? "release" : "debug");
+ if (!makeCmdArguments.contains(debug ? "debug" : "release"))
+ makeCmdArguments.append(debug ? "debug" : "release");
+ } else {
+ makeCmdArguments.removeAll("debug");
+ makeCmdArguments.removeAll("remove");
+ }
+ makeStep->setValue(m_buildConfiguration, "makeargs", makeCmdArguments);
+ }
+ }
+ }
+ setupQtVersionsComboBox();
+}
+
+void Qt4BuildConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString &)
+{
+ //Qt Version
+ int newQtVersion;
+ if (m_ui->qtVersionComboBox->currentIndex() == 0) {
+ newQtVersion = 0;
+ } else {
+ newQtVersion = m_ui->qtVersionComboBox->itemData(m_ui->qtVersionComboBox->currentIndex()).toInt();
+ }
+ bool isValid = m_pro->qt4ProjectManager()->versionManager()->version(newQtVersion)->isValid();
+ m_ui->invalidQtWarningLabel->setVisible(!isValid);
+ if(newQtVersion != m_pro->qtVersionId(m_buildConfiguration)) {
+ m_pro->setQtVersion(m_buildConfiguration, newQtVersion);
+ m_pro->update();
+ }
+}