forked from qt-creator/qt-creator
Update debugger language aspect in run settings when qmake step changes
When QML language debugging hasn't been set to a fixed state yet by the user try to find a qmake step to decide whether to enable QML debugging by default or not. This is a hack, breaking the separation between qt build steps and debugger run settings. However, adding a generic project infrastructure for this specific use case is probably overkill... Task-number: QTCREATORBUG-11474 Change-Id: Ib65c8474b9b7ec187769c209531ff56bc8293cde Reviewed-by: Aurindam Jana <aurindam.jana@digia.com> Reviewed-by: Eike Ziller <eike.ziller@digia.com> Reviewed-by: Alessandro Portale <alessandro.portale@digia.com>
This commit is contained in:
@@ -39,6 +39,9 @@
|
|||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/runconfiguration.h>
|
#include <projectexplorer/runconfiguration.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
|
#include <projectexplorer/buildconfiguration.h>
|
||||||
|
#include <projectexplorer/buildstep.h>
|
||||||
|
#include <projectexplorer/buildsteplist.h>
|
||||||
|
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
@@ -53,6 +56,8 @@ static const char USE_QML_DEBUGGER_AUTO_KEY[] = "RunConfiguration.UseQmlDebugger
|
|||||||
static const char QML_DEBUG_SERVER_PORT_KEY[] = "RunConfiguration.QmlDebugServerPort";
|
static const char QML_DEBUG_SERVER_PORT_KEY[] = "RunConfiguration.QmlDebugServerPort";
|
||||||
static const char USE_MULTIPROCESS_KEY[] = "RunConfiguration.UseMultiProcess";
|
static const char USE_MULTIPROCESS_KEY[] = "RunConfiguration.UseMultiProcess";
|
||||||
|
|
||||||
|
using namespace ProjectExplorer;
|
||||||
|
|
||||||
namespace Debugger {
|
namespace Debugger {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -70,13 +75,15 @@ public:
|
|||||||
explicit DebuggerRunConfigWidget(DebuggerRunConfigurationAspect *aspect);
|
explicit DebuggerRunConfigWidget(DebuggerRunConfigurationAspect *aspect);
|
||||||
QString displayName() const { return tr("Debugger Settings"); }
|
QString displayName() const { return tr("Debugger Settings"); }
|
||||||
|
|
||||||
|
void showEvent(QShowEvent *event);
|
||||||
|
void update();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void useCppDebuggerClicked(bool on);
|
void useCppDebuggerClicked(bool on);
|
||||||
void useQmlDebuggerToggled(bool on);
|
void useQmlDebuggerToggled(bool on);
|
||||||
void useQmlDebuggerClicked(bool on);
|
void useQmlDebuggerClicked(bool on);
|
||||||
void qmlDebugServerPortChanged(int port);
|
void qmlDebugServerPortChanged(int port);
|
||||||
void useMultiProcessToggled(bool on);
|
void useMultiProcessToggled(bool on);
|
||||||
void update();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DebuggerRunConfigurationAspect *m_aspect; // not owned
|
DebuggerRunConfigurationAspect *m_aspect; // not owned
|
||||||
@@ -139,10 +146,19 @@ DebuggerRunConfigWidget::DebuggerRunConfigWidget(DebuggerRunConfigurationAspect
|
|||||||
layout->addLayout(qmlLayout);
|
layout->addLayout(qmlLayout);
|
||||||
layout->addWidget(m_useMultiProcess);
|
layout->addWidget(m_useMultiProcess);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
|
}
|
||||||
|
|
||||||
connect(aspect->runConfiguration()->target()->project(), SIGNAL(projectLanguagesUpdated()),
|
void DebuggerRunConfigWidget::showEvent(QShowEvent *event)
|
||||||
this, SLOT(update()));
|
{
|
||||||
update();
|
// Update the UI on every show() because the state of
|
||||||
|
// QML debugger language is hard to track.
|
||||||
|
//
|
||||||
|
// !event->spontaneous makes sure we ignore e.g. global windows events,
|
||||||
|
// when Qt Creator itself is minimized/maximized.
|
||||||
|
if (!event->spontaneous())
|
||||||
|
update();
|
||||||
|
|
||||||
|
RunConfigWidget::showEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerRunConfigWidget::update()
|
void DebuggerRunConfigWidget::update()
|
||||||
@@ -233,6 +249,20 @@ bool DebuggerRunConfigurationAspect::useCppDebugger() const
|
|||||||
bool DebuggerRunConfigurationAspect::useQmlDebugger() const
|
bool DebuggerRunConfigurationAspect::useQmlDebugger() const
|
||||||
{
|
{
|
||||||
if (m_useQmlDebugger == DebuggerRunConfigurationAspect::AutoEnabledLanguage) {
|
if (m_useQmlDebugger == DebuggerRunConfigurationAspect::AutoEnabledLanguage) {
|
||||||
|
//
|
||||||
|
// Try to find a build step (qmake) to check whether qml debugging is enabled there
|
||||||
|
// (Using the Qt metatype system to avoid a hard qt4projectmanager dependency)
|
||||||
|
//
|
||||||
|
if (BuildConfiguration *bc = runConfiguration()->target()->activeBuildConfiguration()) {
|
||||||
|
if (BuildStepList *bsl = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)) {
|
||||||
|
foreach (BuildStep *step, bsl->steps()) {
|
||||||
|
QVariant linkProperty = step->property("linkQmlDebuggingLibrary");
|
||||||
|
if (linkProperty.isValid() && linkProperty.canConvert(QVariant::Bool))
|
||||||
|
return linkProperty.toBool();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const Core::Context languages = runConfiguration()->target()->project()->projectLanguages();
|
const Core::Context languages = runConfiguration()->target()->project()->projectLanguages();
|
||||||
return languages.contains(ProjectExplorer::Constants::LANG_QMLJS)
|
return languages.contains(ProjectExplorer::Constants::LANG_QMLJS)
|
||||||
&& !languages.contains(ProjectExplorer::Constants::LANG_CXX);
|
&& !languages.contains(ProjectExplorer::Constants::LANG_CXX);
|
||||||
|
|||||||
@@ -82,6 +82,9 @@ class QMAKEPROJECTMANAGER_EXPORT QMakeStep : public ProjectExplorer::AbstractPro
|
|||||||
DebugLink
|
DebugLink
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// used in DebuggerRunConfigurationAspect
|
||||||
|
Q_PROPERTY(bool linkQmlDebuggingLibrary READ linkQmlDebuggingLibrary WRITE setLinkQmlDebuggingLibrary NOTIFY linkQmlDebuggingLibraryChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QMakeStep(ProjectExplorer::BuildStepList *parent);
|
explicit QMakeStep(ProjectExplorer::BuildStepList *parent);
|
||||||
virtual ~QMakeStep();
|
virtual ~QMakeStep();
|
||||||
|
|||||||
Reference in New Issue
Block a user