diff options
| author | Jules Blok <jules.blok@gmail.com> | 2015-06-10 00:00:12 +0200 |
|---|---|---|
| committer | Jules Blok <jules.blok@gmail.com> | 2015-06-10 00:00:12 +0200 |
| commit | 7dfced21a2e5aac7195e0e1ad76468e30306766b (patch) | |
| tree | bd671b639d3d911460b767caabad8fc8a759a6bf /Source/Core/DolphinWX/Cheats/CreateCodeDialog.cpp | |
| parent | c25be031fc1031d795157d8344b87b7841145197 (diff) | |
| parent | 7b0a65e295c784f9d573f2ef52d4e2a7b9bb2889 (diff) | |
Merge branch 'master' into stable
Diffstat (limited to 'Source/Core/DolphinWX/Cheats/CreateCodeDialog.cpp')
| -rw-r--r-- | Source/Core/DolphinWX/Cheats/CreateCodeDialog.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/Source/Core/DolphinWX/Cheats/CreateCodeDialog.cpp b/Source/Core/DolphinWX/Cheats/CreateCodeDialog.cpp new file mode 100644 index 0000000000..5239a1817a --- /dev/null +++ b/Source/Core/DolphinWX/Cheats/CreateCodeDialog.cpp @@ -0,0 +1,113 @@ +// Copyright 2014 Dolphin Emulator Project +// Licensed under GPLv2+ +// 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" +#include "Core/ConfigManager.h" +#include "DolphinWX/ISOProperties.h" +#include "DolphinWX/WxUtils.h" +#include "DolphinWX/Cheats/CreateCodeDialog.h" + +// Fired when an ActionReplay code is created. +wxDEFINE_EVENT(UPDATE_CHEAT_LIST_EVENT, wxCommandEvent); + +CreateCodeDialog::CreateCodeDialog(wxWindow* const parent, const u32 address, std::vector<ActionReplay::ARCode>* _arCodes) + : wxDialog(parent, wxID_ANY, _("Create AR Code")) + , m_code_address(address) + , arCodes(_arCodes) +{ + wxStaticText* const label_name = new wxStaticText(this, wxID_ANY, _("Name: ")); + m_textctrl_name = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(256, -1)); + + 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); + sizer_value_label->Add(label_value, 0, wxRIGHT, 5); + sizer_value_label->Add(m_checkbox_use_hex); + + // main sizer + wxBoxSizer* const sizer_main = new wxBoxSizer(wxVERTICAL); + sizer_main->Add(label_name, 0, wxALL, 5); + sizer_main->Add(m_textctrl_name, 0, wxALL, 5); + sizer_main->Add(label_code, 0, wxALL, 5); + sizer_main->Add(m_textctrl_code, 0, wxALL, 5); + sizer_main->Add(sizer_value_label, 0, wxALL, 5); + sizer_main->Add(m_textctrl_value, 0, wxALL, 5); + sizer_main->Add(CreateButtonSizer(wxOK | wxCANCEL | wxNO_DEFAULT), 0, wxALL, 5); + + Bind(wxEVT_BUTTON, &CreateCodeDialog::PressOK, this, wxID_OK); + Bind(wxEVT_BUTTON, &CreateCodeDialog::PressCancel, this, wxID_CANCEL); + Bind(wxEVT_CLOSE_WINDOW, &CreateCodeDialog::OnEvent_Close, this); + + SetSizerAndFit(sizer_main); + SetFocus(); +} + +void CreateCodeDialog::PressOK(wxCommandEvent& ev) +{ + 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; + } + + //wxString full_code = textctrl_code->GetValue(); + //full_code += ' '; + //full_code += wxString::Format("0x%08x", code_value); + + // create the new code + ActionReplay::ARCode new_cheat; + new_cheat.active = false; + new_cheat.name = WxStrToStr(code_name); + const ActionReplay::AREntry new_entry(m_code_address, code_value); + new_cheat.ops.push_back(new_entry); + + // pretty hacky - add the code to the gameini + { + CISOProperties isoprops(SConfig::GetInstance().m_LastFilename, this); + // add the code to the isoproperties arcode list + arCodes->push_back(new_cheat); + // save the gameini + isoprops.SaveGameConfig(); + isoprops.ActionReplayList_Load(); // loads the new arcodes + //ActionReplay::UpdateActiveList(); + } + + // Propagate back to the parent frame to update the cheat list. + GetEventHandler()->AddPendingEvent(wxCommandEvent(UPDATE_CHEAT_LIST_EVENT)); + + Close(); +} + +void CreateCodeDialog::PressCancel(wxCommandEvent& ev) +{ + Close(); +} + +void CreateCodeDialog::OnEvent_Close(wxCloseEvent& ev) +{ + Destroy(); +} |
