diff options
| author | John Peterson <jpeterson57@gmail.com> | 2009-08-27 16:08:43 +0000 |
|---|---|---|
| committer | John Peterson <jpeterson57@gmail.com> | 2009-08-27 16:08:43 +0000 |
| commit | 97ea0362af2964fa1213d72d292203255cd02b3e (patch) | |
| tree | 33328e6a3cf68a0ae407273d36ec436c33d79503 /Source/Core/DebuggerWX/Src/CodeWindow.cpp | |
| parent | 910007ef4fc9203709c0af5bea18c5f3d202449b (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.cpp | 516 |
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 |
