-display disabled breakpoints with separate icon

-toggling disabled breakpoints will enable them
-confirmation on toggling breakpoints with a custom condition
This commit is contained in:
Kingcom 2013-07-10 10:56:03 +02:00
parent 9a65263230
commit 0eeebf5221
4 changed files with 39 additions and 10 deletions

View File

@ -78,6 +78,14 @@ bool CBreakPoints::IsAddressBreakPoint(u32 addr)
return bp != INVALID_BREAKPOINT && breakPoints_[bp].enabled;
}
bool CBreakPoints::IsAddressBreakPoint(u32 addr, bool* enabled)
{
size_t bp = FindBreakpoint(addr);
if (bp == INVALID_BREAKPOINT) return false;
if (enabled != NULL) *enabled = breakPoints_[bp].enabled;
return true;
}
bool CBreakPoints::IsTempBreakPoint(u32 addr)
{
size_t bp = FindBreakpoint(addr, true, true);

View File

@ -100,6 +100,7 @@ public:
static const size_t INVALID_MEMCHECK = -1;
static bool IsAddressBreakPoint(u32 addr);
static bool IsAddressBreakPoint(u32 addr, bool* enabled);
static bool IsTempBreakPoint(u32 addr);
static void AddBreakPoint(u32 addr, bool temp = false);
static void RemoveBreakPoint(u32 addr);

View File

@ -354,11 +354,12 @@ void CtrlDisAsmView::onPaint(WPARAM wParam, LPARAM lParam)
DeleteObject(backgroundPen);
// display address/symbol
if (debugger->isBreakpoint(address))
bool enabled;
if (CBreakPoints::IsAddressBreakPoint(address,&enabled))
{
textColor = 0x0000FF;
if (enabled) textColor = 0x0000FF;
int yOffset = max(-1,(rowHeight-14+1)/2);
DrawIconEx(hdc,2,rowY1+1+yOffset,breakPoint,32,32,0,0,DI_NORMAL);
DrawIconEx(hdc,2,rowY1+1+yOffset,enabled ? breakPoint : breakPointDisable,32,32,0,0,DI_NORMAL);
}
SetTextColor(hdc,textColor);
@ -613,6 +614,29 @@ void CtrlDisAsmView::redraw()
UpdateWindow(wnd);
}
void CtrlDisAsmView::toggleBreakpoint()
{
bool enabled;
if (CBreakPoints::IsAddressBreakPoint(curAddress,&enabled))
{
if (!enabled)
{
// enable disabled breakpoints
CBreakPoints::ChangeBreakPoint(curAddress,true);
} else if (CBreakPoints::GetBreakPointCondition(curAddress) != NULL)
{
// don't just delete a breakpoint with a custom condition
int ret = MessageBox(wnd,"This breakpoint has a custom condition.\nDo you want to remove it?","Confirmation",MB_YESNO);
if (ret != IDYES) return;
CBreakPoints::RemoveBreakPoint(curAddress);
} else {
// otherwise just remove breakpoint
CBreakPoints::RemoveBreakPoint(curAddress);
}
} else {
CBreakPoints::AddBreakPoint(curAddress);
}
}
void CtrlDisAsmView::onMouseDown(WPARAM wParam, LPARAM lParam, int button)
{
@ -624,7 +648,7 @@ void CtrlDisAsmView::onMouseDown(WPARAM wParam, LPARAM lParam, int button)
{
if (newAddress == curAddress && hasFocus)
{
debugger->toggleBreakpoint(curAddress);
toggleBreakpoint();
}
}
@ -650,7 +674,7 @@ void CtrlDisAsmView::onMouseUp(WPARAM wParam, LPARAM lParam, int button)
case ID_DISASM_ADDHLE:
break;
case ID_DISASM_TOGGLEBREAKPOINT:
debugger->toggleBreakpoint(curAddress);
toggleBreakpoint();
redraw();
break;
case ID_DISASM_COPYINSTRUCTIONDISASM:

View File

@ -128,11 +128,7 @@ public:
showHex=s;
}
void toggleBreakpoint()
{
debugger->toggleBreakpoint(curAddress);
redraw();
}
void toggleBreakpoint();
void scrollWindow(int lines)
{