mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-25 07:21:14 +01:00
CheatSearchTab: Add UI for manually adding an address
Sometimes an address is already known, e.g. from existing cheat codes, and only inspecting the variable's value is desired.
This commit is contained in:
parent
53ccd41049
commit
3c51560857
@ -121,6 +121,28 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent) : wxPanel(parent)
|
||||
sizer_cheat_search_filter->Add(m_search_type, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_cheat_search_filter->AddSpacer(space5);
|
||||
|
||||
// manual address textbox
|
||||
m_textctrl_address = new wxTextCtrl(this, wxID_ANY, "0x00000000");
|
||||
m_textctrl_address->SetMinSize(WxUtils::GetTextWidgetMinSize(m_textctrl_value_x, "0x00000000"));
|
||||
m_textctrl_address->SetToolTip(
|
||||
// Gecko / ActionReplay codes do not use a 0x prefix, but the cheat search UI does
|
||||
_("An address to add manually. "
|
||||
"The 0x prefix is optional - all addresses are always in hexadecimal."));
|
||||
|
||||
m_btn_add_address = new wxButton(this, wxID_ANY, _("Add"));
|
||||
m_btn_add_address->SetToolTip(_("Add the specified address manually."));
|
||||
m_btn_add_address->Bind(wxEVT_BUTTON, &CheatSearchTab::OnAddAddressClicked, this);
|
||||
|
||||
wxBoxSizer* box_address = new wxBoxSizer(wxHORIZONTAL);
|
||||
box_address->Add(m_textctrl_address, 0, wxEXPAND);
|
||||
box_address->Add(m_btn_add_address, 1, wxLEFT, space5);
|
||||
|
||||
wxStaticBoxSizer* const sizer_cheat_add_address =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Add address"));
|
||||
sizer_cheat_add_address->AddSpacer(space5);
|
||||
sizer_cheat_add_address->Add(box_address, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_cheat_add_address->AddSpacer(space5);
|
||||
|
||||
// button sizer
|
||||
wxBoxSizer* boxButtons = new wxBoxSizer(wxHORIZONTAL);
|
||||
boxButtons->Add(m_btn_init_scan, 1);
|
||||
@ -130,6 +152,7 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent) : wxPanel(parent)
|
||||
wxBoxSizer* const sizer_right = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_right->Add(m_data_sizes, 0, wxEXPAND);
|
||||
sizer_right->Add(sizer_cheat_search_filter, 0, wxEXPAND | wxTOP, space5);
|
||||
sizer_right->Add(sizer_cheat_add_address, 0, wxEXPAND | wxTOP, space5);
|
||||
sizer_right->AddStretchSpacer(1);
|
||||
sizer_right->Add(m_label_scan_disabled, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, space5);
|
||||
sizer_right->Add(boxButtons, 0, wxEXPAND | wxTOP, space5);
|
||||
@ -207,6 +230,31 @@ void CheatSearchTab::OnNextScanClicked(wxCommandEvent&)
|
||||
UpdateCheatSearchResultsList();
|
||||
}
|
||||
|
||||
void CheatSearchTab::OnAddAddressClicked(wxCommandEvent&)
|
||||
{
|
||||
unsigned long parsed_address = 0;
|
||||
wxString address = m_textctrl_address->GetValue();
|
||||
|
||||
if (!address.ToULong(&parsed_address, address.StartsWith("0x") ? 0 : 16))
|
||||
{
|
||||
WxUtils::ShowErrorDialog(_("You must enter a valid hexadecimal value."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (parsed_address > Memory::RAM_SIZE - sizeof(double))
|
||||
{
|
||||
WxUtils::ShowErrorDialog(wxString::Format(_("Address too large (greater than RAM size).\n"
|
||||
"Did you mean to strip the cheat opcode (0x%08X)?"),
|
||||
parsed_address & Memory::RAM_MASK));
|
||||
return;
|
||||
}
|
||||
|
||||
CheatSearchResult result;
|
||||
result.address = parsed_address;
|
||||
m_search_results.push_back(result);
|
||||
UpdateCheatSearchResultsList();
|
||||
}
|
||||
|
||||
void CheatSearchTab::OnCreateARCodeClicked(wxCommandEvent&)
|
||||
{
|
||||
long idx = m_lview_search_results->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
|
||||
|
@ -42,6 +42,7 @@ private:
|
||||
bool ParseUserEnteredValue(u32* out) const;
|
||||
u32 SwapValue(u32 value) const;
|
||||
|
||||
void OnAddAddressClicked(wxCommandEvent&);
|
||||
void OnNewScanClicked(wxCommandEvent&);
|
||||
void OnNextScanClicked(wxCommandEvent&);
|
||||
void OnCreateARCodeClicked(wxCommandEvent&);
|
||||
@ -58,6 +59,9 @@ private:
|
||||
wxStaticText* m_label_results_count;
|
||||
wxTextCtrl* m_textctrl_value_x;
|
||||
|
||||
wxTextCtrl* m_textctrl_address;
|
||||
wxButton* m_btn_add_address;
|
||||
|
||||
wxButton* m_btn_create_code;
|
||||
wxButton* m_btn_init_scan;
|
||||
wxButton* m_btn_next_scan;
|
||||
|
Loading…
x
Reference in New Issue
Block a user