summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorVladimir Panteleev <git@thecybershadow.net>2017-10-06 09:18:38 +0000
committerLéo Lam <leo@innovatetechnologi.es>2017-10-11 11:41:26 +0200
commit3c515608570ff5983ef6c9beceb7cd37ef8f94e0 (patch)
tree2a5f2e987f7fe3b2147ca77f89fdde6fc69d087e /Source/Core
parent53ccd41049fc33a8b196a7eb02029af178ce348a (diff)
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.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinWX/Cheats/CheatSearchTab.cpp48
-rw-r--r--Source/Core/DolphinWX/Cheats/CheatSearchTab.h4
2 files changed, 52 insertions, 0 deletions
diff --git a/Source/Core/DolphinWX/Cheats/CheatSearchTab.cpp b/Source/Core/DolphinWX/Cheats/CheatSearchTab.cpp
index 6b106c248d..0fe5e03946 100644
--- a/Source/Core/DolphinWX/Cheats/CheatSearchTab.cpp
+++ b/Source/Core/DolphinWX/Cheats/CheatSearchTab.cpp
@@ -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);
diff --git a/Source/Core/DolphinWX/Cheats/CheatSearchTab.h b/Source/Core/DolphinWX/Cheats/CheatSearchTab.h
index d62a86659c..cd962a7934 100644
--- a/Source/Core/DolphinWX/Cheats/CheatSearchTab.h
+++ b/Source/Core/DolphinWX/Cheats/CheatSearchTab.h
@@ -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;