diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index ebcd04404b4067af02a4a5929f51ec72b00027b1..9c8cbdcf725b90956e53dac72a9258053151beff 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1179,15 +1179,6 @@ void DebuggerPlugin::showSettingsDialog() QLatin1String(Debugger::Constants::DEBUGGER_COMMON_SETTINGS_PAGE)); } -static RunConfigurationPtr activeRunConfiguration() -{ - ProjectExplorer::Project *project = - ProjectExplorerPlugin::instance()->currentProject(); - if (project) - return project->activeRunConfiguration(); - return RunConfigurationPtr(); -} - void DebuggerPlugin::startExternalApplication() { const DebuggerStartParametersPtr sp(new DebuggerStartParameters); @@ -1211,13 +1202,8 @@ void DebuggerPlugin::startExternalApplication() if (dlg.breakAtMain()) m_manager->breakByFunctionMain(); - RunConfigurationPtr rc = activeRunConfiguration(); - if (rc.isNull()) - rc = DebuggerRunControlFactory::createDefaultRunConfiguration(sp->executable); - - if (RunControl *runControl = m_debuggerRunControlFactory - ->create(rc, ProjectExplorer::Constants::DEBUGMODE, sp)) - runControl->start(); + if (RunControl *runControl = m_debuggerRunControlFactory->create(sp, ProjectExplorer::Constants::DEBUGMODE)) + ProjectExplorerPlugin::instance()->startRunControl(runControl, ProjectExplorer::Constants::DEBUGMODE); } void DebuggerPlugin::attachExternalApplication() @@ -1237,12 +1223,8 @@ void DebuggerPlugin::attachExternalApplication(qint64 pid, const QString &crashP sp->attachPID = pid; sp->crashParameter = crashParameter; sp->startMode = crashParameter.isEmpty() ? AttachExternal : AttachCrashedExternal; - RunConfigurationPtr rc = activeRunConfiguration(); - if (rc.isNull()) - rc = DebuggerRunControlFactory::createDefaultRunConfiguration(); - if (RunControl *runControl = m_debuggerRunControlFactory - ->create(rc, ProjectExplorer::Constants::DEBUGMODE, sp)) - runControl->start(); + if (RunControl *runControl = m_debuggerRunControlFactory->create(sp, ProjectExplorer::Constants::DEBUGMODE)) + ProjectExplorerPlugin::instance()->startRunControl(runControl, ProjectExplorer::Constants::DEBUGMODE); } void DebuggerPlugin::attachCmdLineCore() @@ -1273,12 +1255,9 @@ void DebuggerPlugin::attachCore(const QString &core, const QString &exe) sp->executable = exe; sp->coreFile = core; sp->startMode = AttachCore; - RunConfigurationPtr rc = activeRunConfiguration(); - if (rc.isNull()) - rc = DebuggerRunControlFactory::createDefaultRunConfiguration(); if (RunControl *runControl = m_debuggerRunControlFactory - ->create(rc, ProjectExplorer::Constants::DEBUGMODE, sp)) - runControl->start(); + ->create(sp, ProjectExplorer::Constants::DEBUGMODE)) + ProjectExplorerPlugin::instance()->startRunControl(runControl, ProjectExplorer::Constants::DEBUGMODE); } void DebuggerPlugin::startRemoteApplication() @@ -1312,12 +1291,8 @@ void DebuggerPlugin::startRemoteApplication() sp->serverStartScript = dlg.serverStartScript(); sp->sysRoot = dlg.sysroot(); - RunConfigurationPtr rc = activeRunConfiguration(); - if (rc.isNull()) - rc = DebuggerRunControlFactory::createDefaultRunConfiguration(); - if (RunControl *runControl = m_debuggerRunControlFactory - ->create(rc, ProjectExplorer::Constants::DEBUGMODE, sp)) - runControl->start(); + if (RunControl *runControl = m_debuggerRunControlFactory->create(sp, ProjectExplorer::Constants::DEBUGMODE)) + ProjectExplorerPlugin::instance()->startRunControl(runControl, ProjectExplorer::Constants::DEBUGMODE); } #include "debuggerplugin.moc" diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 17e11a1e0958246a5ccaebc00f287bc050345073..a924791f1689ade9021b4d2a34f329e75748e543 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -51,12 +51,6 @@ using ProjectExplorer::RunConfiguration; using ProjectExplorer::RunControl; using ProjectExplorer::LocalApplicationRunConfiguration; -DefaultLocalApplicationRunConfiguration::DefaultLocalApplicationRunConfiguration(const QString &executable) : - ProjectExplorer::LocalApplicationRunConfiguration(0), - m_executable(executable) -{ -} - //////////////////////////////////////////////////////////////////////// // // DebuggerRunControlFactory @@ -79,28 +73,19 @@ QString DebuggerRunControlFactory::displayName() const return tr("Debug"); } -RunConfigurationPtr DebuggerRunControlFactory::createDefaultRunConfiguration(const QString &executable) +RunControl *DebuggerRunControlFactory::create(const DebuggerStartParametersPtr &sp, const QString &mode) { - return RunConfigurationPtr(new DefaultLocalApplicationRunConfiguration(executable)); + return new DebuggerRunControl(m_manager, sp); } RunControl *DebuggerRunControlFactory::create(const RunConfigurationPtr &runConfiguration, - const QString &mode, - const DebuggerStartParametersPtr &sp) + const QString &mode) { QTC_ASSERT(mode == ProjectExplorer::Constants::DEBUGMODE, return 0); LocalApplicationRunConfigurationPtr rc = runConfiguration.objectCast<LocalApplicationRunConfiguration>(); QTC_ASSERT(!rc.isNull(), return 0); - return new DebuggerRunControl(m_manager, sp, rc); -} - -RunControl *DebuggerRunControlFactory::create(const RunConfigurationPtr &runConfiguration, - const QString &mode) -{ - const DebuggerStartParametersPtr sp(new DebuggerStartParameters); - sp->startMode = StartInternal; - return create(runConfiguration, mode, sp); + return new DebuggerRunControl(m_manager, rc); } QWidget *DebuggerRunControlFactory::configurationWidget(const RunConfigurationPtr &runConfiguration) @@ -120,38 +105,22 @@ QWidget *DebuggerRunControlFactory::configurationWidget(const RunConfigurationPt DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, - const DebuggerStartParametersPtr &startParameters, QSharedPointer<LocalApplicationRunConfiguration> runConfiguration) : RunControl(runConfiguration), - m_startParameters(startParameters), + m_startParameters(new DebuggerStartParameters()), m_manager(manager), m_running(false) { - connect(m_manager, SIGNAL(debuggingFinished()), - this, SLOT(debuggingFinished()), - Qt::QueuedConnection); - connect(m_manager, SIGNAL(applicationOutputAvailable(QString)), - this, SLOT(slotAddToOutputWindowInline(QString)), - Qt::QueuedConnection); - connect(m_manager, SIGNAL(inferiorPidChanged(qint64)), - this, SLOT(bringApplicationToForeground(qint64)), - Qt::QueuedConnection); - connect(this, SIGNAL(stopRequested()), - m_manager, SLOT(exitDebugger())); - + init(); if (!runConfiguration) return; - // Enhance parameters by info from the project, but do not clobber - // arguments given in the dialogs - if (m_startParameters->executable.isEmpty()) - m_startParameters->executable = runConfiguration->executable(); - if (m_startParameters->environment.empty()) - m_startParameters->environment = runConfiguration->environment().toStringList(); - if (m_startParameters->workingDir.isEmpty()) - m_startParameters->workingDir = runConfiguration->workingDirectory(); - if (m_startParameters->startMode != StartExternal) - m_startParameters->processArgs = runConfiguration->commandLineArguments(); + m_startParameters->startMode = StartInternal; + m_startParameters->executable = runConfiguration->executable(); + m_startParameters->environment = runConfiguration->environment().toStringList(); + m_startParameters->workingDir = runConfiguration->workingDirectory(); + m_startParameters->processArgs = runConfiguration->commandLineArguments(); + switch (m_startParameters->toolChainType) { case ProjectExplorer::ToolChain::UNKNOWN: case ProjectExplorer::ToolChain::INVALID: @@ -172,6 +141,34 @@ DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, runConfiguration->dumperLibraryLocations(); } +DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, const DebuggerStartParametersPtr &startParameters) + : RunControl(RunConfigurationPtr(0)), + m_startParameters(startParameters), + m_manager(manager), + m_running(false) +{ + init(); + + if (m_startParameters->environment.empty()) + m_startParameters->environment = ProjectExplorer::Environment::Environment().toStringList(); + m_startParameters->useTerminal = false; +} + +void DebuggerRunControl::init() +{ + connect(m_manager, SIGNAL(debuggingFinished()), + this, SLOT(debuggingFinished()), + Qt::QueuedConnection); + connect(m_manager, SIGNAL(applicationOutputAvailable(QString)), + this, SLOT(slotAddToOutputWindowInline(QString)), + Qt::QueuedConnection); + connect(m_manager, SIGNAL(inferiorPidChanged(qint64)), + this, SLOT(bringApplicationToForeground(qint64)), + Qt::QueuedConnection); + connect(this, SIGNAL(stopRequested()), + m_manager, SLOT(exitDebugger())); +} + void DebuggerRunControl::start() { m_running = true; diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h index 196d7ee123b7415d7d90ccea6162221d34cf42bd..641ec41467191f031fbbf373279e8d53d6fff2d8 100644 --- a/src/plugins/debugger/debuggerrunner.h +++ b/src/plugins/debugger/debuggerrunner.h @@ -67,11 +67,7 @@ public: virtual QWidget *configurationWidget(const RunConfigurationPtr &runConfiguration); - virtual ProjectExplorer::RunControl *create(const RunConfigurationPtr &runConfiguration, - const QString &mode, - const DebuggerStartParametersPtr &sp); - - static RunConfigurationPtr createDefaultRunConfiguration(const QString &executable = QString()); + ProjectExplorer::RunControl *create(const DebuggerStartParametersPtr &sp, const QString &mode); private: DebuggerStartParametersPtr m_startParameters; @@ -86,8 +82,8 @@ class DebuggerRunControl public: DebuggerRunControl(DebuggerManager *manager, - const DebuggerStartParametersPtr &startParamters, LocalApplicationRunConfigurationPtr runConfiguration); + DebuggerRunControl(DebuggerManager *manager, const DebuggerStartParametersPtr &startParameters); // ProjectExplorer::RunControl virtual void start(); @@ -104,36 +100,12 @@ private slots: void slotAddToOutputWindowInline(const QString &output); private: + void init(); DebuggerStartParametersPtr m_startParameters; DebuggerManager *m_manager; bool m_running; }; -// A default run configuration for external executables or attaching to -// running processes by id. -class DefaultLocalApplicationRunConfiguration - : public ProjectExplorer::LocalApplicationRunConfiguration -{ - Q_OBJECT -public: - explicit DefaultLocalApplicationRunConfiguration(const QString &executable = QString()); - - virtual QString executable() const { return m_executable; } - virtual RunMode runMode() const { return Gui; } - virtual QString workingDirectory() const { return QString(); } - virtual QStringList commandLineArguments() const { return QStringList(); } - virtual ProjectExplorer::Environment environment() const - { return ProjectExplorer::Environment(); } - virtual QString dumperLibrary() const { return QString(); } - virtual QStringList dumperLibraryLocations() const { return QStringList(); } - virtual ProjectExplorer::ToolChain::ToolChainType toolChainType() const - { return ProjectExplorer::ToolChain::UNKNOWN; } - virtual QWidget *configurationWidget() { return 0; } - -private: - const QString m_executable; -}; - } // namespace Internal } // namespace Debugger diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp index d2f7ec7ac2793a14b0b3c96cc0f277dd9aefaf0d..79e5566ad6807d61f37519cf456e2712ca379cb2 100644 --- a/src/plugins/projectexplorer/outputwindow.cpp +++ b/src/plugins/projectexplorer/outputwindow.cpp @@ -212,7 +212,11 @@ void OutputPane::createNewOutputWindow(RunControl *rc) agg->add(ow); agg->add(new Find::BaseTextFind(ow)); m_outputWindows.insert(rc, ow); - m_tabWidget->addTab(ow, rc->runConfiguration()->name()); + // TODO add a displayName to RunControl, can't rely on there always beeing a runconfiguration + QString name = "External Application"; + if (rc->runConfiguration()) + name = rc->runConfiguration()->name(); + m_tabWidget->addTab(ow, name); } } @@ -244,7 +248,7 @@ void OutputPane::insertLine() void OutputPane::reRunRunControl() { RunControl *rc = runControlForTab(m_tabWidget->currentIndex()); - if (rc->runConfiguration()->project() != 0) + if (rc->runConfiguration() && rc->runConfiguration()->project() != 0) rc->start(); } @@ -283,7 +287,7 @@ void OutputPane::tabChanged(int i) } else { RunControl *rc = runControlForTab(i); m_stopAction->setEnabled(rc->isRunning()); - m_reRunButton->setEnabled(!rc->isRunning() && rc->runConfiguration()->project()); + m_reRunButton->setEnabled(!rc->isRunning() && rc->runConfiguration() && rc->runConfiguration()->project()); } } @@ -300,7 +304,7 @@ void OutputPane::runControlFinished() { RunControl *rc = runControlForTab(m_tabWidget->currentIndex()); if (rc == qobject_cast<RunControl *>(sender())) { - m_reRunButton->setEnabled(rc->runConfiguration()->project()); + m_reRunButton->setEnabled(rc->runConfiguration() && rc->runConfiguration()->project()); m_stopAction->setEnabled(false); } } diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 33320cb4f379c9561d1ea84f913e3797eb56b59c..86bea41b4c1b11c446fc0158aee21f33c482bfbc 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -106,6 +106,8 @@ public: void setProjectExplorerSettings(const Internal::ProjectExplorerSettings &pes); Internal::ProjectExplorerSettings projectExplorerSettings() const; + void ProjectExplorerPlugin::startRunControl(RunControl *runControl, const QString &mode); + signals: void aboutToShowContextMenu(ProjectExplorer::Project *project, ProjectExplorer::Node *node); @@ -184,8 +186,6 @@ private slots: void loadProject(const QString &project) { openProject(project); } void currentModeChanged(Core::IMode *mode); - void ProjectExplorerPlugin::startRunControl(RunControl *runControl, const QString &mode); - private: void runProjectImpl(Project *pro); void executeRunConfiguration(const QSharedPointer<RunConfiguration> &, const QString &mode);