From 0215c110a592a9bbf6bf9ef6c5f161e8d704b9dc Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Thu, 16 Jun 2011 21:57:41 +0000 Subject: [PATCH] Implement scrolling to the target address. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42213 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../gui/inspector_window/MemoryView.cpp | 18 ++++++++++++++++++ .../gui/inspector_window/MemoryView.h | 4 +--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp index 9a142fc240..8bc8776691 100644 --- a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp +++ b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp @@ -73,6 +73,23 @@ MemoryView::SetTargetAddress(TeamMemoryBlock* block, target_addr_t address) } +void +MemoryView::ScrollToSelection() +{ + if (fTargetBlock != NULL) { + target_addr_t offset = fTargetAddress - fTargetBlock->BaseAddress(); + int32 lineNumber = 0; + if (fHexBlocksPerLine > 0) + lineNumber = offset / (fHexBlocksPerLine * (1 << (fHexMode - 1))); + else if (fTextCharsPerLine > 0) + lineNumber = offset / fTextCharsPerLine; + float y = lineNumber * fLineHeight; + if (!Bounds().Contains(BPoint(0.0, y))) + ScrollTo(0.0, y); + } +} + + void MemoryView::TargetedByScrollView(BScrollView* scrollView) { @@ -231,6 +248,7 @@ MemoryView::MessageReceived(BMessage* message) case MSG_TARGET_ADDRESS_CHANGED: { _RecalcScrollBars(); + ScrollToSelection(); Invalidate(); break; } diff --git a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h index 5565f61d16..74be46d8d5 100644 --- a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h +++ b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h @@ -45,9 +45,7 @@ public: void SetTargetAddress(TeamMemoryBlock* block, target_addr_t address); - - void TargetAddressChanged(target_addr_t address); - + void ScrollToSelection(); virtual void TargetedByScrollView(BScrollView* scrollView);