diff options
| author | Mat M <mathew1800@gmail.com> | 2017-04-30 18:32:29 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-30 18:32:29 -0400 |
| commit | 1bad3bef4b5d5acf9cb2e3d1d0845dc0204849d3 (patch) | |
| tree | 77c171fb27dc53cfa0adf35114974efe156df0d0 /Source/Core/DolphinWX/Debugger/MemoryWindow.cpp | |
| parent | 344767a258fd84b5d2a9fdcffb061cca66a51269 (diff) | |
| parent | 683462679bbff94e46d9b491e7a96601c4da214b (diff) | |
Merge pull request #5344 from lioncash/table
MemoryWindow: Minor cleanup
Diffstat (limited to 'Source/Core/DolphinWX/Debugger/MemoryWindow.cpp')
| -rw-r--r-- | Source/Core/DolphinWX/Debugger/MemoryWindow.cpp | 267 |
1 files changed, 160 insertions, 107 deletions
diff --git a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp index 6f4553657c..dffb04069b 100644 --- a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp +++ b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp @@ -40,13 +40,13 @@ enum { - IDM_MEM_ADDRBOX, - IDM_SYMBOLLIST, - IDM_SETVALBUTTON, + IDM_ADDRESS_SEARCH_CTRL, + IDM_SYMBOL_LIST, + IDM_SET_VALUE_BUTTON, IDM_DUMP_MEMORY, IDM_DUMP_MEM2, IDM_DUMP_FAKEVMEM, - IDM_VALBOX, + IDM_VALUE_TEXT_CTRL, IDM_DATA_TYPE_RBOX, IDM_FIND_NEXT, IDM_FIND_PREVIOUS, @@ -55,62 +55,32 @@ enum IDM_MEMCHECK_OPTIONS_CHANGE }; -BEGIN_EVENT_TABLE(CMemoryWindow, wxPanel) -EVT_BUTTON(IDM_SETVALBUTTON, CMemoryWindow::SetMemoryValue) -EVT_BUTTON(IDM_DUMP_MEMORY, CMemoryWindow::OnDumpMemory) -EVT_BUTTON(IDM_DUMP_MEM2, CMemoryWindow::OnDumpMem2) -EVT_BUTTON(IDM_DUMP_FAKEVMEM, CMemoryWindow::OnDumpFakeVMEM) -EVT_RADIOBOX(IDM_DATA_TYPE_RBOX, CMemoryWindow::OnDataTypeChanged) -EVT_BUTTON(IDM_FIND_NEXT, CMemoryWindow::OnFindNext) -EVT_BUTTON(IDM_FIND_PREVIOUS, CMemoryWindow::OnFindPrevious) -EVT_RADIOBUTTON(IDM_MEMCHECK_OPTIONS_CHANGE, CMemoryWindow::OnMemCheckOptionChange) -EVT_CHECKBOX(IDM_MEMCHECK_OPTIONS_CHANGE, CMemoryWindow::OnMemCheckOptionChange) -END_EVENT_TABLE() - CMemoryWindow::CMemoryWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxPanel(parent, id, pos, size, style, name) { - DebugInterface* di = &PowerPC::debug_interface; - - memview = new CMemoryView(di, this); - memview->Bind(DOLPHIN_EVT_MEMORY_VIEW_DATA_TYPE_CHANGED, &CMemoryWindow::OnDataTypeChanged, this); - - addrbox = new wxSearchCtrl(this, IDM_MEM_ADDRBOX); - addrbox->Bind(wxEVT_TEXT, &CMemoryWindow::OnAddrBoxChange, this); - addrbox->SetDescriptiveText(_("Search Address")); + CreateGUI(); +} - valbox = - new wxTextCtrl(this, IDM_VALBOX, "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); - valbox->Bind(wxEVT_TEXT_ENTER, &CMemoryWindow::SetMemoryValueFromValBox, this); - valbox->Bind(wxEVT_TEXT, &CMemoryWindow::OnValueChanged, this); +void CMemoryWindow::CreateGUI() +{ + m_memory_view = new CMemoryView(&PowerPC::debug_interface, this); + m_memory_view->Bind(DOLPHIN_EVT_MEMORY_VIEW_DATA_TYPE_CHANGED, &CMemoryWindow::OnDataTypeChanged, + this); const int space3 = FromDIP(3); - const int space5 = FromDIP(5); - wxBoxSizer* const search_sizer = new wxBoxSizer(wxVERTICAL); - search_sizer->Add(addrbox, 0, wxEXPAND); - search_sizer->Add(valbox, 0, wxEXPAND); - search_sizer->Add(new wxButton(this, IDM_SETVALBUTTON, _("Set Value"))); + wxBoxSizer* const main_sizer = new wxBoxSizer(wxHORIZONTAL); + main_sizer->Add(m_memory_view, 20, wxEXPAND); + main_sizer->AddSpacer(space3); + main_sizer->Add(CreateRightHandSideSizer(), 0, wxEXPAND | wxTOP | wxBOTTOM, space3); + main_sizer->AddSpacer(space3); - wxBoxSizer* const dump_sizer = new wxBoxSizer(wxVERTICAL); - dump_sizer->Add(new wxButton(this, IDM_DUMP_MEMORY, _("Dump MRAM")), 0, wxEXPAND); - dump_sizer->Add(new wxButton(this, IDM_DUMP_MEM2, _("Dump EXRAM")), 0, wxEXPAND); - if (!SConfig::GetInstance().bMMU) - dump_sizer->Add(new wxButton(this, IDM_DUMP_FAKEVMEM, _("Dump FakeVMEM")), 0, wxEXPAND); - - wxStaticBoxSizer* const sizerSearchType = new wxStaticBoxSizer(wxVERTICAL, this, _("Search")); - sizerSearchType->Add(m_btn_find_next = new wxButton(this, IDM_FIND_NEXT, _("Find Next"))); - sizerSearchType->Add(m_btn_find_previous = - new wxButton(this, IDM_FIND_PREVIOUS, _("Find Previous"))); - sizerSearchType->Add(m_rb_ascii = new wxRadioButton(this, IDM_ASCII, "Ascii", wxDefaultPosition, - wxDefaultSize, wxRB_GROUP)); - sizerSearchType->Add(m_rb_hex = new wxRadioButton(this, IDM_HEX, _("Hex"))); - m_search_result_msg = - new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, - wxST_NO_AUTORESIZE | wxALIGN_CENTER_HORIZONTAL); - sizerSearchType->Add(m_search_result_msg, 0, wxEXPAND); + SetSizerAndFit(main_sizer); +} +wxSizer* CMemoryWindow::CreateRightHandSideSizer() +{ wxArrayString data_type_options; data_type_options.Add("U8"); data_type_options.Add("U16"); @@ -119,53 +89,132 @@ CMemoryWindow::CMemoryWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos data_type_options.Add("Float32"); m_rbox_data_type = new wxRadioBox(this, IDM_DATA_TYPE_RBOX, _("Data Type"), wxDefaultPosition, wxDefaultSize, data_type_options, 1); + m_rbox_data_type->Bind(wxEVT_RADIOBOX, &CMemoryWindow::OnDataTypeChanged, this); + m_rbox_data_type->SetSelection(static_cast<int>(m_memory_view->GetDataType())); + + const int space5 = FromDIP(5); + + auto* const right_sizer = new wxBoxSizer(wxVERTICAL); + right_sizer->Add(CreateSearchSizer(), 0, wxEXPAND); + right_sizer->AddSpacer(space5); + right_sizer->Add(CreateDumpSizer(), 0, wxEXPAND); + right_sizer->Add(CreateSearchTypeSizer(), 0, wxEXPAND); + right_sizer->Add(m_rbox_data_type, 0, wxEXPAND); + right_sizer->Add(CreateMemcheckOptionSizer(), 0, wxEXPAND); - wxStaticBoxSizer* const memcheck_options_sizer = - new wxStaticBoxSizer(wxVERTICAL, this, "Memory breakpoint options"); - memcheck_options_sizer->Add(rdbReadWrite = new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, - "Read and Write", wxDefaultPosition, - wxDefaultSize, wxRB_GROUP)); - memcheck_options_sizer->Add( - rdbRead = new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, "Read only")); - memcheck_options_sizer->Add( - rdbWrite = new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, "Write only")); - memcheck_options_sizer->Add(chkLog = new wxCheckBox(this, IDM_MEMCHECK_OPTIONS_CHANGE, "Log")); - - wxBoxSizer* const sizerRight = new wxBoxSizer(wxVERTICAL); - sizerRight->Add(search_sizer); - sizerRight->AddSpacer(space5); - sizerRight->Add(dump_sizer, 0, wxEXPAND); - sizerRight->Add(sizerSearchType, 0, wxEXPAND); - sizerRight->Add(m_rbox_data_type, 0, wxEXPAND); - sizerRight->Add(memcheck_options_sizer, 0, wxEXPAND); - - wxBoxSizer* const sizerBig = new wxBoxSizer(wxHORIZONTAL); - sizerBig->Add(memview, 20, wxEXPAND); - sizerBig->AddSpacer(space3); - sizerBig->Add(sizerRight, 0, wxEXPAND | wxTOP | wxBOTTOM, space3); - sizerBig->AddSpacer(space3); - - SetSizer(sizerBig); - m_rb_hex->SetValue(true); // Set defaults - chkLog->SetValue(true); - m_rbox_data_type->SetSelection(static_cast<int>(memview->GetDataType())); - - sizerRight->Fit(this); - sizerBig->Fit(this); + return right_sizer; } -void CMemoryWindow::JumpToAddress(u32 _Address) +wxSizer* CMemoryWindow::CreateSearchSizer() { - memview->Center(_Address); + m_address_search_ctrl = new wxSearchCtrl(this, IDM_ADDRESS_SEARCH_CTRL); + m_address_search_ctrl->Bind(wxEVT_TEXT, &CMemoryWindow::OnSearchAddressChanged, this); + m_address_search_ctrl->SetDescriptiveText(_("Search Address")); + + m_value_text_ctrl = new wxTextCtrl(this, IDM_VALUE_TEXT_CTRL, "", wxDefaultPosition, + wxDefaultSize, wxTE_PROCESS_ENTER); + m_value_text_ctrl->Bind(wxEVT_TEXT_ENTER, &CMemoryWindow::OnSetMemoryValueFromValBox, this); + m_value_text_ctrl->Bind(wxEVT_TEXT, &CMemoryWindow::OnValueChanged, this); + + auto* const set_value_button = new wxButton(this, IDM_SET_VALUE_BUTTON, _("Set Value")); + set_value_button->Bind(wxEVT_BUTTON, &CMemoryWindow::OnSetMemoryValue, this); + + auto* const search_sizer = new wxBoxSizer(wxVERTICAL); + search_sizer->Add(m_address_search_ctrl, 0, wxEXPAND); + search_sizer->Add(m_value_text_ctrl, 0, wxEXPAND); + search_sizer->Add(set_value_button); + + return search_sizer; } -void CMemoryWindow::SetMemoryValueFromValBox(wxCommandEvent& event) +wxSizer* CMemoryWindow::CreateDumpSizer() { - SetMemoryValue(event); - valbox->SetFocus(); + auto* const dump_mram_button = new wxButton(this, IDM_DUMP_MEMORY, _("Dump MRAM")); + dump_mram_button->Bind(wxEVT_BUTTON, &CMemoryWindow::OnDumpMemory, this); + + auto* const dump_exram_button = new wxButton(this, IDM_DUMP_MEM2, _("Dump EXRAM")); + dump_exram_button->Bind(wxEVT_BUTTON, &CMemoryWindow::OnDumpMem2, this); + + auto* const dump_sizer = new wxBoxSizer(wxVERTICAL); + dump_sizer->Add(dump_mram_button, 0, wxEXPAND); + dump_sizer->Add(dump_exram_button, 0, wxEXPAND); + + if (!SConfig::GetInstance().bMMU) + { + auto* const dump_fake_vmem_button = new wxButton(this, IDM_DUMP_FAKEVMEM, _("Dump FakeVMEM")); + dump_fake_vmem_button->Bind(wxEVT_BUTTON, &CMemoryWindow::OnDumpFakeVMEM, this); + + dump_sizer->Add(dump_fake_vmem_button, 0, wxEXPAND); + } + + return dump_sizer; } -void CMemoryWindow::SetMemoryValue(wxCommandEvent& event) +wxSizer* CMemoryWindow::CreateSearchTypeSizer() +{ + m_btn_find_next = new wxButton(this, IDM_FIND_NEXT, _("Find Next")); + m_btn_find_next->Bind(wxEVT_BUTTON, &CMemoryWindow::OnFindNext, this); + + m_btn_find_previous = new wxButton(this, IDM_FIND_PREVIOUS, _("Find Previous")); + m_btn_find_previous->Bind(wxEVT_BUTTON, &CMemoryWindow::OnFindPrevious, this); + + m_rb_ascii = + new wxRadioButton(this, IDM_ASCII, "Ascii", wxDefaultPosition, wxDefaultSize, wxRB_GROUP); + m_rb_hex = new wxRadioButton(this, IDM_HEX, _("Hex")); + m_rb_hex->SetValue(true); + + m_search_result_msg = + new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, + wxST_NO_AUTORESIZE | wxALIGN_CENTER_HORIZONTAL); + + auto* const search_type_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Search")); + search_type_sizer->Add(m_btn_find_next); + search_type_sizer->Add(m_btn_find_previous); + search_type_sizer->Add(m_rb_ascii); + search_type_sizer->Add(m_rb_hex); + search_type_sizer->Add(m_search_result_msg, 0, wxEXPAND); + + return search_type_sizer; +} + +wxSizer* CMemoryWindow::CreateMemcheckOptionSizer() +{ + m_read_write_radio_btn = new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, _("Read and Write"), + wxDefaultPosition, wxDefaultSize, wxRB_GROUP); + m_read_write_radio_btn->Bind(wxEVT_RADIOBUTTON, &CMemoryWindow::OnMemCheckOptionChange, this); + + m_read_radio_btn = new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, _("Read only")); + m_read_radio_btn->Bind(wxEVT_RADIOBUTTON, &CMemoryWindow::OnMemCheckOptionChange, this); + + m_write_radio_btn = new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, _("Write only")); + m_write_radio_btn->Bind(wxEVT_RADIOBUTTON, &CMemoryWindow::OnMemCheckOptionChange, this); + + m_log_checkbox = new wxCheckBox(this, IDM_MEMCHECK_OPTIONS_CHANGE, _("Log")); + m_log_checkbox->Bind(wxEVT_CHECKBOX, &CMemoryWindow::OnMemCheckOptionChange, this); + m_log_checkbox->SetValue(true); + + auto* const memcheck_options_sizer = + new wxStaticBoxSizer(wxVERTICAL, this, _("Memory breakpoint options")); + memcheck_options_sizer->Add(m_read_write_radio_btn); + memcheck_options_sizer->Add(m_read_radio_btn); + memcheck_options_sizer->Add(m_write_radio_btn); + memcheck_options_sizer->Add(m_log_checkbox); + + return memcheck_options_sizer; +} + +void CMemoryWindow::JumpToAddress(u32 address) +{ + m_memory_view->Center(address); +} + +void CMemoryWindow::OnSetMemoryValueFromValBox(wxCommandEvent& event) +{ + OnSetMemoryValue(event); + m_value_text_ctrl->SetFocus(); +} + +void CMemoryWindow::OnSetMemoryValue(wxCommandEvent& event) { if (!Memory::IsInitialized()) { @@ -173,35 +222,34 @@ void CMemoryWindow::SetMemoryValue(wxCommandEvent& event) return; } - std::string str_addr = WxStrToStr(addrbox->GetValue()); - std::string str_val = WxStrToStr(valbox->GetValue()); + std::string str_addr = WxStrToStr(m_address_search_ctrl->GetValue()); u32 addr; - u32 val; - - if (!TryParse(std::string("0x") + str_addr, &addr)) + if (!TryParse("0x" + str_addr, &addr)) { WxUtils::ShowErrorDialog(wxString::Format(_("Invalid address: %s"), str_addr.c_str())); return; } - if (!TryParse(std::string("0x") + str_val, &val)) + std::string str_val = WxStrToStr(m_value_text_ctrl->GetValue()); + u32 val; + if (!TryParse("0x" + str_val, &val)) { WxUtils::ShowErrorDialog(wxString::Format(_("Invalid value: %s"), str_val.c_str())); return; } PowerPC::HostWrite_U32(val, addr); - memview->Refresh(); + m_memory_view->Refresh(); } -void CMemoryWindow::OnAddrBoxChange(wxCommandEvent& event) +void CMemoryWindow::OnSearchAddressChanged(wxCommandEvent& event) { - wxString txt = addrbox->GetValue(); + wxString txt = m_address_search_ctrl->GetValue(); if (txt.size()) { u32 addr; sscanf(WxStrToStr(txt).c_str(), "%08x", &addr); - memview->Center(addr & ~3); + m_memory_view->Center(addr & ~3); } event.Skip(); @@ -209,7 +257,7 @@ void CMemoryWindow::OnAddrBoxChange(wxCommandEvent& event) void CMemoryWindow::Repopulate() { - memview->Center(PC); + m_memory_view->Center(PC); } void CMemoryWindow::OnValueChanged(wxCommandEvent&) @@ -258,7 +306,7 @@ void CMemoryWindow::OnDataTypeChanged(wxCommandEvent& ev) MemoryDataType::FloatingPoint}}; if (ev.GetId() == IDM_DATA_TYPE_RBOX) { - memview->SetDataType(map.at(ev.GetSelection())); + m_memory_view->SetDataType(map.at(ev.GetSelection())); } else { @@ -288,7 +336,7 @@ void CMemoryWindow::Search(SearchType search_type) u8* ram_ptr = nullptr; std::size_t ram_size = 0; // NOTE: We're assuming the base address is zero. - switch (memview->GetMemoryType()) + switch (m_memory_view->GetMemoryType()) { case 0: default: @@ -316,7 +364,7 @@ void CMemoryWindow::Search(SearchType search_type) } std::vector<u8> search_bytes; - wxString search_val = valbox->GetValue(); + wxString search_val = m_value_text_ctrl->GetValue(); if (m_rb_hex->GetValue()) { @@ -363,7 +411,7 @@ void CMemoryWindow::Search(SearchType search_type) // Search starting from specified address if there is one. u32 addr = 0; // Base address { - wxString addr_val = addrbox->GetValue(); + wxString addr_val = m_address_search_ctrl->GetValue(); addr_val.Trim(true).Trim(false); if (!addr_val.empty()) { @@ -408,7 +456,7 @@ void CMemoryWindow::Search(SearchType search_type) m_search_result_msg->SetLabel(_("Match Found")); u32 offset = static_cast<u32>(ptr - ram_ptr); // NOTE: SetValue() generates a synthetic wxEVT_TEXT - addrbox->SetValue(wxString::Format("%08x", offset)); + m_address_search_ctrl->SetValue(wxString::Format("%08x", offset)); m_last_search_address = offset; m_continue_search = true; return; @@ -419,8 +467,13 @@ void CMemoryWindow::Search(SearchType search_type) void CMemoryWindow::OnMemCheckOptionChange(wxCommandEvent& event) { - if (rdbReadWrite->GetValue()) - memview->SetMemCheckOptions(true, true, chkLog->GetValue()); + if (m_read_write_radio_btn->GetValue()) + { + m_memory_view->SetMemCheckOptions(true, true, m_log_checkbox->GetValue()); + } else - memview->SetMemCheckOptions(rdbRead->GetValue(), rdbWrite->GetValue(), chkLog->GetValue()); + { + m_memory_view->SetMemCheckOptions(m_read_radio_btn->GetValue(), m_write_radio_btn->GetValue(), + m_log_checkbox->GetValue()); + } } |
