Various fixes
This commit is contained in:
parent
9f02fd75af
commit
9b8d2f70ab
|
@ -22,6 +22,34 @@ namespace BizHawk.Client.Common
|
|||
return sb.ToString();
|
||||
}
|
||||
|
||||
public string GetInputLogEntry(int frame)
|
||||
{
|
||||
if (frame < FrameCount && frame >= 0)
|
||||
{
|
||||
int getframe;
|
||||
|
||||
if (LoopOffset.HasValue)
|
||||
{
|
||||
if (frame < _log.Count)
|
||||
{
|
||||
getframe = frame;
|
||||
}
|
||||
else
|
||||
{
|
||||
getframe = ((frame - LoopOffset.Value) % (_log.Count - LoopOffset.Value)) + LoopOffset.Value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
getframe = frame;
|
||||
}
|
||||
|
||||
return _log[getframe];
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public virtual bool ExtractInputLog(TextReader reader, out string errorMessage)
|
||||
{
|
||||
errorMessage = string.Empty;
|
||||
|
|
|
@ -26,6 +26,16 @@ namespace BizHawk.Client.Common
|
|||
return sb.ToString();
|
||||
}
|
||||
|
||||
public string GetInputLogEntry(int frame)
|
||||
{
|
||||
if (frame < FrameCount && frame >= 0)
|
||||
{
|
||||
return _log[frame];
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public bool ExtractInputLog(TextReader reader, out string errorMessage)
|
||||
{
|
||||
errorMessage = string.Empty;
|
||||
|
|
|
@ -110,6 +110,13 @@ namespace BizHawk.Client.Common
|
|||
/// <returns>returns a string represntation of the input log in its current state</returns>
|
||||
string GetInputLog();
|
||||
|
||||
/// <summary>
|
||||
/// Gets one frame from the input log.
|
||||
/// </summary>
|
||||
/// <param name="frame">The frame to get.</param>
|
||||
/// <returns></returns>
|
||||
string GetInputLogEntry(int frame);
|
||||
|
||||
/// <summary>
|
||||
/// Compares the input log inside reader with the movie's current input to see if the reader's input belongs to the same timeline,
|
||||
/// in other words, if reader's input is completely contained in the movie's input, then it is considered in the same timeline
|
||||
|
|
|
@ -52,26 +52,23 @@ namespace BizHawk.Client.Common
|
|||
return; // Can this break anything?
|
||||
}
|
||||
|
||||
if (frame >= LagLog.Count)
|
||||
{
|
||||
LagLog.Add(value.Value);
|
||||
if (frame >= LagLog.Count)
|
||||
{
|
||||
System.Diagnostics.Debugger.Break();
|
||||
System.Diagnostics.Debug.Print("Lag Log error. f" + frame);
|
||||
do
|
||||
{
|
||||
LagLog.Add(value.Value);
|
||||
} while (frame >= LagLog.Count);
|
||||
}
|
||||
}
|
||||
bool wasValue;
|
||||
if (frame < LagLog.Count)
|
||||
wasValue = LagLog[frame];
|
||||
else if (frame == WasLag.Count)
|
||||
wasValue = value.Value;
|
||||
else
|
||||
LagLog[frame] = value.Value;
|
||||
wasValue = WasLag[frame];
|
||||
|
||||
if (frame == WasLag.Count)
|
||||
WasLag.Add(value.Value);
|
||||
WasLag.Add(wasValue);
|
||||
else
|
||||
WasLag[frame] = value.Value;
|
||||
WasLag[frame] = wasValue;
|
||||
|
||||
if (frame >= LagLog.Count)
|
||||
LagLog.Add(value.Value);
|
||||
else
|
||||
LagLog[frame] = value.Value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -225,35 +225,6 @@ namespace BizHawk.Client.Common
|
|||
.GetFloat(buttonName);
|
||||
}
|
||||
|
||||
// TODO: try not to need this, or at least use GetInputState and then a log entry generator
|
||||
public string GetInputLogEntry(int frame)
|
||||
{
|
||||
if (frame < FrameCount && frame >= 0)
|
||||
{
|
||||
int getframe;
|
||||
|
||||
if (LoopOffset.HasValue)
|
||||
{
|
||||
if (frame < _log.Count)
|
||||
{
|
||||
getframe = frame;
|
||||
}
|
||||
else
|
||||
{
|
||||
getframe = ((frame - LoopOffset.Value) % (_log.Count - LoopOffset.Value)) + LoopOffset.Value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
getframe = frame;
|
||||
}
|
||||
|
||||
return _log[getframe];
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public void ClearGreenzone()
|
||||
{
|
||||
if (StateManager.Any())
|
||||
|
|
|
@ -160,6 +160,8 @@ namespace BizHawk.Client.Common
|
|||
|
||||
public new void Remove(TasMovieMarker item)
|
||||
{
|
||||
if (item == null) // TODO: Don't do this.
|
||||
return;
|
||||
_movie.ChangeLog.AddMarkerChange(null, item.Frame, item.Message);
|
||||
base.Remove(item);
|
||||
OnListChanged(NotifyCollectionChangedAction.Remove);
|
||||
|
@ -187,6 +189,8 @@ namespace BizHawk.Client.Common
|
|||
public void Move(int fromFrame, int toFrame)
|
||||
{
|
||||
TasMovieMarker m = Get(fromFrame);
|
||||
if (m == null) // TODO: Don't do this.
|
||||
return;
|
||||
_movie.ChangeLog.AddMarkerChange(m, m.Frame);
|
||||
Insert(0, new TasMovieMarker(toFrame, m.Message));
|
||||
Remove(m);
|
||||
|
|
|
@ -285,6 +285,7 @@
|
|||
this.Name = "MacroInputTool";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Macro Input";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MacroInputTool_FormClosing);
|
||||
this.Load += new System.EventHandler(this.MacroInputTool_Load);
|
||||
this.Resize += new System.EventHandler(this.MacroInputTool_Resize);
|
||||
this.MacroMenu.ResumeLayout(false);
|
||||
|
|
|
@ -38,8 +38,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void MacroInputTool_Load(object sender, EventArgs e)
|
||||
{
|
||||
// Movie recording must be active
|
||||
if (!Global.MovieSession.Movie.IsActive)
|
||||
// Movie recording must be active (check TAStudio because opening a project re-loads the ROM,
|
||||
// which resets tools before the movie session becomes active)
|
||||
if (!Global.MovieSession.Movie.IsActive && !GlobalWin.Tools.IsLoaded<TAStudio>())
|
||||
{
|
||||
MessageBox.Show("In order to use this tool you must be recording a movie.");
|
||||
this.Close();
|
||||
|
@ -63,6 +64,15 @@ namespace BizHawk.Client.EmuHawk
|
|||
_initializing = false;
|
||||
}
|
||||
|
||||
private void MacroInputTool_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (_initializing)
|
||||
return;
|
||||
|
||||
if (!AskSaveChanges())
|
||||
e.Cancel = true;
|
||||
}
|
||||
|
||||
public void Restart()
|
||||
{
|
||||
if (_initializing)
|
||||
|
@ -90,6 +100,20 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public bool AskSaveChanges()
|
||||
{
|
||||
if (unsavedZones.Count == 0 || IsDisposed)
|
||||
return true;
|
||||
else
|
||||
{
|
||||
DialogResult result = MessageBox.Show("You have unsaved macro(s). Do you wish to save them?", "Save?", MessageBoxButtons.YesNoCancel);
|
||||
if (result == DialogResult.Cancel)
|
||||
return false;
|
||||
else if (result == DialogResult.No)
|
||||
return true;
|
||||
}
|
||||
|
||||
for (int i = 0; i < unsavedZones.Count; i++)
|
||||
SaveMacroAs(zones[unsavedZones[i]]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -98,6 +122,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
Close();
|
||||
}
|
||||
|
||||
List<int> unsavedZones = new List<int>();
|
||||
private void SetZoneButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (StartNum.Value >= CurrentMovie.InputLogLength || EndNum.Value >= CurrentMovie.InputLogLength)
|
||||
|
@ -110,6 +135,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
newZone.Name = "Zone " + zones.Count;
|
||||
zones.Add(newZone);
|
||||
ZonesList.Items.Add(newZone.Name + " - length: " + newZone.Length);
|
||||
|
||||
unsavedZones.Add(ZonesList.Items.Count - 1);
|
||||
}
|
||||
|
||||
private MovieZone selectedZone
|
||||
|
@ -190,7 +217,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
return;
|
||||
}
|
||||
|
||||
SaveMacroAs(selectedZone);
|
||||
if (SaveMacroAs(selectedZone))
|
||||
unsavedZones.Remove(ZonesList.SelectedIndex);
|
||||
}
|
||||
|
||||
private void loadMacroToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
|
@ -231,9 +259,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
#endregion
|
||||
|
||||
public static void SaveMacroAs(MovieZone macro)
|
||||
public static bool SaveMacroAs(MovieZone macro)
|
||||
{
|
||||
SaveFileDialog dialog = new SaveFileDialog();
|
||||
// Create directory?
|
||||
bool create = false;
|
||||
if (!Directory.Exists(SuggestedFolder()))
|
||||
{
|
||||
|
@ -241,7 +270,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
create = true;
|
||||
}
|
||||
dialog.InitialDirectory = SuggestedFolder();
|
||||
// Create directory?
|
||||
dialog.FileName = macro.Name;
|
||||
dialog.Filter = "Movie Macros (*.bk2m)|*.bk2m|All Files|*.*";
|
||||
|
||||
DialogResult result = dialog.ShowHawkDialog();
|
||||
|
@ -249,11 +278,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (create)
|
||||
Directory.Delete(dialog.InitialDirectory);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
macro.Save(dialog.FileName);
|
||||
Global.Config.RecentMacros.Add(dialog.FileName);
|
||||
|
||||
return true;
|
||||
}
|
||||
public static MovieZone LoadMacro()
|
||||
{
|
||||
|
|
|
@ -65,10 +65,21 @@ namespace BizHawk.Client.EmuHawk
|
|||
Bk2LogEntryGenerator logGenerator = new Bk2LogEntryGenerator("");
|
||||
logGenerator.SetSource(controller);
|
||||
logGenerator.GenerateLogEntry(); // Reference and create all buttons.
|
||||
for (int i = 0; i < length; i++)
|
||||
|
||||
string movieKey = logGenerator.GenerateLogKey().Replace("LogKey:", "").Replace("#", "");
|
||||
movieKey = movieKey.Substring(0, movieKey.Length - 1);
|
||||
if (key == movieKey)
|
||||
{
|
||||
controller.LatchFromSource(movie.GetInputState(i + start));
|
||||
_log[i] = logGenerator.GenerateLogEntry();
|
||||
for (int i = 0; i < length; i++)
|
||||
_log[i] = movie.GetInputLogEntry(i + start);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
controller.LatchFromSource(movie.GetInputState(i + start));
|
||||
_log[i] = logGenerator.GenerateLogEntry();
|
||||
}
|
||||
}
|
||||
}
|
||||
private void ReSetLog()
|
||||
|
|
|
@ -2393,7 +2393,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
/// <summary>
|
||||
/// Column will be drawn with an emphasized look, if true
|
||||
/// </summary>
|
||||
public bool Emphasis { get; set; }
|
||||
private bool _emphasis;
|
||||
public bool Emphasis
|
||||
{
|
||||
get { return _emphasis; }
|
||||
set { _emphasis = value; }
|
||||
}
|
||||
|
||||
public RollColumn()
|
||||
{
|
||||
|
|
|
@ -18,6 +18,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public bool UpdateBefore { get { return false; } }
|
||||
|
||||
private int lastRefresh = 0;
|
||||
public void UpdateValues()
|
||||
{
|
||||
if (!IsHandleCreated || IsDisposed || CurrentTasMovie == null)
|
||||
|
@ -37,7 +38,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
if (TasPlaybackBox.FollowCursor)
|
||||
SetVisibleIndex();
|
||||
|
||||
if (TasView.IsPartiallyVisible(Global.Emulator.Frame) || TasView.IsPartiallyVisible(Global.Emulator.Frame - 1))
|
||||
if (TasView.IsPartiallyVisible(Global.Emulator.Frame) || TasView.IsPartiallyVisible(lastRefresh))
|
||||
refreshNeeded = true;
|
||||
|
||||
if (refreshNeeded)
|
||||
|
@ -79,7 +80,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
TastudioToStopMovie();
|
||||
TasView.AllColumns.Clear();
|
||||
NewDefaultProject();
|
||||
StartNewTasMovie();
|
||||
SetUpColumns();
|
||||
RefreshTasView();
|
||||
}
|
||||
|
|
|
@ -988,7 +988,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
(byte[])StatableEmulator.SaveStateBinary().Clone());
|
||||
|
||||
GlobalWin.MainForm.PauseEmulator();
|
||||
LoadProject(newProject.Filename);
|
||||
LoadFile(new FileInfo(newProject.Filename));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -181,18 +181,18 @@ namespace BizHawk.Client.EmuHawk
|
|||
// Start Scenario 3: No movie, but user wants to autload their last project
|
||||
else if (Settings.RecentTas.AutoLoad && !string.IsNullOrEmpty(Settings.RecentTas.MostRecent))
|
||||
{
|
||||
var result = LoadProject(Settings.RecentTas.MostRecent);
|
||||
bool result = LoadFile(new FileInfo(Settings.RecentTas.MostRecent));
|
||||
if (!result)
|
||||
{
|
||||
TasView.AllColumns.Clear();
|
||||
NewDefaultProject();
|
||||
StartNewTasMovie();
|
||||
}
|
||||
}
|
||||
|
||||
// Start Scenario 4: No movie, default behavior of engaging tastudio with a new default project
|
||||
else
|
||||
{
|
||||
NewDefaultProject();
|
||||
StartNewTasMovie();
|
||||
}
|
||||
|
||||
EngageTastudio();
|
||||
|
@ -304,7 +304,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
#endregion
|
||||
|
||||
#region "Loading, Saving"
|
||||
#region "Loading"
|
||||
|
||||
private void ConvertCurrentMovieToTasproj()
|
||||
{
|
||||
|
@ -315,77 +315,85 @@ namespace BizHawk.Client.EmuHawk
|
|||
Settings.RecentTas.Add(Global.MovieSession.Movie.Filename);
|
||||
}
|
||||
|
||||
private void NewTasMovie()
|
||||
private bool LoadFile(FileInfo file)
|
||||
{
|
||||
Global.MovieSession.Movie = new TasMovie(false, _saveBackgroundWorker);
|
||||
SetTasMovieCallbacks();
|
||||
CurrentTasMovie.PropertyChanged += new PropertyChangedEventHandler(this.TasMovie_OnPropertyChanged);
|
||||
CurrentTasMovie.Filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename
|
||||
CurrentTasMovie.PopulateWithDefaultHeaderValues();
|
||||
CurrentTasMovie.ClearChanges();
|
||||
TasView.RowCount = 1;
|
||||
if (!file.Exists)
|
||||
{
|
||||
Settings.RecentTas.HandleLoadError(file.FullName);
|
||||
return false;
|
||||
}
|
||||
|
||||
CurrentTasMovie.Filename = file.FullName;
|
||||
try
|
||||
{
|
||||
CurrentTasMovie.Load();
|
||||
}
|
||||
catch
|
||||
{
|
||||
MessageBox.Show(
|
||||
"Tastudio could not open the file. Due to the loading process, the emulator/Tastudio may be in a unspecified state depending on the error.",
|
||||
"Tastudio",
|
||||
MessageBoxButtons.OK);
|
||||
return false;
|
||||
}
|
||||
Settings.RecentTas.Add(CurrentTasMovie.Filename);
|
||||
|
||||
if (!HandleMovieLoadStuff())
|
||||
return false;
|
||||
|
||||
RefreshDialog();
|
||||
return true;
|
||||
}
|
||||
|
||||
private void StartNewTasMovie()
|
||||
{
|
||||
if (AskSaveChanges())
|
||||
{
|
||||
NewTasMovie();
|
||||
WantsToControlStopMovie = false;
|
||||
StartNewMovieWrapper(record: true);
|
||||
CurrentTasMovie.ClearChanges();
|
||||
WantsToControlStopMovie = true;
|
||||
SetTextProperty();
|
||||
Global.MovieSession.Movie = new TasMovie(false, _saveBackgroundWorker);
|
||||
CurrentTasMovie.PropertyChanged += new PropertyChangedEventHandler(this.TasMovie_OnPropertyChanged);
|
||||
CurrentTasMovie.Filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename
|
||||
CurrentTasMovie.PopulateWithDefaultHeaderValues();
|
||||
CurrentTasMovie.ClearChanges(); // Don't ask to save changes here.
|
||||
HandleMovieLoadStuff();
|
||||
|
||||
RefreshDialog();
|
||||
}
|
||||
}
|
||||
|
||||
public bool LoadProject(string path)
|
||||
private bool HandleMovieLoadStuff(TasMovie movie = null)
|
||||
{
|
||||
if (AskSaveChanges())
|
||||
{
|
||||
var movie = new TasMovie(false, _saveBackgroundWorker)
|
||||
{
|
||||
Filename = path,
|
||||
ClientSettingsForSave = ClientSettingsForSave,
|
||||
GetClientSettingsOnLoad = GetClientSettingsOnLoad
|
||||
};
|
||||
if (movie == null)
|
||||
movie = CurrentTasMovie;
|
||||
|
||||
movie.PropertyChanged += TasMovie_OnPropertyChanged;
|
||||
movie.Load();
|
||||
WantsToControlStopMovie = false;
|
||||
bool result = StartNewMovieWrapper(movie.InputLogLength == 0, movie);
|
||||
if (!result)
|
||||
return false;
|
||||
WantsToControlStopMovie = true;
|
||||
|
||||
var file = new FileInfo(path);
|
||||
if (!file.Exists)
|
||||
{
|
||||
Settings.RecentTas.HandleLoadError(path);
|
||||
}
|
||||
CurrentTasMovie.ClearChanges();
|
||||
|
||||
WantsToControlStopMovie = false;
|
||||
SetTasMovieCallbacks();
|
||||
SetTextProperty();
|
||||
MessageStatusLabel.Text = Path.GetFileName(CurrentTasMovie.Filename) + " loaded.";
|
||||
|
||||
var shouldRecord = movie.InputLogLength == 0;
|
||||
return true;
|
||||
}
|
||||
private bool StartNewMovieWrapper(bool record, IMovie movie = null)
|
||||
{
|
||||
_initializing = true;
|
||||
if (movie == null)
|
||||
movie = CurrentTasMovie;
|
||||
bool result = GlobalWin.MainForm.StartNewMovie(movie, record);
|
||||
_initializing = false;
|
||||
|
||||
var result = StartNewMovieWrapper(movie: movie, record: shouldRecord);
|
||||
if (!result)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SetTasMovieCallbacks();
|
||||
|
||||
WantsToControlStopMovie = true;
|
||||
Settings.RecentTas.Add(path);
|
||||
Text = "TAStudio - " + CurrentTasMovie.Name;
|
||||
|
||||
RefreshDialog();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return result;
|
||||
}
|
||||
|
||||
private void DummyLoadProject(string path)
|
||||
{
|
||||
LoadProject(path);
|
||||
if (AskSaveChanges())
|
||||
LoadFile(new FileInfo(path));
|
||||
}
|
||||
private void DummyLoadMacro(string path)
|
||||
{
|
||||
|
@ -411,54 +419,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
private void NewDefaultProject()
|
||||
{
|
||||
NewTasMovie();
|
||||
StartNewMovieWrapper(record: true);
|
||||
CurrentTasMovie.TasStateManager.Capture();
|
||||
CurrentTasMovie.SwitchToRecord();
|
||||
CurrentTasMovie.ClearChanges();
|
||||
}
|
||||
|
||||
private bool StartNewMovieWrapper(bool record, IMovie movie = null)
|
||||
{
|
||||
_initializing = true;
|
||||
var result = GlobalWin.MainForm.StartNewMovie(movie != null ? movie : CurrentTasMovie, record);
|
||||
_initializing = false;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void LoadFile(FileInfo file)
|
||||
{
|
||||
CurrentTasMovie.Filename = file.FullName;
|
||||
try
|
||||
{
|
||||
CurrentTasMovie.Load();
|
||||
}
|
||||
catch
|
||||
{
|
||||
MessageBox.Show(
|
||||
"Tastudio could not open the file. Due to the loading process, the emulator/Tastudio may be in a unspecified state depending on the error.",
|
||||
"Tastudio",
|
||||
MessageBoxButtons.OK);
|
||||
return;
|
||||
}
|
||||
Settings.RecentTas.Add(CurrentTasMovie.Filename);
|
||||
|
||||
if (CurrentTasMovie.InputLogLength > 0) // TODO: this is probably reoccuring logic, break off into a function
|
||||
{
|
||||
CurrentTasMovie.SwitchToPlay();
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentTasMovie.SwitchToRecord();
|
||||
}
|
||||
|
||||
RefreshDialog();
|
||||
MessageStatusLabel.Text = Path.GetFileName(CurrentTasMovie.Filename) + " loaded.";
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void TastudioToStopMovie()
|
||||
|
@ -667,13 +627,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (_triggerAutoRestore)
|
||||
{
|
||||
if (Global.Emulator.Frame < 50)
|
||||
System.Diagnostics.Debugger.Break();
|
||||
|
||||
int? pauseOn = GlobalWin.MainForm.PauseOnFrame;
|
||||
GoToLastEmulatedFrameIfNecessary(_triggerAutoRestoreFromFrame.Value);
|
||||
|
||||
if (pauseOn.HasValue && _autoRestoreFrame.HasValue && _autoRestoreFrame < pauseOn)
|
||||
if (pauseOn.HasValue && _autoRestoreFrame.HasValue && _autoRestoreFrame < pauseOn)
|
||||
{ // If we are already seeking to a later frame don't shorten that journey here
|
||||
_autoRestoreFrame = GlobalWin.MainForm.PauseOnFrame;
|
||||
}
|
||||
|
@ -727,10 +684,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
var filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
if (Path.GetExtension(filePaths[0]) == "." + TasMovie.Extension)
|
||||
{
|
||||
var file = new FileInfo(filePaths[0]);
|
||||
FileInfo file = new FileInfo(filePaths[0]);
|
||||
if (file.Exists)
|
||||
{
|
||||
LoadProject(file.FullName);
|
||||
LoadFile(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,9 +50,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
if (_watchList.Count > 1)
|
||||
{
|
||||
var hasMixedSizes = _watchList.Select(x => x.Size).Distinct().Count() > 1;
|
||||
var hasMixedTypes = _watchList.Select(x => x.Type).Distinct().Count() > 1;
|
||||
var hasMixedEndian = _watchList.Select(x => x.BigEndian).Distinct().Count() > 1;
|
||||
bool hasMixedSizes = _watchList.Select(x => x.Size).Distinct().Count() > 1;
|
||||
bool hasMixedTypes = _watchList.Select(x => x.Type).Distinct().Count() > 1;
|
||||
bool hasMixedEndian = _watchList.Select(x => x.BigEndian).Distinct().Count() > 1;
|
||||
|
||||
if (hasMixedSizes || hasMixedTypes || hasMixedEndian)
|
||||
{
|
||||
|
@ -77,6 +77,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
.Aggregate((addrStr, nextStr) => addrStr + ("," + nextStr));
|
||||
}
|
||||
|
||||
ValueBox.ByteSize = _watchList[0].Size;
|
||||
ValueBox.Type = _watchList[0].Type;
|
||||
|
||||
ValueHexLabel.Text = _watchList[0].Type == Watch.DisplayType.Hex ? "0x" : string.Empty;
|
||||
ValueBox.Text = _watchList[0].ValueString.Replace(" ", string.Empty);
|
||||
DomainLabel.Text = _watchList[0].Domain.Name;
|
||||
|
@ -84,9 +87,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
DisplayTypeLabel.Text = Watch.DisplayTypeToString(_watchList[0].Type);
|
||||
BigEndianLabel.Text = _watchList[0].BigEndian ? "Big Endian" : "Little Endian";
|
||||
SetTitle();
|
||||
|
||||
ValueBox.ByteSize = _watchList[0].Size;
|
||||
ValueBox.Type = _watchList[0].Type;
|
||||
}
|
||||
|
||||
private void SetTitle()
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.AutoSearchCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.CompareToBox = new System.Windows.Forms.GroupBox();
|
||||
this.DifferenceBox = new BizHawk.Client.EmuHawk.UnsignedIntegerBox();
|
||||
this.DifferenceBox = new BizHawk.Client.EmuHawk.WatchValueBox();
|
||||
this.DifferenceRadio = new System.Windows.Forms.RadioButton();
|
||||
this.NumberOfChangesBox = new BizHawk.Client.EmuHawk.UnsignedIntegerBox();
|
||||
this.SpecificAddressBox = new BizHawk.Client.EmuHawk.HexTextBox();
|
||||
|
@ -144,7 +144,7 @@
|
|||
this.RebootToolbarButton = new System.Windows.Forms.ToolStripButton();
|
||||
this.ErrorIconButton = new System.Windows.Forms.ToolStripButton();
|
||||
this.ComparisonBox = new System.Windows.Forms.GroupBox();
|
||||
this.DifferentByBox = new BizHawk.Client.EmuHawk.UnsignedIntegerBox();
|
||||
this.DifferentByBox = new BizHawk.Client.EmuHawk.WatchValueBox();
|
||||
this.DifferentByRadio = new System.Windows.Forms.RadioButton();
|
||||
this.NotEqualToRadio = new System.Windows.Forms.RadioButton();
|
||||
this.EqualToRadio = new System.Windows.Forms.RadioButton();
|
||||
|
@ -1506,7 +1506,7 @@
|
|||
private System.Windows.Forms.ToolStripButton NewSearchToolButton;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator15;
|
||||
private System.Windows.Forms.GroupBox ComparisonBox;
|
||||
private UnsignedIntegerBox DifferentByBox;
|
||||
private WatchValueBox DifferentByBox;
|
||||
private System.Windows.Forms.RadioButton DifferentByRadio;
|
||||
private System.Windows.Forms.RadioButton NotEqualToRadio;
|
||||
private System.Windows.Forms.RadioButton EqualToRadio;
|
||||
|
@ -1522,7 +1522,7 @@
|
|||
private System.Windows.Forms.ToolStripButton AddToRamWatchToolBarItem;
|
||||
private System.Windows.Forms.ToolStripButton PokeAddressToolBarItem;
|
||||
private System.Windows.Forms.ToolStripButton FreezeAddressToolBarItem;
|
||||
private UnsignedIntegerBox DifferenceBox;
|
||||
private WatchValueBox DifferenceBox;
|
||||
private System.Windows.Forms.ToolStripMenuItem AutoSearchMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
|
||||
private System.Windows.Forms.ColumnHeader DiffColumn;
|
||||
|
|
|
@ -425,7 +425,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
DoSearchToolButton.Enabled =
|
||||
CopyValueToPrevToolBarItem.Enabled =
|
||||
_searches.Count > 0;
|
||||
|
||||
|
||||
UpdateUndoToolBarButtons();
|
||||
OutOfRangeCheck();
|
||||
|
||||
|
@ -443,22 +443,22 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
if (SpecificValueRadio.Checked)
|
||||
{
|
||||
return (long)SpecificValueBox.ToRawInt() & 0x00000000FFFFFFFF;
|
||||
}
|
||||
|
||||
|
||||
if (SpecificAddressRadio.Checked)
|
||||
{
|
||||
return SpecificAddressBox.ToRawInt();
|
||||
}
|
||||
|
||||
|
||||
if (NumberOfChangesRadio.Checked)
|
||||
{
|
||||
return NumberOfChangesBox.ToRawInt();
|
||||
}
|
||||
|
||||
|
||||
if (DifferenceRadio.Checked)
|
||||
{
|
||||
return DifferenceBox.ToRawInt();
|
||||
|
@ -484,12 +484,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
return RamSearchEngine.ComparisonOperator.NotEqual;
|
||||
}
|
||||
|
||||
|
||||
if (LessThanRadio.Checked)
|
||||
{
|
||||
return RamSearchEngine.ComparisonOperator.LessThan;
|
||||
}
|
||||
|
||||
|
||||
if (GreaterThanRadio.Checked)
|
||||
{
|
||||
return RamSearchEngine.ComparisonOperator.GreaterThan;
|
||||
|
@ -499,7 +499,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
return RamSearchEngine.ComparisonOperator.LessThanEqual;
|
||||
}
|
||||
|
||||
|
||||
if (GreaterThanOrEqualToRadio.Checked)
|
||||
{
|
||||
return RamSearchEngine.ComparisonOperator.GreaterThanEqual;
|
||||
|
@ -522,7 +522,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
return RamSearchEngine.Compare.SpecificValue;
|
||||
}
|
||||
|
||||
|
||||
if (SpecificAddressRadio.Checked)
|
||||
{
|
||||
return RamSearchEngine.Compare.SpecificAddress;
|
||||
|
@ -610,7 +610,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void DoDomainSizeCheck()
|
||||
{
|
||||
if (_settings.Domain.Size >= MaxDetailedSize
|
||||
if (_settings.Domain.Size >= MaxDetailedSize
|
||||
&& _settings.Mode == RamSearchEngine.Settings.SearchMode.Detailed)
|
||||
{
|
||||
_settings.Mode = RamSearchEngine.Settings.SearchMode.Fast;
|
||||
|
@ -644,18 +644,24 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void DoDisplayTypeClick(Watch.DisplayType type)
|
||||
{
|
||||
if (_settings.Type != type && !string.IsNullOrEmpty(SpecificValueBox.Text))
|
||||
if (_settings.Type != type)
|
||||
{
|
||||
SpecificValueBox.Text = "0";
|
||||
if (!string.IsNullOrEmpty(SpecificValueBox.Text))
|
||||
SpecificValueBox.Text = "0";
|
||||
if (!string.IsNullOrEmpty(DifferenceBox.Text))
|
||||
DifferenceBox.Text = "0";
|
||||
if (!string.IsNullOrEmpty(DifferentByBox.Text))
|
||||
DifferentByBox.Text = "0";
|
||||
}
|
||||
|
||||
SpecificValueBox.Type = _settings.Type = type;
|
||||
DifferenceBox.Type = type;
|
||||
DifferentByBox.Type = type;
|
||||
_searches.SetType(type);
|
||||
|
||||
_dropdownDontfire = true;
|
||||
DisplayTypeDropdown.SelectedItem = Watch.DisplayTypeToString(type);
|
||||
_dropdownDontfire = false;
|
||||
SpecificValueBox.Type = type;
|
||||
WatchListView.Refresh();
|
||||
}
|
||||
|
||||
|
@ -1081,10 +1087,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
var item = new ToolStripMenuItem
|
||||
{
|
||||
Name = type + "ToolStripMenuItem",
|
||||
Text = Watch.DisplayTypeToString(type),
|
||||
Checked = _settings.Type == type,
|
||||
};
|
||||
Name = type + "ToolStripMenuItem",
|
||||
Text = Watch.DisplayTypeToString(type),
|
||||
Checked = _settings.Type == type,
|
||||
};
|
||||
var type1 = type;
|
||||
item.Click += (o, ev) => DoDisplayTypeClick(type1);
|
||||
|
||||
|
@ -1539,7 +1545,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
SpecificValueBox.Focus();
|
||||
}
|
||||
|
||||
|
||||
SpecificAddressBox.Enabled = false;
|
||||
NumberOfChangesBox.Enabled = false;
|
||||
DifferenceBox.Enabled = false;
|
||||
|
@ -1657,7 +1663,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
private void DifferentByRadio_Click(object sender, EventArgs e)
|
||||
{
|
||||
DifferentByBox.Enabled = true;
|
||||
|
||||
|
||||
if (string.IsNullOrWhiteSpace(DifferentByBox.Text))
|
||||
{
|
||||
DifferentByBox.ResetText();
|
||||
|
|
|
@ -789,7 +789,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (SelectedWatches.Any())
|
||||
{
|
||||
var poke = new RamPoke
|
||||
RamPoke poke = new RamPoke
|
||||
{
|
||||
InitialLocation = this.ChildPointToScreen(WatchListView)
|
||||
};
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
public partial class WatchEditor : Form
|
||||
{
|
||||
public enum Mode { New, Duplicate, Edit };
|
||||
|
||||
|
||||
private readonly List<Watch> _watchList = new List<Watch>();
|
||||
|
||||
public IMemoryDomains MemoryDomains { get; set; }
|
||||
|
@ -125,7 +125,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void SetTitle()
|
||||
{
|
||||
switch(_mode)
|
||||
switch (_mode)
|
||||
{
|
||||
default:
|
||||
case Mode.New:
|
||||
|
@ -154,6 +154,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void SetDisplayTypes()
|
||||
{
|
||||
string oldType = DisplayTypeDropDown.Text;
|
||||
DisplayTypeDropDown.Items.Clear();
|
||||
switch (SizeDropDown.SelectedIndex)
|
||||
{
|
||||
|
@ -169,7 +170,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
break;
|
||||
}
|
||||
|
||||
DisplayTypeDropDown.SelectedItem = DisplayTypeDropDown.Items[0];
|
||||
if (DisplayTypeDropDown.Items.Contains(oldType))
|
||||
DisplayTypeDropDown.SelectedItem = oldType;
|
||||
else
|
||||
DisplayTypeDropDown.SelectedItem = DisplayTypeDropDown.Items[0];
|
||||
}
|
||||
|
||||
private void SetBigEndianCheckBox()
|
||||
|
|
|
@ -617,6 +617,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
case Watch.DisplayType.Signed:
|
||||
if (Text.IsSigned())
|
||||
{
|
||||
if (Text == "-")
|
||||
return 0;
|
||||
return int.Parse(Text);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue