Debugger: Make breakpoint property dialogs less dependent on engine

... so they can be reused for global/preset breakpoints later.

Change-Id: I34493f3b702605054c1ea227f56ed286eb77fcca
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2018-08-20 14:28:17 +02:00
parent 39e78bd3f6
commit 6203fb5db1

View File

@@ -310,7 +310,7 @@ class BreakpointDialog : public QDialog
Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::BreakHandler) Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::BreakHandler)
public: public:
explicit BreakpointDialog(const DebuggerEngine *engine, QWidget *parent = nullptr); explicit BreakpointDialog(unsigned int enabledParts, QWidget *parent = nullptr);
bool showDialog(BreakpointParameters *data, BreakpointParts *parts); bool showDialog(BreakpointParameters *data, BreakpointParts *parts);
void setParameters(const BreakpointParameters &data); void setParameters(const BreakpointParameters &data);
@@ -367,8 +367,8 @@ private:
QDialogButtonBox *m_buttonBox; QDialogButtonBox *m_buttonBox;
}; };
BreakpointDialog::BreakpointDialog(const DebuggerEngine *engine, QWidget *parent) BreakpointDialog::BreakpointDialog(unsigned int enabledParts, QWidget *parent)
: QDialog(parent), m_enabledParts(~0), m_previousType(UnknownBreakpointType), : QDialog(parent), m_enabledParts(enabledParts), m_previousType(UnknownBreakpointType),
m_firstTypeChange(true) m_firstTypeChange(true)
{ {
setWindowTitle(tr("Edit Breakpoint Properties")); setWindowTitle(tr("Edit Breakpoint Properties"));
@@ -497,15 +497,6 @@ BreakpointDialog::BreakpointDialog(const DebuggerEngine *engine, QWidget *parent
m_buttonBox = new QDialogButtonBox(this); m_buttonBox = new QDialogButtonBox(this);
m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
if (engine) {
if (!engine->hasCapability(BreakConditionCapability))
m_enabledParts &= ~ConditionPart;
if (!engine->hasCapability(BreakModuleCapability))
m_enabledParts &= ~ModulePart;
if (!engine->hasCapability(TracePointCapability))
m_enabledParts &= ~TracePointPart;
}
auto basicLayout = new QFormLayout(groupBoxBasic); auto basicLayout = new QFormLayout(groupBoxBasic);
basicLayout->addRow(m_labelType, m_comboBoxType); basicLayout->addRow(m_labelType, m_comboBoxType);
basicLayout->addRow(m_labelFileName, m_pathChooserFileName); basicLayout->addRow(m_labelFileName, m_pathChooserFileName);
@@ -854,7 +845,7 @@ class MultiBreakPointsDialog : public QDialog
Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::BreakHandler) Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::BreakHandler)
public: public:
MultiBreakPointsDialog(bool canUseConditions, QWidget *parent); MultiBreakPointsDialog(unsigned int enabledParts, QWidget *parent);
QString condition() const { return m_lineEditCondition->text(); } QString condition() const { return m_lineEditCondition->text(); }
int ignoreCount() const { return m_spinBoxIgnoreCount->value(); } int ignoreCount() const { return m_spinBoxIgnoreCount->value(); }
@@ -873,7 +864,7 @@ private:
QDialogButtonBox *m_buttonBox; QDialogButtonBox *m_buttonBox;
}; };
MultiBreakPointsDialog::MultiBreakPointsDialog(bool canUseConditions, QWidget *parent) : MultiBreakPointsDialog::MultiBreakPointsDialog(unsigned int enabledParts, QWidget *parent) :
QDialog(parent) QDialog(parent)
{ {
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
@@ -889,7 +880,7 @@ MultiBreakPointsDialog::MultiBreakPointsDialog(bool canUseConditions, QWidget *p
m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
auto formLayout = new QFormLayout; auto formLayout = new QFormLayout;
if (canUseConditions) if (enabledParts & ConditionPart)
formLayout->addRow(tr("&Condition:"), m_lineEditCondition); formLayout->addRow(tr("&Condition:"), m_lineEditCondition);
formLayout->addRow(tr("&Ignore count:"), m_spinBoxIgnoreCount); formLayout->addRow(tr("&Ignore count:"), m_spinBoxIgnoreCount);
formLayout->addRow(tr("&Thread specification:"), m_lineEditThreadSpec); formLayout->addRow(tr("&Thread specification:"), m_lineEditThreadSpec);
@@ -1730,13 +1721,25 @@ void BreakHandler::removeBreakpoint(const Breakpoint &bp)
} }
} }
static unsigned int engineBreakpointCapabilities(DebuggerEngine *engine)
{
unsigned int enabledParts = ~0;
if (!engine->hasCapability(BreakConditionCapability))
enabledParts &= ~ConditionPart;
if (!engine->hasCapability(BreakModuleCapability))
enabledParts &= ~ModulePart;
if (!engine->hasCapability(TracePointCapability))
enabledParts &= ~TracePointPart;
return enabledParts;
}
void BreakHandler::editBreakpoint(const Breakpoint &bp, QWidget *parent) void BreakHandler::editBreakpoint(const Breakpoint &bp, QWidget *parent)
{ {
QTC_ASSERT(bp, return); QTC_ASSERT(bp, return);
BreakpointParameters params = bp->requestedParameters(); BreakpointParameters params = bp->requestedParameters();
BreakpointParts parts = NoParts; BreakpointParts parts = NoParts;
BreakpointDialog dialog(m_engine, parent); BreakpointDialog dialog(engineBreakpointCapabilities(m_engine), parent);
if (!dialog.showDialog(&params, &parts)) if (!dialog.showDialog(&params, &parts))
return; return;
@@ -1762,12 +1765,9 @@ void BreakHandler::editBreakpoints(const Breakpoints &bps, QWidget *parent)
} }
// This allows to change properties of multiple breakpoints at a time. // This allows to change properties of multiple breakpoints at a time.
if (!bp) QTC_ASSERT(bp, return);
return;
const bool canUseConditions = m_engine->hasCapability(BreakConditionCapability); MultiBreakPointsDialog dialog(engineBreakpointCapabilities(m_engine), parent);
MultiBreakPointsDialog dialog(canUseConditions, parent);
dialog.setCondition(bp->condition()); dialog.setCondition(bp->condition());
dialog.setIgnoreCount(bp->ignoreCount()); dialog.setIgnoreCount(bp->ignoreCount());
dialog.setThreadSpec(bp->threadSpec()); dialog.setThreadSpec(bp->threadSpec());
@@ -2501,7 +2501,7 @@ void BreakpointManager::executeAddBreakpointDialog()
{ {
BreakpointParameters data(BreakpointByFileAndLine); BreakpointParameters data(BreakpointByFileAndLine);
BreakpointParts parts = NoParts; BreakpointParts parts = NoParts;
BreakpointDialog dialog(nullptr, ICore::dialogParent()); BreakpointDialog dialog(~0, ICore::dialogParent());
dialog.setWindowTitle(tr("Add Breakpoint")); dialog.setWindowTitle(tr("Add Breakpoint"));
if (dialog.showDialog(&data, &parts)) if (dialog.showDialog(&data, &parts))
BreakpointManager::createBreakpoint(data); BreakpointManager::createBreakpoint(data);