diff --git a/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp b/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp index 239b6f5738..031bb6ba9b 100644 --- a/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp @@ -1,6 +1,6 @@ /* * Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de. - * Copyright 2011, Rene Gollent, rene@gollent.com. + * Copyright 2011-2013, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ @@ -11,12 +11,17 @@ #include #include +#include +#include +#include #include "table/TableColumns.h" #include "Architecture.h" +#include "AutoDeleter.h" #include "CpuState.h" #include "GuiSettingsUtils.h" +#include "MessageCodes.h" #include "Register.h" #include "UiUtils.h" @@ -229,6 +234,48 @@ RegistersView::TableRowInvoked(Table* table, int32 rowIndex) } +void +RegistersView::TableCellMouseDown(Table* table, int32 rowIndex, + int32 columnIndex, BPoint screenWhere, uint32 buttons) +{ + if ((buttons & B_SECONDARY_MOUSE_BUTTON) == 0) + return; + + BVariant value; + if (!fRegisterTableModel->GetValueAt(rowIndex, columnIndex, value)) + return; + + BPopUpMenu* menu = new(std::nothrow)BPopUpMenu("Options"); + if (menu == NULL) + return; + + ObjectDeleter menuDeleter(menu); + BMessage* message = new(std::nothrow)BMessage(MSG_SHOW_INSPECTOR_WINDOW); + if (message == NULL) + return; + + message->AddUInt64("address", value.ToUInt64()); + + ObjectDeleter messageDeleter(message); + BMenuItem* item = new(std::nothrow)BMenuItem("Inspect", message); + if (item == NULL) + return; + + messageDeleter.Detach(); + ObjectDeleter itemDeleter(item); + if (!menu->AddItem(item)) + return; + + itemDeleter.Detach(); + menu->SetTargetForItems(Window()); + menuDeleter.Detach(); + + BRect mouseRect(screenWhere, screenWhere); + mouseRect.InsetBy(-4.0, -4.0); + menu->Go(screenWhere, true, false, mouseRect, true); +} + + void RegistersView::_Init() { diff --git a/src/apps/debugger/user_interface/gui/team_window/RegistersView.h b/src/apps/debugger/user_interface/gui/team_window/RegistersView.h index 8c680928c8..e3c0b27e4f 100644 --- a/src/apps/debugger/user_interface/gui/team_window/RegistersView.h +++ b/src/apps/debugger/user_interface/gui/team_window/RegistersView.h @@ -1,5 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2013, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ #ifndef REGISTERS_VIEW_H @@ -35,6 +36,10 @@ private: // TableListener virtual void TableRowInvoked(Table* table, int32 rowIndex); + virtual void TableCellMouseDown(Table* table, int32 rowIndex, + int32 columnIndex, BPoint screenWhere, + uint32 buttons); + void _Init(); private: