Cheats - more fixes, in particular saving & loading the .cht file from the same path!

This commit is contained in:
andres.delikat 2011-08-06 22:03:10 +00:00
parent 998e4ebe00
commit 95c8e709b6
3 changed files with 89 additions and 77 deletions

View File

@ -107,6 +107,7 @@ namespace BizHawk.MultiClient
Closing += (o, e) =>
{
Global.CheatList.SaveSettings();
CloseGame();
UserMovie.StopMovie();
SaveConfig();
@ -982,7 +983,7 @@ namespace BizHawk.MultiClient
TAStudio1.Restart();
if (Global.Config.LoadCheatFileByGame)
{
if (Cheats1.AttemptLoadCheatFile())
if (Global.CheatList.AttemptLoadCheatFile())
Global.RenderPanel.AddMessage("Cheats file loaded");
}
Cheats1.Restart();

View File

@ -72,8 +72,8 @@ namespace BizHawk.MultiClient
Global.Config.RecentCheats.Add(file.FullName);
changes = false;
}
if (Global.Config.DisableCheatsOnLoad)
@ -152,5 +152,83 @@ namespace BizHawk.MultiClient
f.Directory.Create();
return path;
}
public bool SaveCheatFile(string path)
{
var file = new FileInfo(path);
if (!file.Directory.Exists)
file.Directory.Create();
using (StreamWriter sw = new StreamWriter(path))
{
string str = "";
for (int x = 0; x < cheatList.Count; x++)
{
str += FormatAddress(cheatList[x].address) + "\t";
str += String.Format("{0:X2}", cheatList[x].value) + "\t";
str += cheatList[x].domain.Name + "\t";
if (cheatList[x].IsEnabled())
str += "1\t";
else
str += "0\t";
str += cheatList[x].name + "\n";
}
sw.WriteLine(str);
}
changes = false;
return true;
}
public string FormatAddress(int address)
{
return String.Format("{0:X" + GetNumDigits((Global.Emulator.MainMemory.Size - 1)).ToString() + "}", address);
}
public void SaveSettings()
{
if (Global.Config.CheatsAutoSaveOnClose)
{
if (changes && cheatList.Count > 0)
{
if (currentCheatFile.Length == 0)
currentCheatFile = MakeDefaultFilename();
SaveCheatFile(Global.CheatList.currentCheatFile);
}
}
}
public string MakeDefaultFilename()
{
return Path.Combine(Global.CheatList.GetCheatsPath(), PathManager.FilesystemSafeName(Global.Game) + ".cht");
}
private int GetNumDigits(Int32 i)
{
if (i < 0x10000) return 4;
if (i < 0x1000000) return 6;
else return 8;
}
/// <summary>
/// Looks for a .cht file that matches the name of the ROM loaded
/// It is up to the caller to determine which directory it looks
/// </summary>
public bool AttemptLoadCheatFile()
{
string CheatFile = MakeDefaultFilename();
var file = new FileInfo(CheatFile);
if (file.Exists == false)
return false;
else
{
LoadCheatFile(CheatFile, false);
return true;
}
}
}
}

View File

@ -24,28 +24,7 @@ namespace BizHawk.MultiClient
int defaultDomainWidth;
int defaultOnWidth;
/// <summary>
/// Looks for a .cht file that matches the name of the ROM loaded
/// It is up to the caller to determine which directory it looks
/// </summary>
public bool AttemptLoadCheatFile()
{
string CheatFile = MakeDefaultFilename();
var file = new FileInfo(CheatFile);
if (file.Exists == false)
return false;
else
{
Global.CheatList.LoadCheatFile(CheatFile, false);
return true;
}
}
private string MakeDefaultFilename()
{
return Path.Combine(Global.CheatList.GetCheatsPath(), PathManager.FilesystemSafeName(Global.Game) + ".cht");
}
private void ClearFields()
{
@ -102,7 +81,7 @@ namespace BizHawk.MultiClient
}
if (column == 1) //Address
{
text = FormatAddress(Global.CheatList.cheatList[index].address);
text = Global.CheatList.FormatAddress(Global.CheatList.cheatList[index].address);
}
if (column == 2) //Value
{
@ -135,7 +114,6 @@ namespace BizHawk.MultiClient
AddressBox.MaxLength = GetNumDigits(Global.Emulator.MainMemory.Size - 1);
DisplayCheatsList();
CheatListView.Refresh();
UpdateNumberOfCheats();
//Hacky Disabling if not a supported core
switch (Global.Emulator.SystemId)
@ -272,17 +250,6 @@ namespace BizHawk.MultiClient
Global.Config.CheatsValueWidth = CheatListView.Columns[Global.Config.CheatsValueIndex].Width;
Global.Config.CheatsDomainWidth = CheatListView.Columns[Global.Config.CheatsDomainIndex].Width;
Global.Config.CheatsOnWidth = CheatListView.Columns[Global.Config.CheatsOnIndex].Width;
if (Global.Config.CheatsAutoSaveOnClose)
{
if (Global.CheatList.changes)
{
if (Global.CheatList.currentCheatFile.Length == 0)
Global.CheatList.currentCheatFile = MakeDefaultFilename();
SaveCheatFile(Global.CheatList.currentCheatFile);
}
}
}
public void DisplayCheatsList()
@ -402,41 +369,13 @@ namespace BizHawk.MultiClient
var file = GetSaveFileFromUser();
if (file != null)
{
SaveCheatFile(file.FullName);
Global.CheatList.SaveCheatFile(file.FullName);
Global.CheatList.currentCheatFile = file.FullName;
MessageLabel.Text = Path.GetFileName(Global.CheatList.currentCheatFile) + " saved.";
Global.Config.RecentCheats.Add(Global.CheatList.currentCheatFile);
}
}
private bool SaveCheatFile(string path)
{
var file = new FileInfo(path);
if (!file.Directory.Exists)
file.Directory.Create();
using (StreamWriter sw = new StreamWriter(path))
{
string str = "";
for (int x = 0; x < Global.CheatList.cheatList.Count; x++)
{
str += FormatAddress(Global.CheatList.cheatList[x].address) + "\t";
str += String.Format("{0:X2}", Global.CheatList.cheatList[x].value) + "\t";
str += Global.CheatList.cheatList[x].domain.Name + "\t";
if (Global.CheatList.cheatList[x].IsEnabled())
str += "1\t";
else
str += "0\t";
str += Global.CheatList.cheatList[x].name + "\n";
}
sw.WriteLine(str);
}
Global.CheatList.changes = false;
return true;
}
public bool AskSave()
{
if (Global.CheatList.changes)
@ -451,7 +390,7 @@ namespace BizHawk.MultiClient
SaveAs();
}
else
SaveCheatFile(Global.CheatList.currentCheatFile);
Global.CheatList.SaveCheatFile(Global.CheatList.currentCheatFile);
return true;
}
else if (result == DialogResult.No)
@ -491,7 +430,7 @@ namespace BizHawk.MultiClient
{
if (Global.CheatList.changes)
{
SaveCheatFile(Global.CheatList.currentCheatFile);
Global.CheatList.SaveCheatFile(Global.CheatList.currentCheatFile);
}
else
{
@ -504,7 +443,7 @@ namespace BizHawk.MultiClient
if (string.Compare(Global.CheatList.currentCheatFile, "") == 0) return;
if (Global.CheatList.changes)
SaveCheatFile(Global.CheatList.currentCheatFile);
Global.CheatList.SaveCheatFile(Global.CheatList.currentCheatFile);
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
@ -512,7 +451,6 @@ namespace BizHawk.MultiClient
SaveAs();
}
private FileInfo GetFileFromUser()
{
var ofd = new OpenFileDialog();
@ -747,17 +685,12 @@ namespace BizHawk.MultiClient
if (indexes.Count > 0)
{
NameBox.Text = Global.CheatList.cheatList[indexes[0]].name;
AddressBox.Text = FormatAddress(Global.CheatList.cheatList[indexes[0]].address);
AddressBox.Text = Global.CheatList.FormatAddress(Global.CheatList.cheatList[indexes[0]].address);
ValueBox.Text = String.Format("{0:X2}", Global.CheatList.cheatList[indexes[0]].value);
CheatListView.Refresh();
}
}
private string FormatAddress(int address)
{
return String.Format("{0:X" + GetNumDigits((Global.Emulator.MainMemory.Size - 1)).ToString() + "}", address);
}
private void EditButton_Click(object sender, EventArgs e)
{
//TODO: this fails because selected index must go away to edit values, either prevent that or keep track of the last selected index