| 
									
										
										
										
											2014-10-18 17:32:50 -04:00
										 |  |  | // Copyright 2014 Dolphin Emulator Project
 | 
					
						
							| 
									
										
										
										
											2015-05-18 01:08:10 +02:00
										 |  |  | // Licensed under GPLv2+
 | 
					
						
							| 
									
										
										
										
											2014-10-18 17:32:50 -04:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <wx/checkbox.h>
 | 
					
						
							|  |  |  | #include <wx/dialog.h>
 | 
					
						
							|  |  |  | #include <wx/sizer.h>
 | 
					
						
							|  |  |  | #include <wx/stattext.h>
 | 
					
						
							|  |  |  | #include <wx/textctrl.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Core/ActionReplay.h"
 | 
					
						
							| 
									
										
										
										
											2016-04-22 10:42:16 +00:00
										 |  |  | #include "DolphinWX/Cheats/CheatsWindow.h"
 | 
					
						
							| 
									
										
										
										
											2014-10-18 17:32:50 -04:00
										 |  |  | #include "DolphinWX/Cheats/CreateCodeDialog.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  | #include "DolphinWX/WxUtils.h"
 | 
					
						
							| 
									
										
										
										
											2014-10-18 17:32:50 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-19 17:20:16 +02:00
										 |  |  | CreateCodeDialog::CreateCodeDialog(wxWindow* const parent, const u32 address) | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |     : wxDialog(parent, wxID_ANY, _("Create AR Code")), m_code_address(address) | 
					
						
							| 
									
										
										
										
											2014-10-18 17:32:50 -04:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   wxStaticText* const label_name = new wxStaticText(this, wxID_ANY, _("Name: ")); | 
					
						
							| 
									
										
										
										
											2016-10-03 06:56:45 +00:00
										 |  |  |   m_textctrl_name = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, | 
					
						
							|  |  |  |                                    wxDLG_UNIT(this, wxSize(180, -1))); | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   wxStaticText* const label_code = new wxStaticText(this, wxID_ANY, _("Code: ")); | 
					
						
							|  |  |  |   m_textctrl_code = new wxTextCtrl(this, wxID_ANY, wxString::Format("0x%08x", address)); | 
					
						
							|  |  |  |   m_textctrl_code->Disable(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   wxStaticText* const label_value = new wxStaticText(this, wxID_ANY, _("Value: ")); | 
					
						
							|  |  |  |   m_textctrl_value = new wxTextCtrl(this, wxID_ANY, "0"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   m_checkbox_use_hex = new wxCheckBox(this, wxID_ANY, _("Use Hex")); | 
					
						
							|  |  |  |   m_checkbox_use_hex->SetValue(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   wxBoxSizer* const sizer_value_label = new wxBoxSizer(wxHORIZONTAL); | 
					
						
							| 
									
										
										
										
											2016-10-03 06:56:45 +00:00
										 |  |  |   const int space5 = FromDIP(5); | 
					
						
							|  |  |  |   sizer_value_label->Add(label_value); | 
					
						
							|  |  |  |   sizer_value_label->Add(m_checkbox_use_hex, 0, wxLEFT, space5); | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // main sizer
 | 
					
						
							|  |  |  |   wxBoxSizer* const sizer_main = new wxBoxSizer(wxVERTICAL); | 
					
						
							| 
									
										
										
										
											2016-10-03 06:56:45 +00:00
										 |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  |   sizer_main->Add(label_name, 0, wxLEFT | wxRIGHT, space5); | 
					
						
							|  |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  |   sizer_main->Add(m_textctrl_name, 0, wxLEFT | wxRIGHT, space5); | 
					
						
							|  |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  |   sizer_main->Add(label_code, 0, wxLEFT | wxRIGHT, space5); | 
					
						
							|  |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  |   sizer_main->Add(m_textctrl_code, 0, wxLEFT | wxRIGHT, space5); | 
					
						
							|  |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  |   sizer_main->Add(sizer_value_label, 0, wxLEFT | wxRIGHT, space5); | 
					
						
							|  |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  |   sizer_main->Add(m_textctrl_value, 0, wxLEFT | wxRIGHT, space5); | 
					
						
							|  |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  |   sizer_main->Add(CreateButtonSizer(wxOK | wxCANCEL | wxNO_DEFAULT), 0, wxEXPAND | wxLEFT | wxRIGHT, | 
					
						
							|  |  |  |                   space5); | 
					
						
							|  |  |  |   sizer_main->AddSpacer(space5); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // NOTE: Use default wxCANCEL handling.
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   Bind(wxEVT_BUTTON, &CreateCodeDialog::PressOK, this, wxID_OK); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SetSizerAndFit(sizer_main); | 
					
						
							|  |  |  |   SetFocus(); | 
					
						
							| 
									
										
										
										
											2014-10-18 17:32:50 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CreateCodeDialog::PressOK(wxCommandEvent& ev) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   const wxString code_name = m_textctrl_name->GetValue(); | 
					
						
							|  |  |  |   if (code_name.empty()) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     WxUtils::ShowErrorDialog(_("You must enter a name.")); | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   long code_value; | 
					
						
							|  |  |  |   int base = m_checkbox_use_hex->IsChecked() ? 16 : 10; | 
					
						
							|  |  |  |   if (!m_textctrl_value->GetValue().ToLong(&code_value, base)) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     WxUtils::ShowErrorDialog(_("Invalid value.")); | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // create the new code
 | 
					
						
							|  |  |  |   ActionReplay::ARCode new_cheat; | 
					
						
							|  |  |  |   new_cheat.active = false; | 
					
						
							|  |  |  |   new_cheat.user_defined = true; | 
					
						
							|  |  |  |   new_cheat.name = WxStrToStr(code_name); | 
					
						
							|  |  |  |   new_cheat.ops.emplace_back(ActionReplay::AREntry(m_code_address, code_value)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   wxCommandEvent add_event(DOLPHIN_EVT_ADD_NEW_ACTION_REPLAY_CODE, GetId()); | 
					
						
							|  |  |  |   add_event.SetClientData(&new_cheat); | 
					
						
							|  |  |  |   GetParent()->GetEventHandler()->ProcessEvent(add_event); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-03 06:56:45 +00:00
										 |  |  |   // Allow base class to process. wxDialog will set the return code and hide the window.
 | 
					
						
							|  |  |  |   ev.Skip(); | 
					
						
							| 
									
										
										
										
											2014-10-18 17:32:50 -04:00
										 |  |  | } |