diff --git a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp index e68632c21b..0b9f82ff27 100644 --- a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -31,6 +32,7 @@ BreakpointsView::BreakpointsView(Team* team, Listener* listener) fConfigureExceptionsButton(NULL), fToggleBreakpointButton(NULL), fRemoveBreakpointButton(NULL), + fStopOnImageLoadCheckBox(NULL), fListener(listener) { SetName("Breakpoints"); @@ -95,6 +97,12 @@ BreakpointsView::MessageReceived(BMessage* message) _HandleBreakpointAction(message->what); break; + case MSG_STOP_ON_IMAGE_LOAD: + { + fListener->SetStopOnImageLoadRequested( + fStopOnImageLoadCheckBox->Value() == B_CONTROL_ON); + break; + } default: BGroupView::MessageReceived(message); break; @@ -108,6 +116,7 @@ BreakpointsView::AttachedToWindow() fConfigureExceptionsButton->SetTarget(Window()); fToggleBreakpointButton->SetTarget(this); fRemoveBreakpointButton->SetTarget(this); + fStopOnImageLoadCheckBox->SetTarget(this); } @@ -153,6 +162,9 @@ BreakpointsView::_Init() .AddGroup(B_HORIZONTAL, B_USE_SMALL_SPACING) .SetInsets(B_USE_SMALL_SPACING) .AddGlue() + .Add(fStopOnImageLoadCheckBox = new BCheckBox( + "Stop on image load")) + .AddStrut(5) .Add(fConfigureExceptionsButton = new BButton( "Configure exceptions" B_UTF8_ELLIPSIS)) .Add(fRemoveBreakpointButton = new BButton("Remove")) @@ -163,6 +175,9 @@ BreakpointsView::_Init() MSG_SHOW_EXCEPTION_CONFIG_WINDOW)); fToggleBreakpointButton->SetMessage(new BMessage(MSG_ENABLE_BREAKPOINT)); fRemoveBreakpointButton->SetMessage(new BMessage(MSG_CLEAR_BREAKPOINT)); + fStopOnImageLoadCheckBox->SetMessage(new BMessage(MSG_STOP_ON_IMAGE_LOAD)); + fStopOnImageLoadCheckBox->SetExplicitAlignment(BAlignment( + B_ALIGN_HORIZONTAL_UNSET, B_ALIGN_VERTICAL_CENTER)); _UpdateButtons(); } diff --git a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h index 6a42537021..45504df0fe 100644 --- a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h +++ b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h @@ -12,6 +12,7 @@ class BButton; +class BCheckBox; class BreakpointsView : public BGroupView, @@ -57,6 +58,7 @@ private: BButton* fConfigureExceptionsButton; BButton* fToggleBreakpointButton; BButton* fRemoveBreakpointButton; + BCheckBox* fStopOnImageLoadCheckBox; Listener* fListener; }; @@ -79,6 +81,8 @@ public: bool enabled) = 0; virtual void ClearWatchpointRequested( Watchpoint* watchpoint) = 0; + + virtual void SetStopOnImageLoadRequested(bool enabled) = 0; }; diff --git a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp index c414097708..99088fd88c 100644 --- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp @@ -234,16 +234,6 @@ void TeamWindow::MessageReceived(BMessage* message) { switch (message->what) { - case MSG_STOP_ON_IMAGE_LOAD: - { - BMenuItem* item; - if (message->FindPointer("source", (void **)&item) != B_OK) - break; - bool enable = !item->IsMarked(); - fListener->SetStopOnImageLoadRequested(enable); - item->SetMarked(enable); - break; - } case MSG_TEAM_RESTART_REQUESTED: { fListener->TeamRestartRequested(); @@ -778,6 +768,13 @@ TeamWindow::ClearWatchpointRequested(Watchpoint* watchpoint) } +void +TeamWindow::SetStopOnImageLoadRequested(bool enabled) +{ + fListener->SetStopOnImageLoadRequested(enabled); +} + + void TeamWindow::ValueNodeValueRequested(CpuState* cpuState, ValueNodeContainer* container, ValueNode* valueNode) @@ -975,10 +972,6 @@ TeamWindow::_Init() MSG_TEAM_RESTART_REQUESTED), 'R', B_SHIFT_KEY); menu->AddItem(item); item->SetTarget(this); - item = new BMenuItem("Stop on image load", new BMessage( - MSG_STOP_ON_IMAGE_LOAD)); - item->SetTarget(this); - menu->AddItem(item); item = new BMenuItem("Close", new BMessage(B_QUIT_REQUESTED), 'W'); menu->AddItem(item); diff --git a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h index 2f4d411967..9db8453a02 100644 --- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h +++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h @@ -104,6 +104,8 @@ private: virtual void ClearWatchpointRequested( Watchpoint* watchpoint); + virtual void SetStopOnImageLoadRequested(bool enabled); + // SourceView::Listener virtual void SetBreakpointRequested(target_addr_t address,