[haiku-commits] r42216 - haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window

  • From: anevilyak@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 17 Jun 2011 00:45:41 +0200 (CEST)

Author: anevilyak
Date: 2011-06-17 00:45:40 +0200 (Fri, 17 Jun 2011)
New Revision: 42216
Changeset: https://dev.haiku-os.org/changeset/42216

Modified:
   
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
   
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h
   
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp
Log:
* Add previous/next block navigation buttons.
* Fix a calculation error with respect to the last line of the block.



Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
===================================================================
--- 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
       2011-06-16 22:36:22 UTC (rev 42215)
+++ 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
       2011-06-16 22:45:40 UTC (rev 42216)
@@ -9,7 +9,9 @@
 
 #include <Alert.h>
 #include <Application.h>
+#include <Autolock.h>
 #include <Button.h>
+#include <ControlLook.h>
 #include <LayoutBuilder.h>
 #include <ScrollView.h>
 #include <TextControl.h>
@@ -22,6 +24,12 @@
 #include "UserInterface.h"
 
 
+enum {
+       MSG_NAVIGATE_PREVIOUS_BLOCK = 'npbl',
+       MSG_NAVIGATE_NEXT_BLOCK         = 'npnl'
+};
+
+
 InspectorWindow::InspectorWindow(::Team* team, UserInterfaceListener* listener)
        :
        BWindow(BRect(100, 100, 700, 500), "Inspector", B_TITLED_WINDOW,
@@ -99,9 +107,15 @@
 
        BLayoutBuilder::Group<>(this, B_VERTICAL)
                .SetInsets(4.0f, 4.0f, 4.0f, 4.0f)
-               .Add(fAddressInput = new BTextControl("addrInput",
+               .AddGroup(B_HORIZONTAL, 4.0f)
+                       .Add(fAddressInput = new BTextControl("addrInput",
                        "Target Address:", "",
                        new BMessage(MSG_INSPECT_ADDRESS)))
+                       .Add(fPreviousBlockButton = new BButton("navPrevious", 
"<",
+                               new BMessage(MSG_NAVIGATE_PREVIOUS_BLOCK)))
+                       .Add(fNextBlockButton = new BButton("navNext", ">",
+                               new BMessage(MSG_NAVIGATE_NEXT_BLOCK)))
+               .End()
                .AddGroup(B_HORIZONTAL, 4.0f)
                        .Add(fHexMode = new BMenuField("outputStyle", "Hex 
Mode:",
                                hexMenu))
@@ -119,6 +133,10 @@
        scrollView->SetTarget(fMemoryView = MemoryView::Create());
 
        fAddressInput->SetTarget(this);
+       fPreviousBlockButton->SetTarget(this);
+       fNextBlockButton->SetTarget(this);
+       fPreviousBlockButton->SetEnabled(false);
+       fNextBlockButton->SetEnabled(false);
 
        hexMenu->SetLabelFromMarked(true);
        hexMenu->SetTargetForItems(fMemoryView);
@@ -138,27 +156,36 @@
        switch (msg->what) {
                case MSG_INSPECT_ADDRESS:
                {
-                       ExpressionParser parser;
-                       parser.SetSupportHexInput(true);
                        target_addr_t address = 0;
-                       const char* addressExpression = fAddressInput->Text();
-                       BString errorMessage;
-                       try {
-                               address = 
parser.EvaluateToInt64(addressExpression);
-                       } catch(ParseException parseError) {
-                               errorMessage.SetToFormat("Failed to parse 
address: %s",
-                                       parseError.message.String());
-                       } catch(...) {
-                               errorMessage.SetToFormat(
-                                       "Unknown error while parsing address");
+                       bool addressValid = false;
+                       if (msg->FindUInt64("address", &address) != B_OK)
+                       {
+                               ExpressionParser parser;
+                               parser.SetSupportHexInput(true);
+                               const char* addressExpression = 
fAddressInput->Text();
+                               BString errorMessage;
+                               try {
+                                       address = 
parser.EvaluateToInt64(addressExpression);
+                               } catch(ParseException parseError) {
+                                       errorMessage.SetToFormat("Failed to 
parse address: %s",
+                                               parseError.message.String());
+                               } catch(...) {
+                                       errorMessage.SetToFormat(
+                                               "Unknown error while parsing 
address");
+                               }
+
+                               if (errorMessage.Length() > 0) {
+                                       BAlert* alert = new(std::nothrow) 
BAlert("Inspect Address",
+                                               errorMessage.String(), "Close");
+                                       if (alert != NULL)
+                                               alert->Go();
+                               } else
+                                       addressValid = true;
+                       } else {
+                               addressValid = true;
                        }
 
-                       if (errorMessage.Length() > 0) {
-                               BAlert* alert = new(std::nothrow) 
BAlert("Inspect Address",
-                                       errorMessage.String(), "Close");
-                               if (alert != NULL)
-                                       alert->Go();
-                       } else {
+                       if (addressValid) {
                                if (fCurrentBlock != NULL
                                        && !fCurrentBlock->Contains(address)) {
                                        fCurrentBlock->ReleaseReference();
@@ -177,6 +204,31 @@
                        }
                        break;
                }
+               case MSG_NAVIGATE_PREVIOUS_BLOCK:
+               case MSG_NAVIGATE_NEXT_BLOCK:
+               {
+                       if (fCurrentBlock != NULL)
+                       {
+                               target_addr_t address = 
fCurrentBlock->BaseAddress();
+                               if (msg->what == MSG_NAVIGATE_PREVIOUS_BLOCK)
+                                       address -= fCurrentBlock->Size();
+                               else
+                                       address += fCurrentBlock->Size();
+
+                               BMessage setMessage(MSG_INSPECT_ADDRESS);
+                               setMessage.AddUInt64("address", address);
+                               PostMessage(&setMessage);
+                       }
+                       break;
+               }
+               {
+                       break;
+               }
+               default:
+               {
+                       BWindow::MessageReceived(msg);
+                       break;
+               }
        }
 }
 
@@ -192,6 +244,11 @@
 void
 InspectorWindow::MemoryBlockRetrieved(TeamMemoryBlock* block)
 {
-       fCurrentBlock = block;
-       fMemoryView->SetTargetAddress(block, fCurrentAddress);
+       BAutolock lock(this);
+       if (lock.IsLocked()) {
+               fCurrentBlock = block;
+               fMemoryView->SetTargetAddress(block, fCurrentAddress);
+               fPreviousBlockButton->SetEnabled(true);
+               fNextBlockButton->SetEnabled(true);
+       }
 }

Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h
===================================================================
--- 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h
 2011-06-16 22:36:22 UTC (rev 42215)
+++ 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h
 2011-06-16 22:45:40 UTC (rev 42216)
@@ -45,6 +45,8 @@
        BMenuField*                                     fHexMode;
        BMenuField*                                     fTextMode;
        MemoryView*                                     fMemoryView;
+       BButton*                                        fPreviousBlockButton;
+       BButton*                                        fNextBlockButton;
        TeamMemoryBlock*                        fCurrentBlock;
        target_addr_t                           fCurrentAddress;
        ::Team*                                         fTeam;

Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp
===================================================================
--- 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp
    2011-06-16 22:36:22 UTC (rev 42215)
+++ 
haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp
    2011-06-16 22:45:40 UTC (rev 42216)
@@ -163,11 +163,11 @@
                PopState();
 
                if (fHexMode != HexModeNone) {
-                       if (currentAddress + (currentBlocksPerLine * 
hexBlockSize)
+                       if (currentAddress + (currentBlocksPerLine * 
blockByteSize)
                                > maxAddress) {
                                currentCharsPerLine = maxAddress - 
currentAddress;
                                currentBlocksPerLine = currentCharsPerLine
-                                       / hexBlockSize;
+                                       / blockByteSize;
                        }
 
                        for (int32 j = 0; j < currentBlocksPerLine; j++) {


Other related posts:

  • » [haiku-commits] r42216 - haiku/trunk/src/apps/debugger/user_interface/gui/inspector_window - anevilyak