new cheat dialog - implement file saving
This commit is contained in:
parent
758b2b6675
commit
03302508fc
|
@ -146,13 +146,24 @@ namespace BizHawk.MultiClient
|
|||
|
||||
public bool Save()
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(_currentFileName))
|
||||
if (String.IsNullOrWhiteSpace(_currentFileName))
|
||||
{
|
||||
return SaveFile();
|
||||
_currentFileName = GenerateDefaultFilename();
|
||||
}
|
||||
|
||||
return SaveFile(_currentFileName);
|
||||
}
|
||||
|
||||
public bool SaveAs()
|
||||
{
|
||||
var file = GetSaveFileFromUser();
|
||||
if (file != null)
|
||||
{
|
||||
return SaveFile(file.FullName);
|
||||
}
|
||||
else
|
||||
{
|
||||
return SaveAs();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -186,41 +197,48 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
try
|
||||
{
|
||||
int ADDR, VALUE;
|
||||
int? COMPARE;
|
||||
MemoryDomain DOMAIN;
|
||||
bool ENABLED;
|
||||
string NAME;
|
||||
|
||||
if (s.Length < 6) continue;
|
||||
//NewCheat c = new NewCheat(
|
||||
string[] vals = s.Split('\t');
|
||||
ADDR = Int32.Parse(vals[0], NumberStyles.HexNumber);
|
||||
VALUE = Int32.Parse(vals[1], NumberStyles.HexNumber);
|
||||
|
||||
if (vals[2] == "N")
|
||||
if (s == "----")
|
||||
{
|
||||
COMPARE = null;
|
||||
_cheatList.Add(NewCheat.Separator);
|
||||
}
|
||||
else
|
||||
{
|
||||
COMPARE = Int32.Parse(vals[2], NumberStyles.HexNumber);
|
||||
int ADDR, VALUE;
|
||||
int? COMPARE;
|
||||
MemoryDomain DOMAIN;
|
||||
bool ENABLED;
|
||||
string NAME;
|
||||
|
||||
if (s.Length < 6) continue;
|
||||
//NewCheat c = new NewCheat(
|
||||
string[] vals = s.Split('\t');
|
||||
ADDR = Int32.Parse(vals[0], NumberStyles.HexNumber);
|
||||
VALUE = Int32.Parse(vals[1], NumberStyles.HexNumber);
|
||||
|
||||
if (vals[2] == "N")
|
||||
{
|
||||
COMPARE = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
COMPARE = Int32.Parse(vals[2], NumberStyles.HexNumber);
|
||||
}
|
||||
DOMAIN = ToolHelpers.DomainByName(vals[3]);
|
||||
ENABLED = vals[4] == "1";
|
||||
NAME = vals[5];
|
||||
|
||||
Watch w = Watch.GenerateWatch(
|
||||
DOMAIN,
|
||||
ADDR,
|
||||
Watch.WatchSize.Byte,
|
||||
Watch.DisplayType.Hex,
|
||||
NAME,
|
||||
false
|
||||
);
|
||||
|
||||
NewCheat c = new NewCheat(w, COMPARE, ENABLED);
|
||||
_cheatList.Add(c);
|
||||
}
|
||||
DOMAIN = ToolHelpers.DomainByName(vals[3]);
|
||||
ENABLED = vals[4] == "1";
|
||||
NAME = vals[5];
|
||||
|
||||
Watch w = Watch.GenerateWatch(
|
||||
DOMAIN,
|
||||
ADDR,
|
||||
Watch.WatchSize.Byte,
|
||||
Watch.DisplayType.Hex,
|
||||
NAME,
|
||||
false
|
||||
);
|
||||
|
||||
NewCheat c = new NewCheat(w, COMPARE, ENABLED);
|
||||
_cheatList.Add(c);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
@ -239,14 +257,74 @@ namespace BizHawk.MultiClient
|
|||
|
||||
#region privates
|
||||
|
||||
private bool SaveFile()
|
||||
private string GenerateDefaultFilename()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
PathEntry pathEntry = Global.Config.PathEntries[Global.Emulator.SystemId, "Cheats"];
|
||||
if (pathEntry == null)
|
||||
{
|
||||
pathEntry = Global.Config.PathEntries[Global.Emulator.SystemId, "Base"];
|
||||
}
|
||||
string path = PathManager.MakeAbsolutePath(pathEntry.Path, Global.Emulator.SystemId);
|
||||
|
||||
var f = new FileInfo(path);
|
||||
if (f.Directory != null && f.Directory.Exists == false)
|
||||
{
|
||||
f.Directory.Create();
|
||||
}
|
||||
|
||||
return Path.Combine(path, PathManager.FilesystemSafeName(Global.Game) + ".cht");
|
||||
}
|
||||
|
||||
private bool SaveAs()
|
||||
private bool SaveFile(string path)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
try
|
||||
{
|
||||
FileInfo file = new FileInfo(path);
|
||||
if (file.Directory != null && !file.Directory.Exists)
|
||||
{
|
||||
file.Directory.Create();
|
||||
}
|
||||
|
||||
using (StreamWriter sw = new StreamWriter(path))
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
foreach (var cheat in _cheatList)
|
||||
{
|
||||
if (cheat.IsSeparator)
|
||||
{
|
||||
sb.AppendLine("----");
|
||||
}
|
||||
else
|
||||
{
|
||||
//Set to hex for saving
|
||||
Watch.DisplayType type = cheat.Type;
|
||||
cheat.SetType(Watch.DisplayType.Hex);
|
||||
|
||||
sb
|
||||
.Append(cheat.AddressStr).Append('\t')
|
||||
.Append(cheat.ValueStr).Append('\t')
|
||||
.Append(cheat.Compare.HasValue ? cheat.Compare.Value : 'N').Append('\t')
|
||||
.Append(cheat.Domain != null ? cheat.Domain.Name : String.Empty).Append('\t')
|
||||
.Append(cheat.Enabled ? '1' : '0').Append('\t')
|
||||
.Append(cheat.Name)
|
||||
.AppendLine();
|
||||
|
||||
//TODO: save big endian, size, and display type
|
||||
}
|
||||
}
|
||||
|
||||
sw.WriteLine(sb.ToString());
|
||||
}
|
||||
|
||||
_changes = false;
|
||||
_currentFileName = path;
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -273,6 +351,33 @@ namespace BizHawk.MultiClient
|
|||
return file;
|
||||
}
|
||||
|
||||
private FileInfo GetSaveFileFromUser()
|
||||
{
|
||||
var sfd = new SaveFileDialog();
|
||||
if (!String.IsNullOrWhiteSpace(_currentFileName))
|
||||
{
|
||||
sfd.FileName = Path.GetFileNameWithoutExtension(Global.CheatList.CurrentCheatFile);
|
||||
}
|
||||
else if (!(Global.Emulator is NullEmulator))
|
||||
{
|
||||
sfd.FileName = PathManager.FilesystemSafeName(Global.Game);
|
||||
}
|
||||
sfd.InitialDirectory = PathManager.GetCheatsPath(Global.Game);
|
||||
sfd.Filter = "Cheat Files (*.cht)|*.cht|All Files|*.*";
|
||||
sfd.RestoreDirectory = true;
|
||||
Global.Sound.StopSound();
|
||||
var result = sfd.ShowDialog();
|
||||
Global.Sound.StartSound();
|
||||
if (result != DialogResult.OK)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var file = new FileInfo(sfd.FileName);
|
||||
Global.Config.LastRomPath = file.DirectoryName;
|
||||
return file;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,7 +81,13 @@ namespace BizHawk.MultiClient
|
|||
get { if (_compare.HasValue && !IsSeparator) return _compare; else return null; }
|
||||
}
|
||||
|
||||
public MemoryDomain Domain { get { return _watch.Domain; } }
|
||||
public MemoryDomain Domain
|
||||
{
|
||||
get
|
||||
{
|
||||
return _watch.Domain;
|
||||
}
|
||||
}
|
||||
|
||||
public Watch.WatchSize Size
|
||||
{
|
||||
|
@ -213,6 +219,14 @@ namespace BizHawk.MultiClient
|
|||
}
|
||||
}
|
||||
|
||||
public void SetType(Watch.DisplayType type)
|
||||
{
|
||||
if (Watch.AvailableTypes(_watch.Size).Contains(type))
|
||||
{
|
||||
_watch.Type = type;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region private parts
|
||||
|
|
|
@ -204,21 +204,21 @@
|
|||
//
|
||||
// SaveMenuItem
|
||||
//
|
||||
this.SaveMenuItem.Enabled = false;
|
||||
this.SaveMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.SaveAs;
|
||||
this.SaveMenuItem.Name = "SaveMenuItem";
|
||||
this.SaveMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
|
||||
this.SaveMenuItem.Size = new System.Drawing.Size(195, 22);
|
||||
this.SaveMenuItem.Text = "&Save";
|
||||
this.SaveMenuItem.Click += new System.EventHandler(this.SaveMenuItem_Click);
|
||||
//
|
||||
// SaveAsMenuItem
|
||||
//
|
||||
this.SaveAsMenuItem.Enabled = false;
|
||||
this.SaveAsMenuItem.Name = "SaveAsMenuItem";
|
||||
this.SaveAsMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
|
||||
| System.Windows.Forms.Keys.S)));
|
||||
this.SaveAsMenuItem.Size = new System.Drawing.Size(195, 22);
|
||||
this.SaveAsMenuItem.Text = "Save &As...";
|
||||
this.SaveAsMenuItem.Click += new System.EventHandler(this.SaveAsMenuItem_Click);
|
||||
//
|
||||
// AppendMenuItem
|
||||
//
|
||||
|
@ -503,12 +503,12 @@
|
|||
// SaveToolBarItem
|
||||
//
|
||||
this.SaveToolBarItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.SaveToolBarItem.Enabled = false;
|
||||
this.SaveToolBarItem.Image = ((System.Drawing.Image)(resources.GetObject("SaveToolBarItem.Image")));
|
||||
this.SaveToolBarItem.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.SaveToolBarItem.Name = "SaveToolBarItem";
|
||||
this.SaveToolBarItem.Size = new System.Drawing.Size(23, 22);
|
||||
this.SaveToolBarItem.Text = "&Save";
|
||||
this.SaveToolBarItem.Click += new System.EventHandler(this.SaveMenuItem_Click);
|
||||
//
|
||||
// toolStripSeparator
|
||||
//
|
||||
|
|
|
@ -56,7 +56,7 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
CheatListView.ItemCount = Global.CheatList2.Count;
|
||||
TotalLabel.Text = Global.CheatList2.CheatCount.ToString()
|
||||
+ (Global.CheatList2.CheatCount == 1 ? " cheat" : " cheats")
|
||||
+ (Global.CheatList2.CheatCount == 1 ? " cheat " : " cheats ")
|
||||
+ Global.CheatList2.ActiveCheatCount.ToString() + " active";
|
||||
}
|
||||
|
||||
|
@ -87,16 +87,14 @@ namespace BizHawk.MultiClient
|
|||
private void UpdateMessageLabel(bool saved = false)
|
||||
{
|
||||
string message = String.Empty;
|
||||
if (!String.IsNullOrWhiteSpace(Global.CheatList2.CurrentFileName))
|
||||
|
||||
if (saved)
|
||||
{
|
||||
if (saved)
|
||||
{
|
||||
message = Path.GetFileName(Global.CheatList2.CurrentFileName) + " saved.";
|
||||
}
|
||||
else
|
||||
{
|
||||
message = Path.GetFileName(Global.CheatList2.CurrentFileName) + (Global.CheatList2.Changes ? " *" : String.Empty);
|
||||
}
|
||||
message = Path.GetFileName(Global.CheatList2.CurrentFileName) + " saved.";
|
||||
}
|
||||
else
|
||||
{
|
||||
message = Path.GetFileName(Global.CheatList2.CurrentFileName) + (Global.CheatList2.Changes ? " *" : String.Empty);
|
||||
}
|
||||
|
||||
MessageLabel.Text = message;
|
||||
|
@ -145,6 +143,7 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
Global.CheatList2.Load(file.FullName, append);
|
||||
UpdateListView();
|
||||
UpdateMessageLabel();
|
||||
Global.Config.RecentCheats.Add(Global.CheatList2.CurrentFileName);
|
||||
}
|
||||
}
|
||||
|
@ -397,6 +396,29 @@ namespace BizHawk.MultiClient
|
|||
SaveMenuItem.Enabled = Global.CheatList2.Changes;
|
||||
}
|
||||
|
||||
private void SaveMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Global.CheatList2.Changes)
|
||||
{
|
||||
if (Global.CheatList2.Save())
|
||||
{
|
||||
UpdateMessageLabel(saved: true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveAsMenuItem_Click(sender, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveAsMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Global.CheatList2.SaveAs())
|
||||
{
|
||||
UpdateMessageLabel(saved: true);
|
||||
}
|
||||
}
|
||||
|
||||
private void RecentSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
RecentSubMenu.DropDownItems.Clear();
|
||||
|
@ -467,8 +489,9 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
Global.CheatList2.Add(NewCheat.Separator);
|
||||
}
|
||||
|
||||
|
||||
UpdateListView();
|
||||
UpdateMessageLabel();
|
||||
}
|
||||
|
||||
private void MoveUpMenuItem_Click(object sender, EventArgs e)
|
||||
|
|
Loading…
Reference in New Issue