From 63a0065c835eaf155ca3f96719475147772ccadd Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Tue, 26 Apr 2016 17:12:26 -0400 Subject: [PATCH] Debugger: Implement part of #12729. TeamsWindow: - Add a button allowing one to specify loading a core file in addition to attaching to/creating teams. - Slight layout tweak. --- src/apps/debugger/Debugger.cpp | 21 +++++++++ src/apps/debugger/MessageCodes.h | 1 + .../gui/teams_window/TeamsWindow.cpp | 45 ++++++++++++++++++- .../gui/teams_window/TeamsWindow.h | 3 ++ 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/apps/debugger/Debugger.cpp b/src/apps/debugger/Debugger.cpp index a90468f58b..ad0cecab7c 100644 --- a/src/apps/debugger/Debugger.cpp +++ b/src/apps/debugger/Debugger.cpp @@ -444,6 +444,27 @@ Debugger::MessageReceived(BMessage* message) message->SendReply(&reply); break; } + case MSG_LOAD_CORE_TEAM: + { + TargetHostInterface* interface; + if (message->FindPointer("interface", reinterpret_cast( + &interface)) != B_OK) { + break; + } + + entry_ref ref; + if (message->FindRef("core", &ref) != B_OK) + break; + + BPath path(&ref); + if (path.InitCheck() != B_OK) + break; + + Options options; + options.coreFilePath = path.Path(); + _HandleOptions(options); + break; + } default: BApplication::MessageReceived(message); break; diff --git a/src/apps/debugger/MessageCodes.h b/src/apps/debugger/MessageCodes.h index 6d08b840d1..d2ae9d1fbf 100644 --- a/src/apps/debugger/MessageCodes.h +++ b/src/apps/debugger/MessageCodes.h @@ -76,6 +76,7 @@ enum { MSG_START_TEAM_WINDOW_CLOSED = 'stwc', MSG_START_NEW_TEAM = 'sttt', MSG_DEBUG_THIS_TEAM = 'dbtt', + MSG_LOAD_CORE_TEAM = 'lcte', MSG_SHOW_INSPECTOR_WINDOW = 'sirw', MSG_INSPECTOR_WINDOW_CLOSED = 'irwc', MSG_SHOW_EXPRESSION_WINDOW = 'seww', diff --git a/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp b/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp index aaa9ae45ae..6a5ee1124b 100644 --- a/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp +++ b/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -30,7 +31,8 @@ enum { - MSG_TEAM_SELECTION_CHANGED = 'tesc' + MSG_TEAM_SELECTION_CHANGED = 'tesc', + MSG_CHOSE_CORE_FILE = 'chcf' }; @@ -42,6 +44,8 @@ TeamsWindow::TeamsWindow(SettingsManager* settingsManager) fTeamsListView(NULL), fAttachTeamButton(NULL), fCreateTeamButton(NULL), + fLoadCoreButton(NULL), + fCoreSelectionPanel(NULL), fSettingsManager(settingsManager) { team_info info; @@ -128,6 +132,39 @@ TeamsWindow::MessageReceived(BMessage* message) break; } + case MSG_CHOSE_CORE_FILE: + case B_CANCEL: + { + delete fCoreSelectionPanel; + fCoreSelectionPanel = NULL; + if (message->what == B_CANCEL) + break; + + entry_ref ref; + if (message->FindRef("refs", &ref) != B_OK) + break; + + BMessage coreMessage(MSG_LOAD_CORE_TEAM); + coreMessage.AddPointer("interface", fTargetHostInterface); + coreMessage.AddRef("core", &ref); + be_app_messenger.SendMessage(&coreMessage); + break; + } + + case MSG_LOAD_CORE_TEAM: + { + try { + BMessenger messenger(this); + fCoreSelectionPanel = new BFilePanel(B_OPEN_PANEL, &messenger, + NULL, 0, false, new BMessage(MSG_CHOSE_CORE_FILE)); + fCoreSelectionPanel->Show(); + } catch (...) { + delete fCoreSelectionPanel; + fCoreSelectionPanel = NULL; + } + break; + } + default: BWindow::MessageReceived(message); break; @@ -166,13 +203,16 @@ TeamsWindow::_Init() BLayoutBuilder::Group<>(this, B_VERTICAL) .Add(fTeamsListView = new TeamsListView("TeamsList", fCurrentTeam, fTargetHostInterface)) - .SetInsets(1.0f, 1.0f, 1.0f, 1.0f) + .SetInsets(1.0f, 1.0f, 1.0f, 5.0f) .AddGroup(B_HORIZONTAL) .SetInsets(B_USE_DEFAULT_SPACING) .Add(fAttachTeamButton = new BButton("Attach", new BMessage( MSG_DEBUG_THIS_TEAM))) + .AddGlue() .Add(fCreateTeamButton = new BButton("Start new team" B_UTF8_ELLIPSIS, new BMessage(MSG_SHOW_START_TEAM_WINDOW))) + .Add(fLoadCoreButton = new BButton("Load core" B_UTF8_ELLIPSIS, + new BMessage(MSG_LOAD_CORE_TEAM))) .End() .End(); @@ -182,6 +222,7 @@ TeamsWindow::_Init() fAttachTeamButton->SetEnabled(false); fCreateTeamButton->SetTarget(this); + fLoadCoreButton->SetTarget(this); } diff --git a/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h b/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h index 37fe2a482d..e124d189b1 100644 --- a/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h +++ b/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h @@ -12,6 +12,7 @@ class BButton; class BListView; class BFile; +class BFilePanel; class BMessage; class SettingsManager; class TargetHostInterface; @@ -41,6 +42,8 @@ private: TeamsListView* fTeamsListView; BButton* fAttachTeamButton; BButton* fCreateTeamButton; + BButton* fLoadCoreButton; + BFilePanel* fCoreSelectionPanel; SettingsManager* fSettingsManager; };