diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index d8c4204ccdf7a008ab76e21bde8363c04c843c3e..a477b921b8ed6ed1c16ef046b420d6a9802a89d4 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -104,6 +104,7 @@ bool QMakeStep::init(const QString &name) m_buildConfiguration = name; const QtVersion *qtVersion = m_pro->qtVersion(name); + if (!qtVersion->isValid()) { #if defined(Q_OS_MAC) emit addToOutputWindow(tr("\n<font color=\"#ff0000\"><b>No valid Qt version set. Set one in Preferences </b></font>\n")); diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 3ff03bcc28a305115a3828fed94b71f780f7b475..6503e9b3a9883a8272954fb634fbb2d7861884c8 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -46,6 +46,7 @@ #include <QtGui/QFormLayout> #include <QtGui/QInputDialog> +#include <QtGui/QLabel> using namespace Qt4ProjectManager::Internal; using namespace Qt4ProjectManager; @@ -54,17 +55,27 @@ using ProjectExplorer::PersistentSettingsReader; using ProjectExplorer::PersistentSettingsWriter; Qt4RunConfiguration::Qt4RunConfiguration(Qt4Project *pro, QString proFilePath) - : ApplicationRunConfiguration(pro), m_proFilePath(proFilePath), m_userSetName(false) + : ApplicationRunConfiguration(pro), + m_proFilePath(proFilePath), + m_userSetName(false), + m_configWidget(0), + m_executableLabel(0), + m_workingDirectoryLabel(0) { setName(tr("Qt4RunConfiguration")); if (!m_proFilePath.isEmpty()) { updateCachedValues(); setName(QFileInfo(m_proFilePath).baseName()); } + connect(pro, SIGNAL(activeBuildConfigurationChanged()), + this, SIGNAL(effectiveExecutableChanged())); + connect(pro, SIGNAL(activeBuildConfigurationChanged()), + this, SIGNAL(effectiveWorkingDirectoryChanged())); } Qt4RunConfiguration::~Qt4RunConfiguration() { + } QString Qt4RunConfiguration::type() const @@ -72,37 +83,92 @@ QString Qt4RunConfiguration::type() const return "Qt4ProjectManager.Qt4RunConfiguration"; } -QWidget *Qt4RunConfiguration::configurationWidget() + +////// +/// Qt4RunConfigurationWidget +///// + +Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4RunConfiguration, QWidget *parent) + : QWidget(parent), m_qt4RunConfiguration(qt4RunConfiguration), m_ignoreChange(false) { - QWidget *configWidget = new QWidget; - QFormLayout *toplayout = new QFormLayout(configWidget); + QFormLayout *toplayout = new QFormLayout(this); toplayout->setMargin(0); QLabel *nameLabel = new QLabel(tr("Name:")); - QLineEdit *nameLineEdit = new QLineEdit(name()); - nameLabel->setBuddy(nameLineEdit); - toplayout->addRow(nameLabel, nameLineEdit); + m_nameLineEdit = new QLineEdit(m_qt4RunConfiguration->name()); + nameLabel->setBuddy(m_nameLineEdit); + toplayout->addRow(nameLabel, m_nameLineEdit); - QLabel *executableLabel = new QLabel(tr("Executable:")); - QLabel *executableLabel2 = new QLabel(executable()); - toplayout->addRow(executableLabel, executableLabel2); + m_executableLabel = new QLabel(m_qt4RunConfiguration->executable()); + toplayout->addRow(tr("Executable:"), m_executableLabel); - QLabel *workingDirectoryLabel = new QLabel(tr("Working Directory:")); - QLabel *workingDirectoryLabel2 = new QLabel(workingDirectory()); - toplayout->addRow(workingDirectoryLabel, workingDirectoryLabel2); + m_workingDirectoryLabel = new QLabel(m_qt4RunConfiguration->workingDirectory()); + toplayout->addRow(tr("Working Directory:"), m_workingDirectoryLabel); QLabel *argumentsLabel = new QLabel(tr("&Arguments:")); - QLineEdit *argumentsLineEdit = new QLineEdit(ProjectExplorer::Environment::joinArgumentList(commandLineArguments())); - argumentsLabel->setBuddy(argumentsLineEdit); - toplayout->addRow(argumentsLabel, argumentsLineEdit); + m_argumentsLineEdit = new QLineEdit(ProjectExplorer::Environment::joinArgumentList(qt4RunConfiguration->commandLineArguments())); + argumentsLabel->setBuddy(m_argumentsLineEdit); + toplayout->addRow(argumentsLabel, m_argumentsLineEdit); - connect(argumentsLineEdit, SIGNAL(textEdited(const QString&)), + connect(m_argumentsLineEdit, SIGNAL(textEdited(const QString&)), this, SLOT(setCommandLineArguments(const QString&))); - connect(nameLineEdit, SIGNAL(textEdited(const QString&)), + connect(m_nameLineEdit, SIGNAL(textEdited(const QString&)), this, SLOT(nameEdited(const QString&))); - return configWidget; + connect(qt4RunConfiguration, SIGNAL(commandLineArgumentsChanged(QString)), + this, SLOT(commandLineArgumentsChanged(QString))); + connect(qt4RunConfiguration, SIGNAL(nameChanged(QString)), + this, SLOT(nameChanged(QString))); + + connect(qt4RunConfiguration, SIGNAL(effectiveExecutableChanged()), + this, SLOT(effectiveExecutableChanged())); + connect(qt4RunConfiguration, SIGNAL(effectiveWorkingDirectoryChanged()), + this, SLOT(effectiveWorkingDirectoryChanged())); + +} + +void Qt4RunConfigurationWidget::setCommandLineArguments(const QString &args) +{ + m_ignoreChange = true; + m_qt4RunConfiguration->setCommandLineArguments(args); + m_ignoreChange = false; +} + +void Qt4RunConfigurationWidget::nameEdited(const QString &name) +{ + m_ignoreChange = true; + m_qt4RunConfiguration->nameEdited(name); + m_ignoreChange = false; +} + +void Qt4RunConfigurationWidget::commandLineArgumentsChanged(const QString &args) +{ + if (!m_ignoreChange) + m_argumentsLineEdit->setText(args); +} + +void Qt4RunConfigurationWidget::nameChanged(const QString &name) +{ + if (!m_ignoreChange) + m_nameLineEdit->setText(name); +} + +void Qt4RunConfigurationWidget::effectiveExecutableChanged() +{ + m_executableLabel->setText(m_qt4RunConfiguration->executable()); +} + +void Qt4RunConfigurationWidget::effectiveWorkingDirectoryChanged() +{ + m_workingDirectoryLabel->setText(m_qt4RunConfiguration->workingDirectory()); +} + +////// TODO c&p above + +QWidget *Qt4RunConfiguration::configurationWidget() +{ + return new Qt4RunConfigurationWidget(this, 0); } void Qt4RunConfiguration::save(PersistentSettingsWriter &writer) const @@ -156,6 +222,7 @@ ProjectExplorer::Environment Qt4RunConfiguration::environment() const void Qt4RunConfiguration::setCommandLineArguments(const QString &argumentsString) { m_commandLineArguments = ProjectExplorer::Environment::parseCombinedArgString(argumentsString); + emit commandLineArgumentsChanged(argumentsString); } void Qt4RunConfiguration::nameEdited(const QString &name) @@ -167,6 +234,7 @@ void Qt4RunConfiguration::nameEdited(const QString &name) setName(name); m_userSetName = true; } + emit nameChanged(name); } QString Qt4RunConfiguration::proFilePath() const @@ -222,6 +290,9 @@ void Qt4RunConfiguration::updateCachedValues() m_runMode = ProjectExplorer::ApplicationRunConfiguration::Gui; delete reader; + + emit effectiveExecutableChanged(); + emit effectiveWorkingDirectoryChanged(); } QString Qt4RunConfiguration::resolveVariables(const QString &buildConfiguration, const QString& in) const @@ -310,7 +381,7 @@ QString Qt4RunConfiguration::qmakeBuildConfigFromBuildConfiguration(const QStrin else return "release"; } else { - // Old sytle always CONFIG+=debug_and_release + // Old style always CONFIG+=debug_and_release if (qobject_cast<Qt4Project *>(project())->qtVersion(buildConfigurationName)->defaultBuildConfig() & QtVersion::DebugBuild) return "debug"; else diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h index c51ac521fe53fbe9d3b3b957d78b61598860bef0..ce1d44769e0a13f081ae49c5b8a3af1382f9e8ab 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h @@ -36,6 +36,11 @@ #include <projectexplorer/applicationrunconfiguration.h> #include <QtCore/QStringList> +#include <QtGui/QWidget> + +class QWidget; +class QLabel; +class QLineEdit; namespace Qt4ProjectManager { @@ -45,9 +50,13 @@ namespace Internal { class Qt4ProFileNode; + + class Qt4RunConfiguration : public ProjectExplorer::ApplicationRunConfiguration { Q_OBJECT + // to change the name and arguments + friend class Qt4RunConfigurationWidget; public: Qt4RunConfiguration(Qt4Project *pro, QString proFilePath); virtual ~Qt4RunConfiguration(); @@ -68,6 +77,14 @@ public: // Should just be called from qt4project, since that knows that the file changed on disc void updateCachedValues(); +signals: + void nameChanged(const QString&); + void commandLineArgumentsChanged(const QString&); + + // note those signals might not emited for every change + void effectiveExecutableChanged(); + void effectiveWorkingDirectoryChanged(); + private slots: void setCommandLineArguments(const QString &argumentsString); void nameEdited(const QString&); @@ -88,6 +105,31 @@ private: QString m_workingDir; ProjectExplorer::ApplicationRunConfiguration::RunMode m_runMode; bool m_userSetName; + QWidget *m_configWidget; + QLabel *m_executableLabel; + QLabel *m_workingDirectoryLabel; +}; + +class Qt4RunConfigurationWidget : public QWidget +{ + Q_OBJECT +public: + Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4runconfigration, QWidget *parent); +private slots: + void setCommandLineArguments(const QString &arguments); + void nameEdited(const QString &name); + // TODO connect to signals from qt4runconfiguration for changed arguments and names + void commandLineArgumentsChanged(const QString &args); + void nameChanged(const QString &name); + void effectiveExecutableChanged(); + void effectiveWorkingDirectoryChanged(); +private: + Qt4RunConfiguration *m_qt4RunConfiguration; + bool m_ignoreChange; + QLabel *m_executableLabel; + QLabel *m_workingDirectoryLabel; + QLineEdit *m_nameLineEdit; + QLineEdit *m_argumentsLineEdit; }; class Qt4RunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory