Merge pull request #4220 from aldelaro5/memcheck-interface-improvements

Redo the MemCheck add dialog
This commit is contained in:
Scott Mansell 2016-09-28 13:46:25 +13:00 committed by GitHub
commit ed95115c17
3 changed files with 109 additions and 42 deletions

View File

@ -218,8 +218,8 @@ bool TMemCheck::Action(DebugInterface* debug_interface, u32 iValue, u32 addr, bo
debug_interface->GetDescription(pc).c_str(), write ? "Write" : "Read", size * 8, debug_interface->GetDescription(pc).c_str(), write ? "Write" : "Read", size * 8,
size * 2, iValue, addr, debug_interface->GetDescription(addr).c_str()); size * 2, iValue, addr, debug_interface->GetDescription(addr).c_str());
} }
if (Break)
return true; return true;
} }
return false; return false;
} }

View File

@ -3,8 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <string> #include <string>
#include <wx/checkbox.h> #include <wx/radiobut.h>
#include <wx/dialog.h>
#include <wx/sizer.h> #include <wx/sizer.h>
#include <wx/stattext.h> #include <wx/stattext.h>
#include <wx/textctrl.h> #include <wx/textctrl.h>
@ -17,58 +16,116 @@
#include "DolphinWX/Debugger/MemoryCheckDlg.h" #include "DolphinWX/Debugger/MemoryCheckDlg.h"
#include "DolphinWX/WxUtils.h" #include "DolphinWX/WxUtils.h"
#define TEXT_BOX(text) new wxStaticText(this, wxID_ANY, _(text))
MemoryCheckDlg::MemoryCheckDlg(CBreakPointWindow* parent) MemoryCheckDlg::MemoryCheckDlg(CBreakPointWindow* parent)
: wxDialog(parent, wxID_ANY, _("Memory Check")), m_parent(parent) : wxDialog(parent, wxID_ANY, _("Add a Memory Check")), m_parent(parent)
{ {
Bind(wxEVT_BUTTON, &MemoryCheckDlg::OnOK, this, wxID_OK); Bind(wxEVT_BUTTON, &MemoryCheckDlg::OnOK, this, wxID_OK);
Bind(wxEVT_RADIOBUTTON, &MemoryCheckDlg::OnRadioButtonClick, this);
m_pEditStartAddress = new wxTextCtrl(this, wxID_ANY, ""); m_textAddress = new wxStaticText(this, wxID_ANY, _("Address"));
m_pEditEndAddress = new wxTextCtrl(this, wxID_ANY, ""); m_textStartAddress = new wxStaticText(this, wxID_ANY, _("Start"));
m_pWriteFlag = new wxCheckBox(this, wxID_ANY, _("Write")); m_textStartAddress->Disable();
m_pWriteFlag->SetValue(true); m_textEndAddress = new wxStaticText(this, wxID_ANY, _("End"));
m_pReadFlag = new wxCheckBox(this, wxID_ANY, _("Read")); m_textEndAddress->Disable();
m_pEditAddress = new wxTextCtrl(this, wxID_ANY);
m_pEditStartAddress = new wxTextCtrl(this, wxID_ANY);
m_pEditStartAddress->Disable();
m_pEditEndAddress = new wxTextCtrl(this, wxID_ANY);
m_pEditEndAddress->Disable();
m_radioAddress = new wxRadioButton(this, wxID_ANY, _("With an address"), wxDefaultPosition,
wxDefaultSize, wxRB_GROUP);
m_radioRange = new wxRadioButton(this, wxID_ANY, _("Within a range"));
m_radioRead =
new wxRadioButton(this, wxID_ANY, _("Read"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
m_radioWrite = new wxRadioButton(this, wxID_ANY, _("Write"));
m_radioReadWrite = new wxRadioButton(this, wxID_ANY, _("Read and write"));
m_radioLog =
new wxRadioButton(this, wxID_ANY, _("Log"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
m_radioBreak = new wxRadioButton(this, wxID_ANY, _("Break"));
m_radioBreakLog = new wxRadioButton(this, wxID_ANY, _("Break and log"));
m_radioBreakLog->SetValue(true);
m_log_flag = new wxCheckBox(this, wxID_ANY, _("Log")); auto* sAddressBox = new wxBoxSizer(wxHORIZONTAL);
m_log_flag->SetValue(true); sAddressBox->Add(m_textAddress, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
m_break_flag = new wxCheckBox(this, wxID_ANY, _("Break")); sAddressBox->Add(m_pEditAddress, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 10);
wxStaticBoxSizer* sAddressRangeBox = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Address Range")); auto* sAddressRangeBox = new wxBoxSizer(wxHORIZONTAL);
sAddressRangeBox->Add(TEXT_BOX("Start"), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); sAddressRangeBox->Add(m_textStartAddress, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
sAddressRangeBox->Add(m_pEditStartAddress, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); sAddressRangeBox->Add(m_pEditStartAddress, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 10);
sAddressRangeBox->Add(TEXT_BOX("End"), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); sAddressRangeBox->Add(m_textEndAddress, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
sAddressRangeBox->Add(m_pEditEndAddress, 1, wxALIGN_CENTER_VERTICAL); sAddressRangeBox->Add(m_pEditEndAddress, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5);
wxStaticBoxSizer* sActionBox = new wxStaticBoxSizer(wxVERTICAL, this, _("Action")); auto* sActions = new wxStaticBoxSizer(wxVERTICAL, this, _("Action"));
sActionBox->Add(m_pWriteFlag); sActions->Add(m_radioRead, 0, wxEXPAND);
sActionBox->Add(m_pReadFlag); sActions->Add(m_radioWrite, 0, wxEXPAND);
sActions->Add(m_radioReadWrite, 0, wxEXPAND);
m_radioWrite->SetValue(true);
wxBoxSizer* sFlags = new wxStaticBoxSizer(wxVERTICAL, this, _("Flags")); auto* sFlags = new wxStaticBoxSizer(wxVERTICAL, this, _("Flags"));
sFlags->Add(m_log_flag); sFlags->Add(m_radioLog);
sFlags->Add(m_break_flag); sFlags->Add(m_radioBreak);
sFlags->Add(m_radioBreakLog);
wxBoxSizer* sControls = new wxBoxSizer(wxHORIZONTAL); auto* sOptionsBox = new wxBoxSizer(wxHORIZONTAL);
sOptionsBox->Add(sActions, 1, wxEXPAND | wxRIGHT | wxTOP | wxBOTTOM, 5);
sOptionsBox->Add(sFlags, 1, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, 5);
auto* sControls = new wxBoxSizer(wxVERTICAL);
sControls->Add(m_radioAddress, 0, wxEXPAND);
sControls->Add(sAddressBox, 0, wxEXPAND);
sControls->Add(m_radioRange, 0, wxEXPAND);
sControls->Add(sAddressRangeBox, 0, wxEXPAND); sControls->Add(sAddressRangeBox, 0, wxEXPAND);
sControls->Add(sActionBox, 0, wxEXPAND); sControls->Add(sOptionsBox, 0, wxEXPAND);
sControls->Add(sFlags, 0, wxEXPAND);
wxBoxSizer* sMainSizer = new wxBoxSizer(wxVERTICAL); auto* sMainSizer = new wxBoxSizer(wxVERTICAL);
sMainSizer->Add(sControls, 0, wxEXPAND | wxALL, 5); sMainSizer->Add(sControls, 0, wxEXPAND | wxTOP | wxRIGHT | wxLEFT, 5);
sMainSizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5); sMainSizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
SetSizerAndFit(sMainSizer); SetSizerAndFit(sMainSizer);
SetFocus(); SetFocus();
m_pEditAddress->SetFocus();
}
void MemoryCheckDlg::OnRadioButtonClick(wxCommandEvent& event)
{
if (m_radioAddress->GetValue())
{
m_pEditAddress->Enable();
m_textAddress->Enable();
m_pEditStartAddress->Disable();
m_pEditEndAddress->Disable();
m_textStartAddress->Disable();
m_textEndAddress->Disable();
}
else
{
m_pEditStartAddress->Enable();
m_textStartAddress->Enable();
m_textEndAddress->Enable();
m_pEditEndAddress->Enable();
m_pEditAddress->Disable();
m_textAddress->Disable();
}
} }
void MemoryCheckDlg::OnOK(wxCommandEvent& event) void MemoryCheckDlg::OnOK(wxCommandEvent& event)
{ {
wxString StartAddressString = m_pEditStartAddress->GetLineText(0); wxString StartAddressString;
wxString EndAddressString = m_pEditEndAddress->GetLineText(0); wxString EndAddressString;
bool OnRead = m_pReadFlag->GetValue(); if (m_radioAddress->GetValue())
bool OnWrite = m_pWriteFlag->GetValue(); {
bool Log = m_log_flag->GetValue(); StartAddressString = m_pEditAddress->GetLineText(0);
bool Break = m_break_flag->GetValue(); EndAddressString = m_pEditAddress->GetLineText(0);
}
else
{
StartAddressString = m_pEditStartAddress->GetLineText(0);
EndAddressString = m_pEditEndAddress->GetLineText(0);
}
bool OnRead = m_radioRead->GetValue() || m_radioReadWrite->GetValue();
bool OnWrite = m_radioWrite->GetValue() || m_radioReadWrite->GetValue();
bool Log = m_radioLog->GetValue() || m_radioBreakLog->GetValue();
bool Break = m_radioBreak->GetValue() || m_radioBreakLog->GetValue();
u32 StartAddress, EndAddress; u32 StartAddress, EndAddress;
bool EndAddressOK = bool EndAddressOK =

View File

@ -7,7 +7,8 @@
#include <wx/dialog.h> #include <wx/dialog.h>
class CBreakPointWindow; class CBreakPointWindow;
class wxCheckBox; class wxRadioButton;
class wxStaticText;
class wxTextCtrl; class wxTextCtrl;
class MemoryCheckDlg : public wxDialog class MemoryCheckDlg : public wxDialog
@ -17,12 +18,21 @@ public:
private: private:
CBreakPointWindow* m_parent; CBreakPointWindow* m_parent;
wxCheckBox* m_pReadFlag; wxStaticText* m_textAddress;
wxCheckBox* m_pWriteFlag; wxStaticText* m_textStartAddress;
wxCheckBox* m_log_flag; wxStaticText* m_textEndAddress;
wxCheckBox* m_break_flag; wxRadioButton* m_radioLog;
wxRadioButton* m_radioBreak;
wxRadioButton* m_radioBreakLog;
wxRadioButton* m_radioRead;
wxRadioButton* m_radioWrite;
wxRadioButton* m_radioReadWrite;
wxRadioButton* m_radioAddress;
wxRadioButton* m_radioRange;
wxTextCtrl* m_pEditAddress;
wxTextCtrl* m_pEditEndAddress; wxTextCtrl* m_pEditEndAddress;
wxTextCtrl* m_pEditStartAddress; wxTextCtrl* m_pEditStartAddress;
void OnRadioButtonClick(wxCommandEvent& event);
void OnOK(wxCommandEvent& event); void OnOK(wxCommandEvent& event);
}; };