summaryrefslogtreecommitdiff
path: root/Source/Core/DebuggerWX/Src/CodeWindow.cpp
diff options
context:
space:
mode:
authorJohn Peterson <jpeterson57@gmail.com>2009-08-27 16:08:43 +0000
committerJohn Peterson <jpeterson57@gmail.com>2009-08-27 16:08:43 +0000
commit97ea0362af2964fa1213d72d292203255cd02b3e (patch)
tree33328e6a3cf68a0ae407273d36ec436c33d79503 /Source/Core/DebuggerWX/Src/CodeWindow.cpp
parent910007ef4fc9203709c0af5bea18c5f3d202449b (diff)
GUI: Renamed a file
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4081 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DebuggerWX/Src/CodeWindow.cpp')
-rw-r--r--Source/Core/DebuggerWX/Src/CodeWindow.cpp516
1 files changed, 248 insertions, 268 deletions
diff --git a/Source/Core/DebuggerWX/Src/CodeWindow.cpp b/Source/Core/DebuggerWX/Src/CodeWindow.cpp
index 11c1128b39..02a5ad5d83 100644
--- a/Source/Core/DebuggerWX/Src/CodeWindow.cpp
+++ b/Source/Core/DebuggerWX/Src/CodeWindow.cpp
@@ -70,22 +70,13 @@ extern "C" // Bitmaps
#include "../resources/toolbar_add_breakpoint.c"
}
-
class CPluginInfo;
class CPluginManager;
-static const long TOOLBAR_STYLE = wxTB_FLAT | wxTB_DOCKABLE | wxTB_TEXT;
-
-/*
-#define wxGetBitmapFromMemory(name) _wxGetBitmapFromMemory(name, sizeof(name))
-inline wxBitmap _wxGetBitmapFromMemory(const unsigned char* data, int length)
-{
- wxMemoryInputStream is(data, length);
- return(wxBitmap(wxImage(is, wxBITMAP_TYPE_ANY, -1), -1));
-}
-*/
-
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+// Main
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
BEGIN_EVENT_TABLE(CCodeWindow, wxPanel)
EVT_LISTBOX(ID_SYMBOLLIST, CCodeWindow::OnSymbolListChange)
EVT_LISTBOX(ID_CALLSTACKLIST, CCodeWindow::OnCallstackListChange)
@@ -190,11 +181,7 @@ CCodeWindow::~CCodeWindow()
{
}
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////
// Redirect old wxFrame calls
-// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
wxMenuBar *CCodeWindow::GetMenuBar()
{
return Parent->GetMenuBar();
@@ -206,6 +193,9 @@ wxAuiToolBar *CCodeWindow::GetToolBar()
/////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Events
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
void CCodeWindow::OnKeyDown(wxKeyEvent& event)
{
if ((event.GetKeyCode() == WXK_SPACE) && Parent->IsActive())
@@ -249,6 +239,185 @@ void CCodeWindow::OnHostMessage(wxCommandEvent& event)
}
}
+// The Play, Stop, Step, Skip, Go to PC and Show PC buttons go here
+void CCodeWindow::OnCodeStep(wxCommandEvent& event)
+{
+ switch (event.GetId())
+ {
+ case IDM_DEBUG_GO:
+ {
+ // [F|RES] prolly we should disable the other buttons in go mode too ...
+ if (CCPU::IsStepping())
+ {
+ CCPU::EnableStepping(false);
+ }
+ else
+ {
+ CCPU::EnableStepping(true); // Break
+ Host_UpdateLogDisplay();
+ }
+ wxThread::Sleep(20);
+ JumpToAddress(PC);
+ Update();
+ }
+ break;
+
+ case IDM_STEP:
+ SingleCPUStep();
+ break;
+
+ case IDM_STEPOVER:
+ CCPU::EnableStepping(true); // TODO: Huh?
+ break;
+
+ case IDM_SKIP:
+ PC += 4;
+ Update();
+ break;
+
+ case IDM_SETPC:
+ PC = codeview->GetSelection();
+ Update();
+ break;
+
+ case IDM_GOTOPC:
+ JumpToAddress(PC);
+ break;
+ }
+
+ UpdateButtonStates();
+ // Update all toolbars in the aui manager
+ Parent->UpdateGUI();
+}
+
+
+void CCodeWindow::JumpToAddress(u32 _Address)
+{
+ codeview->Center(_Address);
+ UpdateLists();
+}
+
+
+void CCodeWindow::OnCodeViewChange(wxCommandEvent &event)
+{
+ //PanicAlert("boo");
+ UpdateLists();
+}
+
+void CCodeWindow::OnAddrBoxChange(wxCommandEvent& event)
+{
+ ConsoleListener* Console = LogManager::GetInstance()->getConsoleListener();
+ Console->Log(LogTypes::LNOTICE, StringFromFormat(
+ "GetToolBar():%i\n", GetToolBar()).c_str());
+
+ if (!GetToolBar()) return;
+
+ wxTextCtrl* pAddrCtrl = (wxTextCtrl*)GetToolBar()->FindControl(IDM_ADDRBOX);
+ wxString txt = pAddrCtrl->GetValue();
+
+ std::string text(txt.mb_str());
+ text = StripSpaces(text);
+ if (text.size() == 8)
+ {
+ u32 addr;
+ sscanf(text.c_str(), "%08x", &addr);
+ JumpToAddress(addr);
+ }
+
+ event.Skip(1);
+}
+
+void CCodeWindow::OnCallstackListChange(wxCommandEvent& event)
+{
+ int index = callstack->GetSelection();
+ if (index >= 0) {
+ u32 address = (u32)(u64)(callstack->GetClientData(index));
+ if (address)
+ JumpToAddress(address);
+ }
+}
+
+void CCodeWindow::OnCallersListChange(wxCommandEvent& event)
+{
+ int index = callers->GetSelection();
+ if (index >= 0) {
+ u32 address = (u32)(u64)(callers->GetClientData(index));
+ if (address)
+ JumpToAddress(address);
+ }
+}
+
+void CCodeWindow::OnCallsListChange(wxCommandEvent& event)
+{
+ int index = calls->GetSelection();
+ if (index >= 0) {
+ u32 address = (u32)(u64)(calls->GetClientData(index));
+ if (address)
+ JumpToAddress(address);
+ }
+}
+
+void CCodeWindow::SingleCPUStep()
+{
+ CCPU::StepOpcode(&sync_event);
+ // if (CCPU::IsStepping())
+ // sync_event.Wait();
+ wxThread::Sleep(20);
+ // need a short wait here
+ JumpToAddress(PC);
+ Update();
+ Host_UpdateLogDisplay();
+}
+
+void CCodeWindow::UpdateLists()
+{
+ callers->Clear();
+ u32 addr = codeview->GetSelection();
+ Symbol *symbol = g_symbolDB.GetSymbolFromAddr(addr);
+ if (!symbol)
+ return;
+ for (int i = 0; i < (int)symbol->callers.size(); i++)
+ {
+ u32 caller_addr = symbol->callers[i].callAddress;
+ Symbol *caller_symbol = g_symbolDB.GetSymbolFromAddr(caller_addr);
+ if (caller_symbol) {
+ int idx = callers->Append(wxString::FromAscii(StringFromFormat("< %s (%08x)", caller_symbol->name.c_str(), caller_addr).c_str()));
+ callers->SetClientData(idx, (void*)caller_addr);
+ }
+ }
+
+ calls->Clear();
+ for (int i = 0; i < (int)symbol->calls.size(); i++)
+ {
+ u32 call_addr = symbol->calls[i].function;
+ Symbol *call_symbol = g_symbolDB.GetSymbolFromAddr(call_addr);
+ if (call_symbol) {
+ int idx = calls->Append(wxString::FromAscii(StringFromFormat("> %s (%08x)", call_symbol->name.c_str(), call_addr).c_str()));
+ calls->SetClientData(idx, (void*)call_addr);
+ }
+ }
+}
+
+void CCodeWindow::UpdateCallstack()
+{
+ callstack->Clear();
+
+ std::vector<Dolphin_Debugger::CallstackEntry> stack;
+
+ if (Dolphin_Debugger::GetCallstack(stack))
+ {
+ for (size_t i = 0; i < stack.size(); i++)
+ {
+ int idx = callstack->Append(wxString::FromAscii(stack[i].Name.c_str()));
+ callstack->SetClientData(idx, (void*)(u64)stack[i].vAddress);
+ }
+ }
+ else
+ {
+ callstack->Append(wxString::FromAscii("invalid callstack"));
+ }
+}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Load these settings before CreateGUIControls()
@@ -374,8 +543,10 @@ void CCodeWindow::CreateGUIControls(const SCoreStartupParameter& _LocalCoreStart
}
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+// Menus
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
// Create CPU Mode and Views menus
-
void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParameter, wxMenuBar * _pMenuBar)
{
// Create menu
@@ -469,84 +640,7 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam
}
-
-// Toolbar and bitmaps for the toolbar
-
-void CCodeWindow::InitBitmaps()
-{
- // load original size 48x48
- m_Bitmaps[Toolbar_DebugGo] = wxGetBitmapFromMemory(toolbar_play_png);
- m_Bitmaps[Toolbar_Step] = wxGetBitmapFromMemory(toolbar_add_breakpoint_png);
- m_Bitmaps[Toolbar_StepOver] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
- m_Bitmaps[Toolbar_Skip] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
- m_Bitmaps[Toolbar_GotoPC] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
- m_Bitmaps[Toolbar_SetPC] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
- m_Bitmaps[Toolbar_DebugPause] = wxGetBitmapFromMemory(toolbar_pause_png);
-
- // scale to 16x16 for toolbar
- for (size_t n = Toolbar_DebugGo; n < ToolbarDebugBitmapMax; n++)
- {
- m_Bitmaps[n] = wxBitmap(m_Bitmaps[n].ConvertToImage().Scale(16, 16));
- }
-}
-
-
-void CCodeWindow::PopulateToolbar(wxAuiToolBar* toolBar)
-{
- int w = m_Bitmaps[Toolbar_DebugGo].GetWidth(),
- h = m_Bitmaps[Toolbar_DebugGo].GetHeight();
-
- toolBar->SetToolBitmapSize(wxSize(w, h));
- toolBar->AddTool(IDM_DEBUG_GO, _T("Play"), m_Bitmaps[Toolbar_DebugGo]);
- toolBar->AddTool(IDM_STEP, _T("Step"), m_Bitmaps[Toolbar_Step]);
- toolBar->AddTool(IDM_STEPOVER, _T("Step Over"), m_Bitmaps[Toolbar_StepOver]);
- toolBar->AddTool(IDM_SKIP, _T("Skip"), m_Bitmaps[Toolbar_Skip]);
- toolBar->AddSeparator();
- toolBar->AddTool(IDM_GOTOPC, _T("Show PC"), m_Bitmaps[Toolbar_GotoPC]);
- toolBar->AddTool(IDM_SETPC, _T("Set PC"), m_Bitmaps[Toolbar_SetPC]);
- toolBar->AddSeparator();
- toolBar->AddControl(new wxTextCtrl(toolBar, IDM_ADDRBOX, _T("")));
-
- // after adding the buttons to the toolbar, must call Realize() to reflect
- // the changes
- toolBar->Realize();
-}
-
-
-
-
-// Shortcuts
-
-bool CCodeWindow::UseInterpreter()
-{
- return GetMenuBar()->IsChecked(IDM_INTERPRETER);
-}
-
-bool CCodeWindow::BootToPause()
-{
- return GetMenuBar()->IsChecked(IDM_BOOTTOPAUSE);
-}
-
-bool CCodeWindow::AutomaticStart()
-{
- return GetMenuBar()->IsChecked(IDM_AUTOMATICSTART);
-}
-
-bool CCodeWindow::UnlimitedJITCache()
-{
- return GetMenuBar()->IsChecked(IDM_JITUNLIMITED);
-}
-
-bool CCodeWindow::JITBlockLinking()
-{
- return GetMenuBar()->IsChecked(IDM_JITBLOCKLINKING);
-}
-
-
-
-
// CPU Mode and JIT Menu
-
void CCodeWindow::OnCPUMode(wxCommandEvent& event)
{
switch (event.GetId())
@@ -587,6 +681,28 @@ void CCodeWindow::OnCPUMode(wxCommandEvent& event)
jit.ClearCache();
}
+
+// Shortcuts
+bool CCodeWindow::UseInterpreter()
+{
+ return GetMenuBar()->IsChecked(IDM_INTERPRETER);
+}
+bool CCodeWindow::BootToPause()
+{
+ return GetMenuBar()->IsChecked(IDM_BOOTTOPAUSE);
+}
+bool CCodeWindow::AutomaticStart()
+{
+ return GetMenuBar()->IsChecked(IDM_AUTOMATICSTART);
+}
+bool CCodeWindow::UnlimitedJITCache()
+{
+ return GetMenuBar()->IsChecked(IDM_JITUNLIMITED);
+}
+bool CCodeWindow::JITBlockLinking()
+{
+ return GetMenuBar()->IsChecked(IDM_JITBLOCKLINKING);
+}
void CCodeWindow::OnJitMenu(wxCommandEvent& event)
{
switch (event.GetId())
@@ -610,190 +726,57 @@ void CCodeWindow::OnJitMenu(wxCommandEvent& event)
}
}
}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Events
-
-
-// The Play, Stop, Step, Skip, Go to PC and Show PC buttons all go here
-
-void CCodeWindow::OnCodeStep(wxCommandEvent& event)
-{
- switch (event.GetId())
- {
- case IDM_DEBUG_GO:
- {
- // [F|RES] prolly we should disable the other buttons in go mode too ...
- if (CCPU::IsStepping())
- {
- CCPU::EnableStepping(false);
- }
- else
- {
- CCPU::EnableStepping(true); // Break
- Host_UpdateLogDisplay();
- }
- wxThread::Sleep(20);
- JumpToAddress(PC);
- Update();
- }
- break;
-
- case IDM_STEP:
- SingleCPUStep();
- break;
-
- case IDM_STEPOVER:
- CCPU::EnableStepping(true); // TODO: Huh?
- break;
-
- case IDM_SKIP:
- PC += 4;
- Update();
- break;
-
- case IDM_SETPC:
- PC = codeview->GetSelection();
- Update();
- break;
-
- case IDM_GOTOPC:
- JumpToAddress(PC);
- break;
- }
-
- UpdateButtonStates();
- // Update all toolbars in the aui manager
- Parent->UpdateGUI();
-}
-
-
-void CCodeWindow::JumpToAddress(u32 _Address)
-{
- codeview->Center(_Address);
- UpdateLists();
-}
-
-
-void CCodeWindow::OnCodeViewChange(wxCommandEvent &event)
-{
- //PanicAlert("boo");
- UpdateLists();
-}
-
-void CCodeWindow::OnAddrBoxChange(wxCommandEvent& event)
+/////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Toolbar
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+void CCodeWindow::InitBitmaps()
{
- ConsoleListener* Console = LogManager::GetInstance()->getConsoleListener();
- Console->Log(LogTypes::LNOTICE, StringFromFormat(
- "GetToolBar():%i\n", GetToolBar()).c_str());
-
- if (!GetToolBar()) return;
-
- wxTextCtrl* pAddrCtrl = (wxTextCtrl*)GetToolBar()->FindControl(IDM_ADDRBOX);
- wxString txt = pAddrCtrl->GetValue();
+ // load original size 48x48
+ m_Bitmaps[Toolbar_DebugGo] = wxGetBitmapFromMemory(toolbar_play_png);
+ m_Bitmaps[Toolbar_Step] = wxGetBitmapFromMemory(toolbar_add_breakpoint_png);
+ m_Bitmaps[Toolbar_StepOver] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
+ m_Bitmaps[Toolbar_Skip] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
+ m_Bitmaps[Toolbar_GotoPC] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
+ m_Bitmaps[Toolbar_SetPC] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
+ m_Bitmaps[Toolbar_DebugPause] = wxGetBitmapFromMemory(toolbar_pause_png);
- std::string text(txt.mb_str());
- text = StripSpaces(text);
- if (text.size() == 8)
+ // scale to 16x16 for toolbar
+ for (size_t n = Toolbar_DebugGo; n < ToolbarDebugBitmapMax; n++)
{
- u32 addr;
- sscanf(text.c_str(), "%08x", &addr);
- JumpToAddress(addr);
- }
-
- event.Skip(1);
-}
-
-void CCodeWindow::OnCallstackListChange(wxCommandEvent& event)
-{
- int index = callstack->GetSelection();
- if (index >= 0) {
- u32 address = (u32)(u64)(callstack->GetClientData(index));
- if (address)
- JumpToAddress(address);
- }
-}
-
-void CCodeWindow::OnCallersListChange(wxCommandEvent& event)
-{
- int index = callers->GetSelection();
- if (index >= 0) {
- u32 address = (u32)(u64)(callers->GetClientData(index));
- if (address)
- JumpToAddress(address);
+ m_Bitmaps[n] = wxBitmap(m_Bitmaps[n].ConvertToImage().Scale(16, 16));
}
}
-void CCodeWindow::OnCallsListChange(wxCommandEvent& event)
-{
- int index = calls->GetSelection();
- if (index >= 0) {
- u32 address = (u32)(u64)(calls->GetClientData(index));
- if (address)
- JumpToAddress(address);
- }
-}
-void CCodeWindow::SingleCPUStep()
+void CCodeWindow::PopulateToolbar(wxAuiToolBar* toolBar)
{
- CCPU::StepOpcode(&sync_event);
- // if (CCPU::IsStepping())
- // sync_event.Wait();
- wxThread::Sleep(20);
- // need a short wait here
- JumpToAddress(PC);
- Update();
- Host_UpdateLogDisplay();
-}
+ int w = m_Bitmaps[Toolbar_DebugGo].GetWidth(),
+ h = m_Bitmaps[Toolbar_DebugGo].GetHeight();
-void CCodeWindow::UpdateLists()
-{
- callers->Clear();
- u32 addr = codeview->GetSelection();
- Symbol *symbol = g_symbolDB.GetSymbolFromAddr(addr);
- if (!symbol)
- return;
- for (int i = 0; i < (int)symbol->callers.size(); i++)
- {
- u32 caller_addr = symbol->callers[i].callAddress;
- Symbol *caller_symbol = g_symbolDB.GetSymbolFromAddr(caller_addr);
- if (caller_symbol) {
- int idx = callers->Append(wxString::FromAscii(StringFromFormat("< %s (%08x)", caller_symbol->name.c_str(), caller_addr).c_str()));
- callers->SetClientData(idx, (void*)caller_addr);
- }
- }
+ toolBar->SetToolBitmapSize(wxSize(w, h));
+ toolBar->AddTool(IDM_DEBUG_GO, _T("Play"), m_Bitmaps[Toolbar_DebugGo]);
+ toolBar->AddTool(IDM_STEP, _T("Step"), m_Bitmaps[Toolbar_Step]);
+ toolBar->AddTool(IDM_STEPOVER, _T("Step Over"), m_Bitmaps[Toolbar_StepOver]);
+ toolBar->AddTool(IDM_SKIP, _T("Skip"), m_Bitmaps[Toolbar_Skip]);
+ toolBar->AddSeparator();
+ toolBar->AddTool(IDM_GOTOPC, _T("Show PC"), m_Bitmaps[Toolbar_GotoPC]);
+ toolBar->AddTool(IDM_SETPC, _T("Set PC"), m_Bitmaps[Toolbar_SetPC]);
+ toolBar->AddSeparator();
+ toolBar->AddControl(new wxTextCtrl(toolBar, IDM_ADDRBOX, _T("")));
- calls->Clear();
- for (int i = 0; i < (int)symbol->calls.size(); i++)
- {
- u32 call_addr = symbol->calls[i].function;
- Symbol *call_symbol = g_symbolDB.GetSymbolFromAddr(call_addr);
- if (call_symbol) {
- int idx = calls->Append(wxString::FromAscii(StringFromFormat("> %s (%08x)", call_symbol->name.c_str(), call_addr).c_str()));
- calls->SetClientData(idx, (void*)call_addr);
- }
- }
+ // after adding the buttons to the toolbar, must call Realize() to reflect
+ // the changes
+ toolBar->Realize();
}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////
-void CCodeWindow::UpdateCallstack()
-{
- callstack->Clear();
-
- std::vector<Dolphin_Debugger::CallstackEntry> stack;
- if (Dolphin_Debugger::GetCallstack(stack))
- {
- for (size_t i = 0; i < stack.size(); i++)
- {
- int idx = callstack->Append(wxString::FromAscii(stack[i].Name.c_str()));
- callstack->SetClientData(idx, (void*)(u64)stack[i].vAddress);
- }
- }
- else
- {
- callstack->Append(wxString::FromAscii("invalid callstack"));
- }
-}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Update GUI
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
void CCodeWindow::Update()
{
@@ -806,9 +789,6 @@ void CCodeWindow::Update()
// codeview->Center(PC);
}
-
-// Update GUI
-
void CCodeWindow::UpdateButtonStates()
{
bool Initialized = (Core::GetState() != Core::CORE_UNINITIALIZED);
@@ -885,7 +865,7 @@ void CCodeWindow::RecreateToolbar(wxAuiToolBar * toolBar)
SetToolBar(NULL);
- long style = TOOLBAR_STYLE;
+ long style = wxTB_FLAT | wxTB_DOCKABLE | wxTB_TEXT;
style &= ~(wxTB_HORIZONTAL | wxTB_VERTICAL | wxTB_BOTTOM | wxTB_RIGHT | wxTB_HORZ_LAYOUT | wxTB_TOP);
wxToolBar* theToolBar = CreateToolBar(style, ID_TOOLBAR_DEBUG);
@@ -941,4 +921,4 @@ void CCodeWindow::OnStatusBar_(wxUpdateUIEvent& event)
//if(event.GetId() != IDM_ADDRBOX) DoTip(wxEmptyString);
#endif
}
-
+///////////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file