Debugger: Re-enable breakpoint property editing before debugger start

Amends 3b5ecac23.

Task-number: QTCREATORBUG-20970
Change-Id: I8206b16bc17a4d3830b8e517c7e952efabcf4609
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2018-08-20 15:03:25 +02:00
parent 0c1191886a
commit 7dcfe86c34
2 changed files with 64 additions and 12 deletions

View File

@@ -1458,7 +1458,7 @@ bool BreakHandler::tryClaimBreakpoint(const GlobalBreakpoint &gbp)
if (Utils::anyOf(bps, [gbp](const Breakpoint &bp) { return bp->globalBreakpoint() == gbp; })) if (Utils::anyOf(bps, [gbp](const Breakpoint &bp) { return bp->globalBreakpoint() == gbp; }))
return false; return false;
if (!m_engine->acceptsBreakpoint(gbp->parameters())) { if (!m_engine->acceptsBreakpoint(gbp->requestedParameters())) {
m_engine->showMessage(QString("BREAKPOINT %1 IS NOT ACCEPTED BY ENGINE %2") m_engine->showMessage(QString("BREAKPOINT %1 IS NOT ACCEPTED BY ENGINE %2")
.arg(gbp->displayName()).arg(objectName())); .arg(gbp->displayName()).arg(objectName()));
return false; return false;
@@ -1800,7 +1800,7 @@ BreakpointItem::BreakpointItem(const GlobalBreakpoint &gbp)
: m_globalBreakpoint(gbp) : m_globalBreakpoint(gbp)
{ {
if (gbp) if (gbp)
m_requestedParameters = gbp->parameters(); m_requestedParameters = gbp->requestedParameters();
} }
BreakpointItem::~BreakpointItem() BreakpointItem::~BreakpointItem()
@@ -2554,9 +2554,9 @@ bool BreakpointManager::setData(const QModelIndex &idx, const QVariant &value, i
if (ev.as<QMouseEvent>(QEvent::MouseButtonDblClick)) { if (ev.as<QMouseEvent>(QEvent::MouseButtonDblClick)) {
if (GlobalBreakpoint gbp = findBreakpointByIndex(idx)) { if (GlobalBreakpoint gbp = findBreakpointByIndex(idx)) {
// if (idx.column() >= BreakpointAddressColumn) if (idx.column() >= BreakpointAddressColumn)
// editBreakpoints({gbp}, ev.view()); editBreakpoints({gbp}, ev.view());
// else else
gotoLocation(gbp); gotoLocation(gbp);
} else { } else {
BreakpointManager::executeAddBreakpointDialog(); BreakpointManager::executeAddBreakpointDialog();
@@ -2575,9 +2575,6 @@ bool BreakpointManager::contextMenuEvent(const ItemViewEvent &ev)
const GlobalBreakpoints selectedBreakpoints = findBreakpointsByIndex(selectedIndices); const GlobalBreakpoints selectedBreakpoints = findBreakpointsByIndex(selectedIndices);
const bool breakpointsEnabled = selectedBreakpoints.isEmpty() || selectedBreakpoints.at(0)->isEnabled(); const bool breakpointsEnabled = selectedBreakpoints.isEmpty() || selectedBreakpoints.at(0)->isEnabled();
// QList<LocationItem *> selectedLocations;
// const bool locationsEnabled = selectedLocations.isEmpty() || selectedLocations.at(0)->params.enabled;
auto menu = new QMenu; auto menu = new QMenu;
addAction(menu, tr("Add Breakpoint..."), true, &BreakpointManager::executeAddBreakpointDialog); addAction(menu, tr("Add Breakpoint..."), true, &BreakpointManager::executeAddBreakpointDialog);
@@ -2589,9 +2586,9 @@ bool BreakpointManager::contextMenuEvent(const ItemViewEvent &ev)
gbp->deleteBreakpoint(); gbp->deleteBreakpoint();
}); });
// addAction(menu, tr("Edit Selected Breakpoints..."), addAction(menu, tr("Edit Selected Breakpoints..."),
// !selectedBreakpoints.isEmpty(), !selectedBreakpoints.isEmpty(),
// [this, selectedBreakpoints, ev] { editBreakpoints(selectedBreakpoints, ev.view()); }); [this, selectedBreakpoints, ev] { editBreakpoints(selectedBreakpoints, ev.view()); });
addAction(menu, addAction(menu,
selectedBreakpoints.size() > 1 selectedBreakpoints.size() > 1
@@ -2664,6 +2661,59 @@ void BreakpointManager::executeDeleteAllBreakpointsDialog()
gbp->deleteBreakpoint(); gbp->deleteBreakpoint();
} }
void BreakpointManager::editBreakpoint(const GlobalBreakpoint &gbp, QWidget *parent)
{
QTC_ASSERT(gbp, return);
BreakpointParts parts = NoParts;
BreakpointParameters params = gbp->requestedParameters();
BreakpointDialog dialog(~0, parent);
if (!dialog.showDialog(&params, &parts))
return;
gbp->destroyMarker();
gbp->deleteBreakpoint();
BreakpointManager::createBreakpoint(params);
}
void BreakpointManager::editBreakpoints(const GlobalBreakpoints &gbps, QWidget *parent)
{
QTC_ASSERT(!gbps.isEmpty(), return);
GlobalBreakpoint gbp = gbps.at(0);
if (gbps.size() == 1) {
editBreakpoint(gbp, parent);
return;
}
// This allows to change properties of multiple breakpoints at a time.
QTC_ASSERT(gbp, return);
BreakpointParameters params = gbp->requestedParameters();
MultiBreakPointsDialog dialog(~0, parent);
dialog.setCondition(params.condition);
dialog.setIgnoreCount(params.ignoreCount);
dialog.setThreadSpec(params.threadSpec);
if (dialog.exec() == QDialog::Rejected)
return;
const QString newCondition = dialog.condition();
const int newIgnoreCount = dialog.ignoreCount();
const int newThreadSpec = dialog.threadSpec();
for (GlobalBreakpoint gbp : gbps) {
QTC_ASSERT(gbp, continue);
BreakpointParameters newParams = gbp->requestedParameters();
newParams.condition = newCondition;
newParams.ignoreCount = newIgnoreCount;
newParams.threadSpec = newThreadSpec;
gbp->destroyMarker();
gbp->deleteBreakpoint();
BreakpointManager::createBreakpoint(newParams);
}
}
void BreakpointManager::saveSessionData() void BreakpointManager::saveSessionData()
{ {
QList<QVariant> list; QList<QVariant> list;

View File

@@ -89,7 +89,7 @@ public:
bool isEnabled() const { return m_params.enabled; } bool isEnabled() const { return m_params.enabled; }
void setEnabled(bool enabled); void setEnabled(bool enabled);
const BreakpointParameters &parameters() const { return m_params; } const BreakpointParameters &requestedParameters() const { return m_params; }
private: private:
friend class BreakHandler; friend class BreakHandler;
@@ -326,6 +326,8 @@ private:
bool contextMenuEvent(const Utils::ItemViewEvent &ev); bool contextMenuEvent(const Utils::ItemViewEvent &ev);
void gotoLocation(const GlobalBreakpoint &gbp) const; void gotoLocation(const GlobalBreakpoint &gbp) const;
void editBreakpoint(const GlobalBreakpoint &gbp, QWidget *parent);
void editBreakpoints(const GlobalBreakpoints &gbps, QWidget *parent);
}; };
} // namespace Internal } // namespace Internal