summaryrefslogtreecommitdiff
path: root/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qtsupport/customexecutablerunconfiguration.cpp')
-rw-r--r--src/plugins/qtsupport/customexecutablerunconfiguration.cpp82
1 files changed, 51 insertions, 31 deletions
diff --git a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
index 8de9ce2ae2..e134ff83d6 100644
--- a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
+++ b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
@@ -71,7 +71,8 @@ void CustomExecutableRunConfiguration::ctor()
CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *parent) :
LocalApplicationRunConfiguration(parent, Core::Id(CUSTOM_EXECUTABLE_ID)),
m_workingDirectory(QLatin1String(Constants::DEFAULT_WORKING_DIR)),
- m_runMode(ProjectExplorer::ApplicationLauncher::Gui)
+ m_runMode(ProjectExplorer::ApplicationLauncher::Gui),
+ m_dialog(0)
{
addExtraAspect(new LocalEnvironmentAspect(this));
@@ -86,7 +87,8 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *paren
m_executable(source->m_executable),
m_workingDirectory(source->m_workingDirectory),
m_cmdArguments(source->m_cmdArguments),
- m_runMode(source->m_runMode)
+ m_runMode(source->m_runMode),
+ m_dialog(0)
{
ctor();
}
@@ -94,6 +96,12 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *paren
// Note: Qt4Project deletes all empty customexecrunconfigs for which isConfigured() == false.
CustomExecutableRunConfiguration::~CustomExecutableRunConfiguration()
{
+ if (m_dialog) {
+ emit configurationFinished();
+ disconnect(m_dialog, SIGNAL(finished(int)),
+ this, SLOT(configurationDialogFinished()));
+ delete m_dialog;
+ }
}
// Dialog embedding the CustomExecutableConfigurationWidget
@@ -104,10 +112,12 @@ class CustomExecutableDialog : public QDialog
public:
explicit CustomExecutableDialog(CustomExecutableRunConfiguration *rc, QWidget *parent = 0);
+ void accept();
+
private slots:
void changed()
{
- setOkButtonEnabled(m_runConfiguration->isConfigured());
+ setOkButtonEnabled(m_widget->isValid());
}
private:
@@ -117,6 +127,7 @@ private:
}
QDialogButtonBox *m_dialogButtonBox;
+ CustomExecutableConfigurationWidget *m_widget;
CustomExecutableRunConfiguration *m_runConfiguration;
};
@@ -125,15 +136,15 @@ CustomExecutableDialog::CustomExecutableDialog(CustomExecutableRunConfiguration
, m_dialogButtonBox(new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel))
, m_runConfiguration(rc)
{
- connect(rc, SIGNAL(changed()), this, SLOT(changed()));
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QVBoxLayout *layout = new QVBoxLayout(this);
QLabel *label = new QLabel(tr("Could not find the executable, please specify one."));
label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
layout->addWidget(label);
- QWidget *configWidget = rc->createConfigurationWidget();
- configWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
- layout->addWidget(configWidget);
+ m_widget = new CustomExecutableConfigurationWidget(rc, CustomExecutableConfigurationWidget::DelayedApply);
+ m_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ connect(m_widget, SIGNAL(validChanged()), this, SLOT(changed()));
+ layout->addWidget(m_widget);
setOkButtonEnabled(false);
connect(m_dialogButtonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(m_dialogButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
@@ -141,30 +152,39 @@ CustomExecutableDialog::CustomExecutableDialog(CustomExecutableRunConfiguration
layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
}
-bool CustomExecutableRunConfiguration::ensureConfigured(QString *errorMessage)
-{
- if (isConfigured())
- return validateExecutable(0, errorMessage);
- CustomExecutableDialog dialog(this, Core::ICore::mainWindow());
- dialog.setWindowTitle(displayName());
- const QString oldExecutable = m_executable;
- const QString oldWorkingDirectory = m_workingDirectory;
- const QString oldCmdArguments = m_cmdArguments;
- if (dialog.exec() == QDialog::Accepted)
- return validateExecutable(0, errorMessage);
- // User canceled: Hack: Silence the error dialog.
- if (errorMessage)
- *errorMessage = QLatin1String("");
- // Restore values changed by the configuration widget.
- if (m_executable != oldExecutable
- || m_workingDirectory != oldWorkingDirectory
- || m_cmdArguments != oldCmdArguments) {
- m_executable = oldExecutable;
- m_workingDirectory = oldWorkingDirectory;
- m_cmdArguments = oldCmdArguments;
- emit changed();
+void CustomExecutableDialog::accept()
+{
+ m_widget->apply();
+ QDialog::accept();
+}
+
+// CustomExecutableRunConfiguration
+
+RunConfiguration::ConfigurationState CustomExecutableRunConfiguration::ensureConfigured(QString *errorMessage)
+{
+ Q_UNUSED(errorMessage)
+ if (m_dialog) {// uhm already shown
+ *errorMessage = QLatin1String(""); // no error dialog
+ m_dialog->activateWindow();
+ m_dialog->raise();
+ return UnConfigured;
}
- return false;
+
+ m_dialog = new CustomExecutableDialog(this, Core::ICore::mainWindow());
+ connect(m_dialog, SIGNAL(finished(int)),
+ this, SLOT(configurationDialogFinished()));
+ m_dialog->setWindowTitle(displayName()); // pretty pointless
+ m_dialog->show();
+ return Waiting;
+}
+
+void CustomExecutableRunConfiguration::configurationDialogFinished()
+{
+ disconnect(m_dialog, SIGNAL(finished(int)),
+ this, SLOT(configurationDialogFinished()));
+ m_dialog->deleteLater();
+ m_dialog = 0;
+ emit configurationFinished();
}
// Search the executable in the path.
@@ -301,7 +321,7 @@ void CustomExecutableRunConfiguration::setRunMode(ApplicationLauncher::Mode runM
QWidget *CustomExecutableRunConfiguration::createConfigurationWidget()
{
- return new CustomExecutableConfigurationWidget(this);
+ return new CustomExecutableConfigurationWidget(this, CustomExecutableConfigurationWidget::InstantApply);
}
Abi CustomExecutableRunConfiguration::abi() const