diff --git a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp index bef78872c1..0f8f1263f9 100644 --- a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp +++ b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp @@ -3,8 +3,7 @@ // Refer to the license.txt file included. #include -#include -#include +#include #include #include #include @@ -17,58 +16,116 @@ #include "DolphinWX/Debugger/MemoryCheckDlg.h" #include "DolphinWX/WxUtils.h" -#define TEXT_BOX(text) new wxStaticText(this, wxID_ANY, _(text)) - 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_RADIOBUTTON, &MemoryCheckDlg::OnRadioButtonClick, this); - m_pEditStartAddress = new wxTextCtrl(this, wxID_ANY, ""); - m_pEditEndAddress = new wxTextCtrl(this, wxID_ANY, ""); - m_pWriteFlag = new wxCheckBox(this, wxID_ANY, _("Write")); - m_pWriteFlag->SetValue(true); - m_pReadFlag = new wxCheckBox(this, wxID_ANY, _("Read")); + m_textAddress = new wxStaticText(this, wxID_ANY, _("Address")); + m_textStartAddress = new wxStaticText(this, wxID_ANY, _("Start")); + m_textStartAddress->Disable(); + m_textEndAddress = new wxStaticText(this, wxID_ANY, _("End")); + 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")); - m_log_flag->SetValue(true); - m_break_flag = new wxCheckBox(this, wxID_ANY, _("Break")); + auto* sAddressBox = new wxBoxSizer(wxHORIZONTAL); + sAddressBox->Add(m_textAddress, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); + sAddressBox->Add(m_pEditAddress, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 10); - wxStaticBoxSizer* sAddressRangeBox = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Address Range")); - sAddressRangeBox->Add(TEXT_BOX("Start"), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); - sAddressRangeBox->Add(m_pEditStartAddress, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); - sAddressRangeBox->Add(TEXT_BOX("End"), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); - sAddressRangeBox->Add(m_pEditEndAddress, 1, wxALIGN_CENTER_VERTICAL); + auto* sAddressRangeBox = new wxBoxSizer(wxHORIZONTAL); + sAddressRangeBox->Add(m_textStartAddress, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); + sAddressRangeBox->Add(m_pEditStartAddress, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 10); + sAddressRangeBox->Add(m_textEndAddress, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); + sAddressRangeBox->Add(m_pEditEndAddress, 1, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); - wxStaticBoxSizer* sActionBox = new wxStaticBoxSizer(wxVERTICAL, this, _("Action")); - sActionBox->Add(m_pWriteFlag); - sActionBox->Add(m_pReadFlag); + auto* sActions = new wxStaticBoxSizer(wxVERTICAL, this, _("Action")); + sActions->Add(m_radioRead, 0, wxEXPAND); + sActions->Add(m_radioWrite, 0, wxEXPAND); + sActions->Add(m_radioReadWrite, 0, wxEXPAND); + m_radioWrite->SetValue(true); - wxBoxSizer* sFlags = new wxStaticBoxSizer(wxVERTICAL, this, _("Flags")); - sFlags->Add(m_log_flag); - sFlags->Add(m_break_flag); + auto* sFlags = new wxStaticBoxSizer(wxVERTICAL, this, _("Flags")); + sFlags->Add(m_radioLog); + 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(sActionBox, 0, wxEXPAND); - sControls->Add(sFlags, 0, wxEXPAND); + sControls->Add(sOptionsBox, 0, wxEXPAND); - wxBoxSizer* sMainSizer = new wxBoxSizer(wxVERTICAL); - sMainSizer->Add(sControls, 0, wxEXPAND | wxALL, 5); + auto* sMainSizer = new wxBoxSizer(wxVERTICAL); + sMainSizer->Add(sControls, 0, wxEXPAND | wxTOP | wxRIGHT | wxLEFT, 5); sMainSizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5); SetSizerAndFit(sMainSizer); 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) { - wxString StartAddressString = m_pEditStartAddress->GetLineText(0); - wxString EndAddressString = m_pEditEndAddress->GetLineText(0); - bool OnRead = m_pReadFlag->GetValue(); - bool OnWrite = m_pWriteFlag->GetValue(); - bool Log = m_log_flag->GetValue(); - bool Break = m_break_flag->GetValue(); + wxString StartAddressString; + wxString EndAddressString; + if (m_radioAddress->GetValue()) + { + StartAddressString = m_pEditAddress->GetLineText(0); + 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; bool EndAddressOK = diff --git a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h index 135ff489ba..ca3357cf7f 100644 --- a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h +++ b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h @@ -7,7 +7,8 @@ #include class CBreakPointWindow; -class wxCheckBox; +class wxRadioButton; +class wxStaticText; class wxTextCtrl; class MemoryCheckDlg : public wxDialog @@ -17,12 +18,21 @@ public: private: CBreakPointWindow* m_parent; - wxCheckBox* m_pReadFlag; - wxCheckBox* m_pWriteFlag; - wxCheckBox* m_log_flag; - wxCheckBox* m_break_flag; + wxStaticText* m_textAddress; + wxStaticText* m_textStartAddress; + wxStaticText* m_textEndAddress; + 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_pEditStartAddress; + void OnRadioButtonClick(wxCommandEvent& event); void OnOK(wxCommandEvent& event); };