namespace-ified ActionReplay, and made ISOProperties use the existing AR code. bonus: encrypted arcodes are saved as unencrypted codes just by closing the isoproperties dialog. also added ARCodeAddEdit, but once again, it only views entries atm. some misc wxw cleanup

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1560 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Shawn Hoffman 2008-12-17 04:14:24 +00:00
parent 1e774a5db2
commit 4a5d9ded94
26 changed files with 308 additions and 171 deletions

View File

@ -602,10 +602,6 @@
RelativePath=".\Src\Plugin.h" RelativePath=".\Src\Plugin.h"
> >
</File> </File>
<File
RelativePath=".\Src\PortableSockets.h"
>
</File>
<File <File
RelativePath=".\Src\SConscript" RelativePath=".\Src\SConscript"
> >

View File

@ -22,6 +22,9 @@
#include "ARDecrypt.h" #include "ARDecrypt.h"
#include <algorithm> #include <algorithm>
namespace ActionReplay
{
int total; int total;
// Alphanumeric filter for text<->bin conversion // Alphanumeric filter for text<->bin conversion
@ -509,3 +512,4 @@ void DecryptARCode(std::vector<std::string> vCodes, std::vector<AREntry> &ops)
} }
} }
} }
} //namespace ActionReplay

View File

@ -28,9 +28,13 @@
#include "Common.h" #include "Common.h"
#include "ActionReplay.h" #include "ActionReplay.h"
namespace ActionReplay
{
extern int total; extern int total;
extern const char *filter; extern const char *filter;
void DecryptARCode(std::vector<std::string> vCodes, std::vector<AREntry> &ops); void DecryptARCode(std::vector<std::string> vCodes, std::vector<AREntry> &ops);
} //namespace
#endif //_ARDECRYPT_H_ #endif //_ARDECRYPT_H_

View File

@ -24,6 +24,8 @@
// It probably is Turing complete - but what does that matter when AR codes can write // It probably is Turing complete - but what does that matter when AR codes can write
// actual PowerPC code... // actual PowerPC code...
// THIS FILE IS GROSS!!!
#include <string> #include <string>
#include <vector> #include <vector>
@ -35,16 +37,17 @@
#include "ARDecrypt.h" #include "ARDecrypt.h"
#include "LogManager.h" #include "LogManager.h"
namespace namespace ActionReplay
{ {
static std::vector<AREntry>::const_iterator iter;
static ARCode code; static std::vector<AREntry>::const_iterator iter;
static bool b_RanOnce = false; static ARCode code;
static std::vector<ARCode> arCodes; static bool b_RanOnce = false;
static std::vector<ARCode> activeCodes; static std::vector<ARCode> arCodes;
static bool logSelf = false; static std::vector<ARCode> activeCodes;
static std::vector<std::string> arLog; static bool logSelf = false;
} // namespace static std::vector<std::string> arLog;
void LogInfo(const char *format, ...); void LogInfo(const char *format, ...);
// --- Codes --- // --- Codes ---
@ -66,11 +69,11 @@ bool NormalCode_Type_5(u8 subtype, u32 addr, u32 data, int *count, bool *skip);
bool NormalCode_Type_6(u8 subtype, u32 addr, u32 data, int *count, bool *skip); bool NormalCode_Type_6(u8 subtype, u32 addr, u32 data, int *count, bool *skip);
bool NormalCode_Type_7(u8 subtype, u32 addr, u32 data, int *count, bool *skip); bool NormalCode_Type_7(u8 subtype, u32 addr, u32 data, int *count, bool *skip);
void LoadActionReplayCodes(IniFile &ini) void LoadCodes(IniFile &ini, bool forceLoad)
{ {
// Parses the Action Replay section of a game ini file. // Parses the Action Replay section of a game ini file.
if (!Core::GetStartupParameter().bEnableCheats) if (!Core::GetStartupParameter().bEnableCheats && !forceLoad)
return; // If cheats are off, do not load them return;
std::vector<std::string> lines; std::vector<std::string> lines;
std::vector<std::string> encryptedLines; std::vector<std::string> encryptedLines;
@ -158,7 +161,13 @@ void LoadActionReplayCodes(IniFile &ini)
arCodes.push_back(currentCode); arCodes.push_back(currentCode);
} }
ActionReplay_UpdateActiveList(); UpdateActiveList();
}
void LoadCodes(std::vector<ARCode> &_arCodes, IniFile &ini)
{
LoadCodes(ini, true);
_arCodes = arCodes;
} }
void LogInfo(const char *format, ...) void LogInfo(const char *format, ...)
@ -184,14 +193,14 @@ void LogInfo(const char *format, ...)
} }
} }
void ActionReplayRunAllActive() void RunAllActive()
{ {
if (Core::GetStartupParameter().bEnableCheats) { if (Core::GetStartupParameter().bEnableCheats) {
for (std::vector<ARCode>::iterator iter = activeCodes.begin(); iter != activeCodes.end(); ++iter) for (std::vector<ARCode>::iterator iter = activeCodes.begin(); iter != activeCodes.end(); ++iter)
{ {
if (iter->active) if (iter->active)
{ {
if (!RunActionReplayCode(*iter)) if (!RunCode(*iter))
iter->active = false; iter->active = false;
LogInfo("\n"); LogInfo("\n");
} }
@ -201,7 +210,7 @@ void ActionReplayRunAllActive()
} }
} }
bool RunActionReplayCode(const ARCode &arcode) { bool RunCode(const ARCode &arcode) {
// The mechanism is different than what the real AR uses, so there may be compatibility problems. // The mechanism is different than what the real AR uses, so there may be compatibility problems.
u8 cmd; u8 cmd;
u32 addr; u32 addr;
@ -999,33 +1008,33 @@ bool NormalCode_Type_7(u8 subtype, u32 addr, u32 data, int *count, bool *skip)
return true; return true;
} }
size_t ActionReplay_GetCodeListSize() size_t GetCodeListSize()
{ {
return arCodes.size(); return arCodes.size();
} }
ARCode ActionReplay_GetARCode(size_t index) ARCode GetARCode(size_t index)
{ {
if (index > arCodes.size()) if (index > arCodes.size())
{ {
PanicAlert("ActionReplay_GetARCode: Index is greater than ar code list size %i", index); PanicAlert("GetARCode: Index is greater than ar code list size %i", index);
return ARCode(); return ARCode();
} }
return arCodes[index]; return arCodes[index];
} }
void ActionReplay_SetARCode_IsActive(bool active, size_t index) void SetARCode_IsActive(bool active, size_t index)
{ {
if (index > arCodes.size()) if (index > arCodes.size())
{ {
PanicAlert("ActionReplay_SetARCode_IsActive: Index is greater than ar code list size %i", index); PanicAlert("SetARCode_IsActive: Index is greater than ar code list size %i", index);
return; return;
} }
arCodes[index].active = active; arCodes[index].active = active;
ActionReplay_UpdateActiveList(); UpdateActiveList();
} }
void ActionReplay_UpdateActiveList() void UpdateActiveList()
{ {
b_RanOnce = false; b_RanOnce = false;
activeCodes.clear(); activeCodes.clear();
@ -1036,17 +1045,19 @@ void ActionReplay_UpdateActiveList()
} }
} }
void ActionReplay_EnableSelfLogging(bool enable) void EnableSelfLogging(bool enable)
{ {
logSelf = enable; logSelf = enable;
} }
const std::vector<std::string> &ActionReplay_GetSelfLog() const std::vector<std::string> &GetSelfLog()
{ {
return arLog; return arLog;
} }
bool ActionReplay_IsSelfLogging() bool IsSelfLogging()
{ {
return logSelf; return logSelf;
} }
} // namespace ActionReplay

View File

@ -20,6 +20,9 @@
#include "IniFile.h" #include "IniFile.h"
namespace ActionReplay
{
struct AREntry { struct AREntry {
u32 cmd_addr; u32 cmd_addr;
u32 value; u32 value;
@ -31,15 +34,17 @@ struct ARCode {
bool active; bool active;
}; };
void ActionReplayRunAllActive(); void RunAllActive();
bool RunActionReplayCode(const ARCode &arcode); bool RunCode(const ARCode &arcode);
void LoadActionReplayCodes(IniFile &ini); void LoadCodes(IniFile &ini, bool forceLoad);
size_t ActionReplay_GetCodeListSize(); void LoadCodes(std::vector<ARCode> &_arCodes, IniFile &ini);
ARCode ActionReplay_GetARCode(size_t index); size_t GetCodeListSize();
void ActionReplay_SetARCode_IsActive(bool active, size_t index); ARCode GetARCode(size_t index);
void ActionReplay_UpdateActiveList(); void SetARCode_IsActive(bool active, size_t index);
void ActionReplay_EnableSelfLogging(bool enable); void UpdateActiveList();
const std::vector<std::string> &ActionReplay_GetSelfLog(); void EnableSelfLogging(bool enable);
bool ActionReplay_IsSelfLogging(); const std::vector<std::string> &GetSelfLog();
bool IsSelfLogging();
} // namespace
#endif //_ACTIONREPLAY_H_ #endif //_ACTIONREPLAY_H_

View File

@ -136,7 +136,7 @@ void LoadPatches(const char *gameID)
std::string filename = std::string(FULL_GAMECONFIG_DIR) + gameID + ".ini"; std::string filename = std::string(FULL_GAMECONFIG_DIR) + gameID + ".ini";
if (ini.Load(filename.c_str())) { if (ini.Load(filename.c_str())) {
LoadPatchSection("OnFrame", onFrame, ini); LoadPatchSection("OnFrame", onFrame, ini);
LoadActionReplayCodes(ini); ActionReplay::LoadCodes(ini, false);
LoadSpeedhacks("Speedhacks", speedHacks, ini); LoadSpeedhacks("Speedhacks", speedHacks, ini);
} }
} }
@ -178,6 +178,6 @@ void ApplyFramePatches()
void ApplyARPatches() void ApplyARPatches()
{ {
ActionReplayRunAllActive(); ActionReplay::RunAllActive();
} }
} // namespace } // namespace

View File

@ -768,6 +768,14 @@
RelativePath=".\Src\AboutDolphin.h" RelativePath=".\Src\AboutDolphin.h"
> >
</File> </File>
<File
RelativePath=".\Src\ARCodeAddEdit.cpp"
>
</File>
<File
RelativePath=".\Src\ARCodeAddEdit.h"
>
</File>
<File <File
RelativePath=".\Src\CheatsWindow.cpp" RelativePath=".\Src\CheatsWindow.cpp"
> >

View File

@ -0,0 +1,90 @@
// Copyright (C) 2003-2008 Dolphin Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
#include "ARCodeAddEdit.h"
extern std::vector<ActionReplay::ARCode> arCodes;
BEGIN_EVENT_TABLE(CARCodeAddEdit, wxDialog)
EVT_CLOSE(CARCodeAddEdit::OnClose)
EVT_SPIN(ID_ENTRY_SELECT, CARCodeAddEdit::ChangeEntry)
END_EVENT_TABLE()
CARCodeAddEdit::CARCodeAddEdit(int _selection, wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& position, const wxSize& size, long style)
: wxDialog(parent, id, title, position, size, style)
{
selection = _selection;
CreateGUIControls(selection);
}
CARCodeAddEdit::~CARCodeAddEdit()
{
}
void CARCodeAddEdit::CreateGUIControls(int _selection)
{
ActionReplay::ARCode currentCode = arCodes.at(_selection);
wxBoxSizer* sEditCheat = new wxBoxSizer(wxVERTICAL);
wxStaticBoxSizer* sbEntry = new wxStaticBoxSizer(wxVERTICAL, this, _("Code"));
wxStaticText* EditCheatNameText = new wxStaticText(this, ID_EDITCHEAT_NAME_TEXT, _("Name:"), wxDefaultPosition, wxDefaultSize);
EditCheatName = new wxTextCtrl(this, ID_EDITCHEAT_NAME, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
EditCheatName->SetValue(wxString::FromAscii(currentCode.name.c_str()));
EntrySelection = new wxSpinButton(this, ID_ENTRY_SELECT, wxDefaultPosition, wxDefaultSize, wxVERTICAL);
EntrySelection->SetRange(0, (int)arCodes.size()-1);
EntrySelection->SetValue(_selection);
EditCheatCode = new wxTextCtrl(this, ID_EDITCHEAT_CODE, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
UpdateTextCtrl(currentCode);
wxGridBagSizer* sgEntry = new wxGridBagSizer(0, 0);
sgEntry->AddGrowableCol(1);
sgEntry->AddGrowableRow(1);
sgEntry->Add(EditCheatNameText, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5);
sgEntry->Add(EditCheatName, wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5);
sgEntry->Add(EntrySelection, wxGBPosition(0, 2), wxGBSpan(2, 1), wxEXPAND|wxALL, 5);
sgEntry->Add(EditCheatCode, wxGBPosition(1, 0), wxGBSpan(1, 2), wxEXPAND|wxALL, 5);
sbEntry->Add(sgEntry, 1, wxEXPAND);
sEditCheat->Add(sbEntry, 1, wxEXPAND|wxALL, 5);
wxBoxSizer* sEditCheatButtons = new wxBoxSizer(wxHORIZONTAL);
wxButton* bOK = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
wxButton* bCancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
sEditCheatButtons->Add(0, 0, 1, wxEXPAND, 5);
sEditCheatButtons->Add(bOK, 0, wxALL, 5);
sEditCheatButtons->Add(bCancel, 0, wxALL, 5);
sEditCheat->Add(sEditCheatButtons, 0, wxEXPAND, 5);
this->SetSizer(sEditCheat);
sEditCheat->Layout();
}
void CARCodeAddEdit::OnClose(wxCloseEvent& WXUNUSED (event))
{
Destroy();
}
void CARCodeAddEdit::ChangeEntry(wxSpinEvent& event)
{
ActionReplay::ARCode currentCode = arCodes.at(event.GetPosition());
EditCheatName->SetValue(wxString::FromAscii(currentCode.name.c_str()));
UpdateTextCtrl(currentCode);
}
void CARCodeAddEdit::UpdateTextCtrl(ActionReplay::ARCode arCode)
{
EditCheatCode->Clear();
for (int i = 0; i < arCode.ops.size(); i++)
EditCheatCode->AppendText(wxString::Format("%08X %08X\n", arCode.ops.at(i).cmd_addr, arCode.ops.at(i).value));
}

View File

@ -0,0 +1,58 @@
// Copyright (C) 2003-2008 Dolphin Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
#ifndef __ARCODE_ADDEDIT_h__
#define __ARCODE_ADDEDIT_h__
#include <wx/wx.h>
#include <wx/spinctrl.h>
#include "ISOProperties.h"
class CARCodeAddEdit : public wxDialog
{
public:
CARCodeAddEdit(int _selection, wxWindow* parent,
wxWindowID id = 1,
const wxString& title = wxT("Edit ActionReplay Code"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE);
virtual ~CARCodeAddEdit();
private:
DECLARE_EVENT_TABLE();
wxTextCtrl *EditCheatName;
wxSpinButton *EntrySelection;
wxTextCtrl *EditCheatCode;
enum {
ID_EDITCHEAT_NAME_TEXT = 4550,
ID_EDITCHEAT_NAME,
ID_ENTRY_SELECT,
ID_EDITCHEAT_CODE
};
void CreateGUIControls(int selection);
void OnClose(wxCloseEvent& event);
void ChangeEntry(wxSpinEvent& event);
void UpdateTextCtrl(ActionReplay::ARCode arCode);
int selection;
};
#endif // __PATCH_ADDEDIT_h__

View File

@ -25,13 +25,15 @@
#include <wx/mstream.h> #include <wx/mstream.h>
#include <wx/statbmp.h> #include <wx/statbmp.h>
#undef ABOUTDOLPHIN_STYLE
#define ABOUTDOLPHIN_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class AboutDolphin : public wxDialog class AboutDolphin : public wxDialog
{ {
public: public:
AboutDolphin(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("About Dolphin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = ABOUTDOLPHIN_STYLE); AboutDolphin(wxWindow *parent,
wxWindowID id = 1,
const wxString &title = wxT("About Dolphin"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE);
virtual ~AboutDolphin(); virtual ~AboutDolphin();
void CloseClick(wxCommandEvent& event); void CloseClick(wxCommandEvent& event);

View File

@ -20,6 +20,8 @@
#include "ActionReplay.h" #include "ActionReplay.h"
#include "Core.h" #include "Core.h"
using namespace ActionReplay;
BEGIN_EVENT_TABLE(wxCheatsWindow, wxWindow) BEGIN_EVENT_TABLE(wxCheatsWindow, wxWindow)
EVT_SIZE( wxCheatsWindow::OnEvent_Window_Resize) EVT_SIZE( wxCheatsWindow::OnEvent_Window_Resize)
EVT_CLOSE( wxCheatsWindow::OnEvent_Window_Close) EVT_CLOSE( wxCheatsWindow::OnEvent_Window_Close)
@ -31,7 +33,8 @@ BEGIN_EVENT_TABLE(wxCheatsWindow, wxWindow)
EVT_CHECKBOX(ID_CHECKBOX_LOGAR, wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange) EVT_CHECKBOX(ID_CHECKBOX_LOGAR, wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange)
END_EVENT_TABLE() END_EVENT_TABLE()
wxCheatsWindow::wxCheatsWindow(wxFrame* parent, const wxPoint& pos, const wxSize& size) : wxFrame(parent, wxID_ANY, _T("Action Replay"), pos, size, wxCHEATSWINDOW_STYLE) wxCheatsWindow::wxCheatsWindow(wxFrame* parent, const wxPoint& pos, const wxSize& size) :
wxFrame(parent, wxID_ANY, _T("Action Replay"), pos, size, wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
{ {
// Create the GUI controls // Create the GUI controls
Init_ChildControls(); Init_ChildControls();
@ -93,7 +96,7 @@ void wxCheatsWindow::Init_ChildControls()
m_Button_UpdateLog = new wxButton(m_Tab_Log, ID_BUTTON_UPDATELOG, wxT("Update")); m_Button_UpdateLog = new wxButton(m_Tab_Log, ID_BUTTON_UPDATELOG, wxT("Update"));
m_CheckBox_LogAR = new wxCheckBox(m_Tab_Log, ID_CHECKBOX_LOGAR, wxT("Enable AR Logging")); m_CheckBox_LogAR = new wxCheckBox(m_Tab_Log, ID_CHECKBOX_LOGAR, wxT("Enable AR Logging"));
m_CheckBox_LogAR->SetValue(ActionReplay_IsSelfLogging()); m_CheckBox_LogAR->SetValue(IsSelfLogging());
m_TextCtrl_Log = new wxTextCtrl(m_Tab_Log, ID_TEXTCTRL_LOG, wxT(""), wxDefaultPosition, wxSize(100, 600), wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP); m_TextCtrl_Log = new wxTextCtrl(m_Tab_Log, ID_TEXTCTRL_LOG, wxT(""), wxDefaultPosition, wxSize(100, 600), wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
wxBoxSizer *HStrip1 = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *HStrip1 = new wxBoxSizer(wxHORIZONTAL);
@ -139,10 +142,10 @@ void wxCheatsWindow::OnEvent_Window_Close(wxCloseEvent& WXUNUSED (event))
void wxCheatsWindow::Load_ARCodes() void wxCheatsWindow::Load_ARCodes()
{ {
indexList.clear(); indexList.clear();
size_t size = ActionReplay_GetCodeListSize(); size_t size = GetCodeListSize();
for (size_t i = 0; i < size; i++) for (size_t i = 0; i < size; i++)
{ {
ARCode code = ActionReplay_GetARCode(i); ARCode code = GetARCode(i);
ARCodeIndex ind; ARCodeIndex ind;
u32 index = m_CheckListBox_CheatsList->Append(wxString::FromAscii(code.name.c_str())); u32 index = m_CheckListBox_CheatsList->Append(wxString::FromAscii(code.name.c_str()));
m_CheckListBox_CheatsList->Check(index, code.active); m_CheckListBox_CheatsList->Check(index, code.active);
@ -158,7 +161,7 @@ void wxCheatsWindow::OnEvent_CheatsList_ItemSelected(wxCommandEvent& WXUNUSED (e
{ {
if ((int)indexList[i].uiIndex == index) if ((int)indexList[i].uiIndex == index)
{ {
ARCode code = ActionReplay_GetARCode(i); ARCode code = GetARCode(i);
m_Label_Codename->SetLabel(wxT("Name: ") + wxString::FromAscii(code.name.c_str())); m_Label_Codename->SetLabel(wxT("Name: ") + wxString::FromAscii(code.name.c_str()));
char text[CHAR_MAX]; char text[CHAR_MAX];
char* numcodes = text; char* numcodes = text;
@ -183,7 +186,7 @@ void wxCheatsWindow::OnEvent_CheatsList_ItemToggled(wxCommandEvent& WXUNUSED (ev
{ {
if ((int)indexList[i].uiIndex == index) if ((int)indexList[i].uiIndex == index)
{ {
ActionReplay_SetARCode_IsActive(m_CheckListBox_CheatsList->IsChecked(index), indexList[i].index); SetARCode_IsActive(m_CheckListBox_CheatsList->IsChecked(index), indexList[i].index);
} }
} }
} }
@ -191,14 +194,14 @@ void wxCheatsWindow::OnEvent_ButtonUpdateCodes_Press(wxCommandEvent& WXUNUSED (e
{ {
for (size_t i = 0; i < indexList.size(); i++) for (size_t i = 0; i < indexList.size(); i++)
{ {
ActionReplay_SetARCode_IsActive(m_CheckListBox_CheatsList->IsChecked(indexList[i].uiIndex), indexList[i].index); SetARCode_IsActive(m_CheckListBox_CheatsList->IsChecked(indexList[i].uiIndex), indexList[i].index);
} }
} }
void wxCheatsWindow::OnEvent_ButtonUpdateLog_Press(wxCommandEvent& WXUNUSED (event)) void wxCheatsWindow::OnEvent_ButtonUpdateLog_Press(wxCommandEvent& WXUNUSED (event))
{ {
m_TextCtrl_Log->Clear(); m_TextCtrl_Log->Clear();
const std::vector<std::string> &arLog = ActionReplay_GetSelfLog(); const std::vector<std::string> &arLog = GetSelfLog();
for (u32 i = 0; i < arLog.size(); i++) for (u32 i = 0; i < arLog.size(); i++)
{ {
m_TextCtrl_Log->AppendText(wxString::FromAscii(arLog[i].c_str())); m_TextCtrl_Log->AppendText(wxString::FromAscii(arLog[i].c_str()));
@ -207,5 +210,5 @@ void wxCheatsWindow::OnEvent_ButtonUpdateLog_Press(wxCommandEvent& WXUNUSED (eve
void wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange(wxCommandEvent& WXUNUSED (event)) void wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange(wxCommandEvent& WXUNUSED (event))
{ {
ActionReplay_EnableSelfLogging(m_CheckBox_LogAR->IsChecked()); EnableSelfLogging(m_CheckBox_LogAR->IsChecked());
} }

View File

@ -36,9 +36,6 @@
#include "Filesystem.h" #include "Filesystem.h"
#include "IniFile.h" #include "IniFile.h"
#undef wxCHEATSWINDOW_STYLE
#define wxCHEATSWINDOW_STYLE wxCAPTION | wxSYSTEM_MENU | wxCLOSE_BOX | wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE
class wxCheatsWindow : public wxFrame class wxCheatsWindow : public wxFrame
{ {
public: public:

View File

@ -22,18 +22,19 @@
#include <wx/gbsizer.h> #include <wx/gbsizer.h>
#include <wx/notebook.h> #include <wx/notebook.h>
#include <wx/filepicker.h> #include <wx/filepicker.h>
//#include <wx/listbox.h>
#include "Config.h" #include "Config.h"
#undef CONFIG_MAIN_STYLE
#define CONFIG_MAIN_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class CConfigMain class CConfigMain
: public wxDialog : public wxDialog
{ {
public: public:
CConfigMain(wxWindow* parent, wxWindowID id = 1, const wxString& title = wxT("Dolphin Configuration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = CONFIG_MAIN_STYLE); CConfigMain(wxWindow* parent,
wxWindowID id = 1,
const wxString& title = wxT("Dolphin Configuration"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE);
virtual ~CConfigMain(); virtual ~CConfigMain();
void CloseClick(wxCommandEvent& event); void CloseClick(wxCommandEvent& event);
void OnSelectionChanged(wxCommandEvent& event); void OnSelectionChanged(wxCommandEvent& event);

View File

@ -22,20 +22,14 @@
#include "Filesystem.h" #include "Filesystem.h"
#include "ISOProperties.h" #include "ISOProperties.h"
#include "PatchAddEdit.h" #include "PatchAddEdit.h"
#include "ARCodeAddEdit.h"
DiscIO::IVolume *OpenISO = NULL; DiscIO::IVolume *OpenISO = NULL;
DiscIO::IFileSystem *pFileSystem = NULL; DiscIO::IFileSystem *pFileSystem = NULL;
std::vector<PatchEngine::Patch> onFrame; std::vector<PatchEngine::Patch> onFrame;
std::vector<ActionReplay::ARCode> arCodes;
struct ARListCode {
std::string name;
bool enabled;
std::vector<std::string> ops;
u32 uiIndex;
};
std::vector<ARListCode> ARCodes;
BEGIN_EVENT_TABLE(CISOProperties, wxDialog) BEGIN_EVENT_TABLE(CISOProperties, wxDialog)
@ -698,86 +692,58 @@ void CISOProperties::PatchButtonClicked(wxCommandEvent& event)
void CISOProperties::ActionReplayList_Load() void CISOProperties::ActionReplayList_Load()
{ {
ARCodes.clear(); arCodes.clear();
Cheats->Clear(); Cheats->Clear();
std::vector<std::string> lines; ActionReplay::LoadCodes(arCodes, GameIni);
if (!GameIni.GetLines("ActionReplay", lines)) u32 index = 0;
return; for (std::vector<ActionReplay::ARCode>::const_iterator it = arCodes.begin(); it != arCodes.end(); ++it)
ARListCode code;
for (std::vector<std::string>::const_iterator it = lines.begin(); it != lines.end(); ++it)
{ {
std::string line = *it; ActionReplay::ARCode arCode = *it;
Cheats->Append(wxString::FromAscii(arCode.name.c_str()));
if (line[0] == '+' || line[0] == '$') Cheats->Check(index, arCode.active);
{ ++index;
// Take care of the previous code
if (code.ops.size())
{
code.uiIndex = Cheats->Append(wxString::FromAscii(code.name.c_str()));
ARCodes.push_back(code);
Cheats->Check(code.uiIndex, code.enabled);
code.ops.clear();
}
// Give name and enabled to current code
if(line.size() > 1)
{
if (line[0] == '+')
{
code.enabled = true;
code.name = line.substr(2, line.size() - 2);
}
else
{
code.enabled = false;
code.name = line.substr(1, line.size() - 1);
}
}
continue;
}
code.ops.push_back(line);
}
if (code.ops.size())
{
code.uiIndex = Cheats->Append(wxString::FromAscii(code.name.c_str()));
ARCodes.push_back(code);
Cheats->Check(code.uiIndex, code.enabled);
} }
} }
void CISOProperties::ActionReplayList_Save() void CISOProperties::ActionReplayList_Save()
{ {
std::vector<std::string> lines; std::vector<std::string> lines;
for (std::vector<ARListCode>::const_iterator iter = ARCodes.begin(); iter != ARCodes.end(); ++iter) u32 index = 0;
for (std::vector<ActionReplay::ARCode>::const_iterator iter = arCodes.begin(); iter != arCodes.end(); ++iter)
{ {
ARListCode code = *iter; ActionReplay::ARCode code = *iter;
lines.push_back(Cheats->IsChecked(code.uiIndex) ? "+$" + code.name : "$" + code.name); lines.push_back(Cheats->IsChecked(index) ? "+$" + code.name : "$" + code.name);
for (std::vector<std::string>::const_iterator iter2 = code.ops.begin(); iter2 != code.ops.end(); ++iter2) for (std::vector<ActionReplay::AREntry>::const_iterator iter2 = code.ops.begin(); iter2 != code.ops.end(); ++iter2)
{ {
lines.push_back(*iter2); lines.push_back(wxString::Format("%08X %08X", iter2->cmd_addr, iter2->value).mb_str());
} }
++index;
} }
GameIni.SetLines("ActionReplay", lines); GameIni.SetLines("ActionReplay", lines);
} }
void CISOProperties::ActionReplayButtonClicked(wxCommandEvent& event) void CISOProperties::ActionReplayButtonClicked(wxCommandEvent& event)
{ {
int selection = Cheats->GetSelection();
switch (event.GetId()) switch (event.GetId())
{ {
case ID_EDITCHEAT: case ID_EDITCHEAT:
// dialog {
CARCodeAddEdit dlg(selection, this);
dlg.ShowModal();
}
break; break;
case ID_ADDCHEAT: case ID_ADDCHEAT:
{
// dialog // dialog
}
break; break;
case ID_REMOVECHEAT: case ID_REMOVECHEAT:
ARCodes.erase(ARCodes.begin() + Cheats->GetSelection()); arCodes.erase(arCodes.begin() + Cheats->GetSelection());
break; break;
} }

View File

@ -32,15 +32,19 @@
#include "Filesystem.h" #include "Filesystem.h"
#include "IniFile.h" #include "IniFile.h"
#include "PatchEngine.h" #include "PatchEngine.h"
#include "ActionReplay.h"
#undef ISOPROPERTIES_STYLE
#define ISOPROPERTIES_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class CISOProperties : public wxDialog class CISOProperties : public wxDialog
{ {
public: public:
CISOProperties(const std::string fileName, wxWindow* parent, wxWindowID id = 1, const wxString& title = wxT("Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = ISOPROPERTIES_STYLE); CISOProperties(const std::string fileName,
wxWindow* parent,
wxWindowID id = 1,
const wxString& title = wxT("Properties"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE);
virtual ~CISOProperties(); virtual ~CISOProperties();
bool bRefreshList; bool bRefreshList;

View File

@ -25,7 +25,12 @@
class CPatchAddEdit : public wxDialog class CPatchAddEdit : public wxDialog
{ {
public: public:
CPatchAddEdit(int _selection, wxWindow* parent, wxWindowID id = 1, const wxString& title = wxT("Edit Patch"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(300, -1), long style = wxDEFAULT_DIALOG_STYLE); CPatchAddEdit(int _selection, wxWindow* parent,
wxWindowID id = 1,
const wxString& title = wxT("Edit Patch"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxSize(300, -1),
long style = wxDEFAULT_DIALOG_STYLE);
virtual ~CPatchAddEdit(); virtual ~CPatchAddEdit();
private: private:

View File

@ -18,6 +18,7 @@ libs = [
if wxenv['HAVE_WX']: if wxenv['HAVE_WX']:
files += [ files += [
'AboutDolphin.cpp', 'AboutDolphin.cpp',
'ARCodeAddEdit.cpp',
'ConfigMain.cpp', 'ConfigMain.cpp',
'Frame.cpp', 'Frame.cpp',
'GameListCtrl.cpp', 'GameListCtrl.cpp',
@ -27,10 +28,10 @@ if wxenv['HAVE_WX']:
'MemcardManager.cpp', 'MemcardManager.cpp',
'MemoryCards/GCMemcard.cpp', 'MemoryCards/GCMemcard.cpp',
'PluginManager.cpp', 'PluginManager.cpp',
'PatchAddEdit.cpp', 'PatchAddEdit.cpp',
'CheatsWindow.cpp', 'CheatsWindow.cpp',
'stdafx.cpp', 'stdafx.cpp',
'FrameWiimote.cpp', 'FrameWiimote.cpp',
] ]
CPPDEFINES = [ CPPDEFINES = [

View File

@ -15,6 +15,7 @@
#define PAD_ERR_TRANSFER -3 #define PAD_ERR_TRANSFER -3
#define PAD_USE_ORIGIN 0x0080 #define PAD_USE_ORIGIN 0x0080
#define PAD_BUTTON_LEFT 0x0001 #define PAD_BUTTON_LEFT 0x0001
#define PAD_BUTTON_RIGHT 0x0002 #define PAD_BUTTON_RIGHT 0x0002
#define PAD_BUTTON_DOWN 0x0004 #define PAD_BUTTON_DOWN 0x0004
@ -32,13 +33,13 @@ typedef void (*TLog)(const char* _pMessage);
typedef struct typedef struct
{ {
HWND hWnd; HWND hWnd;
TLog pLog; TLog pLog;
} SPADInitialize; } SPADInitialize;
typedef struct typedef struct
{ {
unsigned short button; // Or-ed PAD_BUTTON_* bits unsigned short button; // Or-ed PAD_BUTTON_* and PAD_TRIGGER_* bits
unsigned char stickX; // 0 <= stickX <= 255 unsigned char stickX; // 0 <= stickX <= 255
unsigned char stickY; // 0 <= stickY <= 255 unsigned char stickY; // 0 <= stickY <= 255
unsigned char substickX; // 0 <= substickX <= 255 unsigned char substickX; // 0 <= substickX <= 255
@ -47,7 +48,7 @@ typedef struct
unsigned char triggerRight; // 0 <= triggerRight <= 255 unsigned char triggerRight; // 0 <= triggerRight <= 255
unsigned char analogA; // 0 <= analogA <= 255 unsigned char analogA; // 0 <= analogA <= 255
unsigned char analogB; // 0 <= analogB <= 255 unsigned char analogB; // 0 <= analogB <= 255
bool MicButton; bool MicButton; // HAX
signed char err; // one of PAD_ERR_* number signed char err; // one of PAD_ERR_* number
} SPADStatus; } SPADStatus;
@ -59,7 +60,7 @@ typedef struct
// Function: GetDllInfo // Function: GetDllInfo
// Purpose: This function allows the emulator to gather information // Purpose: This function allows the emulator to gather information
// about the DLL by filling in the PluginInfo structure. // about the DLL by filling in the PluginInfo structure.
// input: a pointer to a PLUGIN_INFO structure that needs to be // input: A pointer to a PLUGIN_INFO structure that needs to be
// filled by the function. (see def above) // filled by the function. (see def above)
// output: none // output: none
// //
@ -69,7 +70,7 @@ EXPORT void CALL GetDllInfo(PLUGIN_INFO* _pPluginInfo);
// Function: DllConfig // Function: DllConfig
// Purpose: This function is optional function that is provided // Purpose: This function is optional function that is provided
// to allow the user to configure the DLL // to allow the user to configure the DLL
// input: a handle to the window that calls this function // input: A handle to the window that calls this function
// output: none // output: none
// //
EXPORT void CALL DllConfig(HWND _hParent); EXPORT void CALL DllConfig(HWND _hParent);

View File

@ -32,9 +32,6 @@
#ifndef _WIN32 #ifndef _WIN32
#include "../XInputBase.h" #include "../XInputBase.h"
#endif #endif
#undef CONFIGDIALOG_STYLE
#define CONFIGDIALOG_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class ConfigDialog : public wxDialog class ConfigDialog : public wxDialog
{ {
@ -42,7 +39,7 @@ class ConfigDialog : public wxDialog
public: public:
ConfigDialog(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Pad Configuration"), ConfigDialog(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Pad Configuration"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = CONFIGDIALOG_STYLE); const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
virtual ~ConfigDialog(); virtual ~ConfigDialog();

View File

@ -43,11 +43,6 @@
class CPBView; class CPBView;
class IniFile; class IniFile;
// Window settings - I'm not sure what these do. I just copied them gtom elsewhere basically.
#undef CDebugger_STYLE
#define CDebugger_STYLE wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE
class CDebugger : public wxDialog class CDebugger : public wxDialog
{ {
private: private:
@ -56,7 +51,7 @@ class CDebugger : public wxDialog
public: public:
CDebugger(wxWindow *parent, wxWindowID id = 1, const wxString &title = _("Sound Debugger"), CDebugger(wxWindow *parent, wxWindowID id = 1, const wxString &title = _("Sound Debugger"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = CDebugger_STYLE); long style = wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE);
virtual ~CDebugger(); virtual ~CDebugger();

View File

@ -15,8 +15,8 @@
// Official SVN repository and contact information can be found at // Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/ // http://code.google.com/p/dolphin-emu/
#ifndef __CONFIGDIALOG_h__ #ifndef __OGL_CONFIGDIALOG_h__
#define __CONFIGDIALOG_h__ #define __OGL_CONFIGDIALOG_h__
#include <wx/wx.h> #include <wx/wx.h>
#include <wx/dialog.h> #include <wx/dialog.h>
@ -32,14 +32,11 @@
#include <wx/gbsizer.h> #include <wx/gbsizer.h>
#undef ConfigDialog_STYLE
#define ConfigDialog_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class ConfigDialog : public wxDialog class ConfigDialog : public wxDialog
{ {
public: public:
ConfigDialog(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("OpenGL Plugin Configuration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = ConfigDialog_STYLE); ConfigDialog(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("OpenGL Plugin Configuration"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
virtual ~ConfigDialog(); virtual ~ConfigDialog();
void CloseClick(wxCommandEvent& event); void CloseClick(wxCommandEvent& event);

View File

@ -31,17 +31,13 @@
#include <wx/gbsizer.h> #include <wx/gbsizer.h>
#undef ConfigDialog_STYLE
#define ConfigDialog_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class ConfigDialog : public wxDialog class ConfigDialog : public wxDialog
{ {
public: public:
ConfigDialog(wxWindow *parent, wxWindowID id = 1, ConfigDialog(wxWindow *parent, wxWindowID id = 1,
const wxString &title = wxT("Wii Remote Plugin Configuration"), const wxString &title = wxT("Wii Remote Plugin Configuration"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = ConfigDialog_STYLE); long style = wxDEFAULT_DIALOG_STYLE);
virtual ~ConfigDialog(); virtual ~ConfigDialog();
void CloseClick(wxCommandEvent& event); void CloseClick(wxCommandEvent& event);

View File

@ -44,8 +44,6 @@
#include <wx/statbox.h> #include <wx/statbox.h>
#include <wx/statbmp.h> #include <wx/statbmp.h>
#undef AboutBox_STYLE
#define AboutBox_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class AboutBox : public wxDialog class AboutBox : public wxDialog
{ {
@ -53,7 +51,8 @@ class AboutBox : public wxDialog
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
public: public:
AboutBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("About: nJoy Input Plugin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = AboutBox_STYLE); AboutBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("About: nJoy Input Plugin"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
virtual ~AboutBox(); virtual ~AboutBox();
void OKClick(wxCommandEvent& event); void OKClick(wxCommandEvent& event);

View File

@ -46,8 +46,6 @@
#include <wx/panel.h> #include <wx/panel.h>
#include <wx/statbmp.h> #include <wx/statbmp.h>
#undef ConfigBox_STYLE
#define ConfigBox_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class ConfigBox : public wxDialog class ConfigBox : public wxDialog
{ {
@ -55,7 +53,8 @@ class ConfigBox : public wxDialog
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
public: public:
ConfigBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Configure: nJoy Input Plugin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = ConfigBox_STYLE); ConfigBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Configure: nJoy Input Plugin"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
virtual ~ConfigBox(); virtual ~ConfigBox();
private: private:

View File

@ -44,8 +44,6 @@
#include <wx/statbox.h> #include <wx/statbox.h>
#include <wx/statbmp.h> #include <wx/statbmp.h>
#undef AboutBox_STYLE
#define AboutBox_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class AboutBox : public wxDialog class AboutBox : public wxDialog
{ {
@ -53,7 +51,8 @@ class AboutBox : public wxDialog
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
public: public:
AboutBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("About: nJoy Input Plugin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = AboutBox_STYLE); AboutBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("About: nJoy Input Plugin"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
virtual ~AboutBox(); virtual ~AboutBox();
void OKClick(wxCommandEvent& event); void OKClick(wxCommandEvent& event);

View File

@ -46,8 +46,6 @@
#include <wx/panel.h> #include <wx/panel.h>
#include <wx/statbmp.h> #include <wx/statbmp.h>
#undef ConfigBox_STYLE
#define ConfigBox_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
class ConfigBox : public wxDialog class ConfigBox : public wxDialog
{ {
@ -55,7 +53,8 @@ class ConfigBox : public wxDialog
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
public: public:
ConfigBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Configure: nJoy Input Plugin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = ConfigBox_STYLE); ConfigBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Configure: nJoy Input Plugin"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
virtual ~ConfigBox(); virtual ~ConfigBox();
private: private: