diff --git a/BizHawk.MultiClient/tools/CheatList.cs b/BizHawk.MultiClient/tools/CheatList.cs index b1a13b38cd..3ce409b34a 100644 --- a/BizHawk.MultiClient/tools/CheatList.cs +++ b/BizHawk.MultiClient/tools/CheatList.cs @@ -12,7 +12,8 @@ namespace BizHawk.MultiClient { public List cheatList = new List(); public string currentCheatFile = ""; - public bool changes = false; + public bool Changes = false; + public int Count { get { return cheatList.Count; } } public bool LoadCheatFile(string path, bool append) { @@ -73,9 +74,7 @@ namespace BizHawk.MultiClient } Global.Config.RecentCheats.Add(file.FullName); - changes = false; - - + Changes = false; } if (Global.Config.DisableCheatsOnLoad) @@ -179,7 +178,7 @@ namespace BizHawk.MultiClient sw.WriteLine(str); } - changes = false; + Changes = false; return true; } @@ -193,13 +192,18 @@ namespace BizHawk.MultiClient { if (Global.Config.CheatsAutoSaveOnClose) { - if (changes && cheatList.Count > 0) + if (Changes && cheatList.Count > 0) { if (currentCheatFile.Length == 0) currentCheatFile = MakeDefaultFilename(); SaveCheatFile(Global.CheatList.currentCheatFile); } + else if (cheatList.Count == 0 && currentCheatFile.Length > 0) + { + var file = new FileInfo(currentCheatFile); + file.Delete(); + } } } @@ -238,5 +242,26 @@ namespace BizHawk.MultiClient cheatList.Clear(); MemoryPulse.Clear(); } + + public void Remove(Cheat c) + { + MemoryPulse.Remove(c.domain, c.address); + cheatList.Remove(c); + } + + public void Add(Cheat c) + { + cheatList.Add(c); + } + + public Cheat Cheat(int index) + { + return cheatList[index]; + } + + public void Insert(int index, Cheat item) + { + cheatList.Insert(index, item); + } } } diff --git a/BizHawk.MultiClient/tools/Cheats.cs b/BizHawk.MultiClient/tools/Cheats.cs index 25bbcaa4c3..f37e53de28 100644 --- a/BizHawk.MultiClient/tools/Cheats.cs +++ b/BizHawk.MultiClient/tools/Cheats.cs @@ -63,37 +63,37 @@ namespace BizHawk.MultiClient private void CheatListView_QueryItemBkColor(int index, int column, ref Color color) { - if (Global.CheatList.cheatList[index].address < 0) + if (Global.CheatList.Cheat(index).address < 0) color = Color.DarkGray; - else if (!Global.CheatList.cheatList[index].IsEnabled()) + else if (!Global.CheatList.Cheat(index).IsEnabled()) color = this.BackColor; } private void CheatListView_QueryItemText(int index, int column, out string text) { text = ""; - if (Global.CheatList.cheatList[index].address == -1) + if (Global.CheatList.Cheat(index).address == -1) return; if (column == 0) //Name { - text = Global.CheatList.cheatList[index].name; + text = Global.CheatList.Cheat(index).name; } if (column == 1) //Address { - text = Global.CheatList.FormatAddress(Global.CheatList.cheatList[index].address); + text = Global.CheatList.FormatAddress(Global.CheatList.Cheat(index).address); } if (column == 2) //Value { - text = String.Format("{0:X2}", Global.CheatList.cheatList[index].value); + text = String.Format("{0:X2}", Global.CheatList.Cheat(index).value); } if (column == 3) //Domain { - text = Global.CheatList.cheatList[index].domain.Name; + text = Global.CheatList.Cheat(index).domain.Name; } if (column == 4) //Enabled { - if (Global.CheatList.cheatList[index].IsEnabled()) + if (Global.CheatList.Cheat(index).IsEnabled()) text = "*"; else text = ""; @@ -145,7 +145,7 @@ namespace BizHawk.MultiClient public void AddCheat(Cheat c) { Changes(); - Global.CheatList.cheatList.Add(c); + Global.CheatList.Add(c); Global.RenderPanel.AddMessage("Cheat added."); if (!this.IsHandleCreated || this.IsDisposed) return; DisplayCheatsList(); @@ -156,7 +156,7 @@ namespace BizHawk.MultiClient { bool z = true; - if (Global.CheatList.changes) z = AskSave(); + if (Global.CheatList.Changes) z = AskSave(); if (z) { @@ -168,7 +168,7 @@ namespace BizHawk.MultiClient Global.Config.RecentCheats.Remove(file); } DisplayCheatsList(); - Global.CheatList.changes = false; + Global.CheatList.Changes = false; } } @@ -255,7 +255,7 @@ namespace BizHawk.MultiClient public void DisplayCheatsList() { UpdateNumberOfCheats(); - CheatListView.ItemCount = Global.CheatList.cheatList.Count; + CheatListView.ItemCount = Global.CheatList.Count; } private void MoveUp() @@ -265,9 +265,9 @@ namespace BizHawk.MultiClient if (indexes.Count == 0) return; foreach (int index in indexes) { - temp = Global.CheatList.cheatList[index]; - Global.CheatList.cheatList.Remove(Global.CheatList.cheatList[index]); - Global.CheatList.cheatList.Insert(index - 1, temp); + temp = Global.CheatList.Cheat(index); + Global.CheatList.Remove(Global.CheatList.Cheat(index)); + Global.CheatList.Insert(index - 1, temp); //Note: here it will get flagged many times redundantly potentially, //but this avoids it being flagged falsely when the user did not select an index @@ -292,13 +292,13 @@ namespace BizHawk.MultiClient if (indexes.Count == 0) return; foreach (int index in indexes) { - temp = Global.CheatList.cheatList[index]; + temp = Global.CheatList.Cheat(index); - if (index < Global.CheatList.cheatList.Count - 1) + if (index < Global.CheatList.Count - 1) { - Global.CheatList.cheatList.Remove(Global.CheatList.cheatList[index]); - Global.CheatList.cheatList.Insert(index + 1, temp); + Global.CheatList.Remove(Global.CheatList.Cheat(index)); + Global.CheatList.Insert(index + 1, temp); } @@ -340,7 +340,7 @@ namespace BizHawk.MultiClient void Changes() { - Global.CheatList.changes = true; + Global.CheatList.Changes = true; MessageLabel.Text = Path.GetFileName(Global.CheatList.currentCheatFile) + " *"; } @@ -378,7 +378,7 @@ namespace BizHawk.MultiClient public bool AskSave() { - if (Global.CheatList.changes) + if (Global.CheatList.Changes) { DialogResult result = MessageBox.Show("Save Changes?", "Cheats", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3); @@ -404,14 +404,14 @@ namespace BizHawk.MultiClient private void NewCheatList() { bool result = true; - if (Global.CheatList.changes) result = AskSave(); + if (Global.CheatList.Changes) result = AskSave(); if (result == true) { Global.CheatList.Clear(); DisplayCheatsList(); Global.CheatList.currentCheatFile = ""; - Global.CheatList.changes = false; + Global.CheatList.Changes = false; MessageLabel.Text = ""; } } @@ -488,7 +488,7 @@ namespace BizHawk.MultiClient if (file != null) { bool r = true; - if (Global.CheatList.changes) r = AskSave(); + if (Global.CheatList.Changes) r = AskSave(); if (r) { LoadCheatFile(file.FullName, false); @@ -517,10 +517,10 @@ namespace BizHawk.MultiClient { x = indexes[0]; if (indexes[0] > 0) - Global.CheatList.cheatList.Insert(indexes[0], c); + Global.CheatList.Insert(indexes[0], c); } else - Global.CheatList.cheatList.Add(c); + Global.CheatList.Add(c); DisplayCheatsList(); CheatListView.Refresh(); } @@ -563,14 +563,14 @@ namespace BizHawk.MultiClient private void RemoveCheat() { - if (Global.CheatList.cheatList.Count == 0) return; + if (Global.CheatList.Count == 0) return; Changes(); ListView.SelectedIndexCollection indexes = CheatListView.SelectedIndices; if (indexes.Count > 0) { foreach (int index in indexes) { - Global.CheatList.cheatList.Remove(Global.CheatList.cheatList[indexes[0]]); //index[0] used since each iteration will make this the correct list index + Global.CheatList.Remove(Global.CheatList.Cheat(indexes[0])); //index[0] used since each iteration will make this the correct list index } DisplayCheatsList(); } @@ -590,13 +590,13 @@ namespace BizHawk.MultiClient { string message = ""; int active = 0; - for (int x = 0; x < Global.CheatList.cheatList.Count; x++) + for (int x = 0; x < Global.CheatList.Count; x++) { - if (Global.CheatList.cheatList[x].IsEnabled()) + if (Global.CheatList.Cheat(x).IsEnabled()) active++; } - int c = Global.CheatList.cheatList.Count; + int c = Global.CheatList.Count; if (c == 1) message += c.ToString() + " cheat (" + active.ToString() + " active)"; else if (c == 0) @@ -628,11 +628,11 @@ namespace BizHawk.MultiClient { Cheat c = new Cheat(); int x = indexes[0]; - c.name = Global.CheatList.cheatList[x].name; - c.address = Global.CheatList.cheatList[x].address; - c.value = Global.CheatList.cheatList[x].value; + c.name = Global.CheatList.Cheat(x).name; + c.address = Global.CheatList.Cheat(x).address; + c.value = Global.CheatList.Cheat(x).value; Changes(); - Global.CheatList.cheatList.Add(c); + Global.CheatList.Add(c); DisplayCheatsList(); } } @@ -654,13 +654,13 @@ namespace BizHawk.MultiClient { for (int x = 0; x < indexes.Count; x++) { - if (Global.CheatList.cheatList[indexes[x]].IsEnabled()) - Global.CheatList.cheatList[indexes[x]].Disable(); + if (Global.CheatList.Cheat(indexes[x]).IsEnabled()) + Global.CheatList.Cheat(indexes[x]).Disable(); else { try { - Global.CheatList.cheatList[indexes[x]].Enable(); + Global.CheatList.Cheat(indexes[x]).Enable(); } catch { @@ -683,21 +683,23 @@ namespace BizHawk.MultiClient ListView.SelectedIndexCollection indexes = CheatListView.SelectedIndices; if (indexes.Count > 0) { - NameBox.Text = Global.CheatList.cheatList[indexes[0]].name; - AddressBox.Text = Global.CheatList.FormatAddress(Global.CheatList.cheatList[indexes[0]].address); - ValueBox.Text = String.Format("{0:X2}", Global.CheatList.cheatList[indexes[0]].value); + NameBox.Text = Global.CheatList.Cheat(indexes[0]).name; + AddressBox.Text = Global.CheatList.FormatAddress(Global.CheatList.Cheat(indexes[0]).address); + ValueBox.Text = String.Format("{0:X2}", Global.CheatList.Cheat(indexes[0]).value); CheatListView.Refresh(); } } 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 ListView.SelectedIndexCollection indexes = CheatListView.SelectedIndices; if (indexes.Count > 0) { if (AddressBox.Text.Length > 0 && ValueBox.Text.Length > 0) - Global.CheatList.cheatList[indexes[0]] = MakeCheat(); + { + Global.CheatList.Remove(Global.CheatList.Cheat(indexes[0])); + Global.CheatList.Add(MakeCheat()); + } CheatListView.Refresh(); } } @@ -791,7 +793,7 @@ namespace BizHawk.MultiClient private void fileToolStripMenuItem_DropDownOpened(object sender, EventArgs e) { - if (string.Compare(Global.CheatList.currentCheatFile, "") == 0 || !Global.CheatList.changes) + if (string.Compare(Global.CheatList.currentCheatFile, "") == 0 || !Global.CheatList.Changes) { saveToolStripMenuItem.Enabled = false; }