Lua - add option to detect changes in scripts and automatically reload them. Have this option off by default for now. Also fix reloading of scripts which was recently broken.

This commit is contained in:
adelikat 2016-02-06 13:50:02 -05:00
parent d0d5df44c9
commit 487fce328b
5 changed files with 200 additions and 133 deletions

View File

@ -339,6 +339,7 @@ namespace BizHawk.Client.Common
public bool DisableLuaScriptsOnLoad = false;
public bool ToggleAllIfNoneSelected = true;
public bool RemoveRegisteredFunctionsOnToggle = true;
public bool LuaReloadOnScriptFileChange = false;
public bool RunLuaDuringTurbo = true;
// Watch Settings

View File

@ -31,15 +31,6 @@ namespace BizHawk.Client.Common
State = RunState.Disabled;
}
//public LuaFile(LuaFile file)
//{
// Name = file.Name;
// Path = file.Path;
// State = file.State;
// IsSeparator = file.IsSeparator;
// CurrentDirectory = file.CurrentDirectory;
//}
public string Name { get; set; }
public string Path { get; set; }
public bool Enabled { get { return State != RunState.Disabled; } }

View File

@ -103,6 +103,7 @@
this.PathName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.ReloadWhenScriptFileChangesMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ScriptListContextMenu.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.ConsoleContextMenu.SuspendLayout();
@ -125,14 +126,14 @@
this.ScriptContextSeparator,
this.StopAllScriptsContextItem});
this.ScriptListContextMenu.Name = "contextMenuStrip1";
this.ScriptListContextMenu.Size = new System.Drawing.Size(169, 142);
this.ScriptListContextMenu.Size = new System.Drawing.Size(165, 142);
this.ScriptListContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ScriptListContextMenu_Opening);
//
// ToggleScriptContextItem
//
this.ToggleScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Refresh1;
this.ToggleScriptContextItem.Name = "ToggleScriptContextItem";
this.ToggleScriptContextItem.Size = new System.Drawing.Size(168, 22);
this.ToggleScriptContextItem.Size = new System.Drawing.Size(164, 22);
this.ToggleScriptContextItem.Text = "&Toggle";
this.ToggleScriptContextItem.Click += new System.EventHandler(this.ToggleScriptMenuItem_Click);
//
@ -140,7 +141,7 @@
//
this.PauseScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Pause;
this.PauseScriptContextItem.Name = "PauseScriptContextItem";
this.PauseScriptContextItem.Size = new System.Drawing.Size(168, 22);
this.PauseScriptContextItem.Size = new System.Drawing.Size(164, 22);
this.PauseScriptContextItem.Text = "Pause or Resume";
this.PauseScriptContextItem.Click += new System.EventHandler(this.PauseScriptMenuItem_Click);
//
@ -148,7 +149,7 @@
//
this.EditScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CutHS;
this.EditScriptContextItem.Name = "EditScriptContextItem";
this.EditScriptContextItem.Size = new System.Drawing.Size(168, 22);
this.EditScriptContextItem.Size = new System.Drawing.Size(164, 22);
this.EditScriptContextItem.Text = "&Edit";
this.EditScriptContextItem.Click += new System.EventHandler(this.EditScriptMenuItem_Click);
//
@ -156,7 +157,7 @@
//
this.RemoveScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Close;
this.RemoveScriptContextItem.Name = "RemoveScriptContextItem";
this.RemoveScriptContextItem.Size = new System.Drawing.Size(168, 22);
this.RemoveScriptContextItem.Size = new System.Drawing.Size(164, 22);
this.RemoveScriptContextItem.Text = "&Remove";
this.RemoveScriptContextItem.Click += new System.EventHandler(this.RemoveScriptMenuItem_Click);
//
@ -164,20 +165,20 @@
//
this.InsertSeperatorContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.InsertSeparator;
this.InsertSeperatorContextItem.Name = "InsertSeperatorContextItem";
this.InsertSeperatorContextItem.Size = new System.Drawing.Size(168, 22);
this.InsertSeperatorContextItem.Size = new System.Drawing.Size(164, 22);
this.InsertSeperatorContextItem.Text = "Insert Seperator";
this.InsertSeperatorContextItem.Click += new System.EventHandler(this.InsertSeparatorMenuItem_Click);
//
// ScriptContextSeparator
//
this.ScriptContextSeparator.Name = "ScriptContextSeparator";
this.ScriptContextSeparator.Size = new System.Drawing.Size(165, 6);
this.ScriptContextSeparator.Size = new System.Drawing.Size(161, 6);
//
// StopAllScriptsContextItem
//
this.StopAllScriptsContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop;
this.StopAllScriptsContextItem.Name = "StopAllScriptsContextItem";
this.StopAllScriptsContextItem.Size = new System.Drawing.Size(168, 22);
this.StopAllScriptsContextItem.Size = new System.Drawing.Size(164, 22);
this.StopAllScriptsContextItem.Text = "Stop All Scripts";
this.StopAllScriptsContextItem.Click += new System.EventHandler(this.StopAllScriptsMenuItem_Click);
//
@ -208,7 +209,7 @@
this.toolStripSeparator1,
this.ExitMenuItem});
this.FileSubMenu.Name = "FileSubMenu";
this.FileSubMenu.Size = new System.Drawing.Size(35, 20);
this.FileSubMenu.Size = new System.Drawing.Size(37, 20);
this.FileSubMenu.Text = "&File";
this.FileSubMenu.DropDownOpened += new System.EventHandler(this.FileSubMenu_DropDownOpened);
//
@ -218,7 +219,7 @@
this.NewSessionMenuItem.Name = "NewSessionMenuItem";
this.NewSessionMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.N)));
this.NewSessionMenuItem.Size = new System.Drawing.Size(243, 22);
this.NewSessionMenuItem.Size = new System.Drawing.Size(237, 22);
this.NewSessionMenuItem.Text = "&New Session";
this.NewSessionMenuItem.Click += new System.EventHandler(this.NewSessionMenuItem_Click);
//
@ -228,7 +229,7 @@
this.OpenSessionMenuItem.Name = "OpenSessionMenuItem";
this.OpenSessionMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.O)));
this.OpenSessionMenuItem.Size = new System.Drawing.Size(243, 22);
this.OpenSessionMenuItem.Size = new System.Drawing.Size(237, 22);
this.OpenSessionMenuItem.Text = "&Open Session...";
this.OpenSessionMenuItem.Click += new System.EventHandler(this.OpenSessionMenuItem_Click);
//
@ -237,7 +238,7 @@
this.SaveSessionMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs;
this.SaveSessionMenuItem.Name = "SaveSessionMenuItem";
this.SaveSessionMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.SaveSessionMenuItem.Size = new System.Drawing.Size(243, 22);
this.SaveSessionMenuItem.Size = new System.Drawing.Size(237, 22);
this.SaveSessionMenuItem.Text = "&Save Session";
this.SaveSessionMenuItem.Click += new System.EventHandler(this.SaveSessionMenuItem_Click);
//
@ -246,21 +247,21 @@
this.SaveSessionAsMenuItem.Name = "SaveSessionAsMenuItem";
this.SaveSessionAsMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.S)));
this.SaveSessionAsMenuItem.Size = new System.Drawing.Size(243, 22);
this.SaveSessionAsMenuItem.Size = new System.Drawing.Size(237, 22);
this.SaveSessionAsMenuItem.Text = "Save Session &As...";
this.SaveSessionAsMenuItem.Click += new System.EventHandler(this.SaveSessionAsMenuItem_Click);
//
// toolStripSeparator9
//
this.toolStripSeparator9.Name = "toolStripSeparator9";
this.toolStripSeparator9.Size = new System.Drawing.Size(240, 6);
this.toolStripSeparator9.Size = new System.Drawing.Size(234, 6);
//
// RecentSessionsSubMenu
//
this.RecentSessionsSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripSeparator8});
this.RecentSessionsSubMenu.Name = "RecentSessionsSubMenu";
this.RecentSessionsSubMenu.Size = new System.Drawing.Size(243, 22);
this.RecentSessionsSubMenu.Size = new System.Drawing.Size(237, 22);
this.RecentSessionsSubMenu.Text = "Recent Sessions";
this.RecentSessionsSubMenu.DropDownOpened += new System.EventHandler(this.RecentSessionsSubMenu_DropDownOpened);
//
@ -275,7 +276,7 @@
this.toolStripSeparator3});
this.RecentScriptsSubMenu.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Recent;
this.RecentScriptsSubMenu.Name = "RecentScriptsSubMenu";
this.RecentScriptsSubMenu.Size = new System.Drawing.Size(243, 22);
this.RecentScriptsSubMenu.Size = new System.Drawing.Size(237, 22);
this.RecentScriptsSubMenu.Text = "Recent Scripts";
this.RecentScriptsSubMenu.DropDownOpened += new System.EventHandler(this.RecentScriptsSubMenu_DropDownOpened);
//
@ -287,13 +288,13 @@
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(240, 6);
this.toolStripSeparator1.Size = new System.Drawing.Size(234, 6);
//
// ExitMenuItem
//
this.ExitMenuItem.Name = "ExitMenuItem";
this.ExitMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
this.ExitMenuItem.Size = new System.Drawing.Size(243, 22);
this.ExitMenuItem.Size = new System.Drawing.Size(237, 22);
this.ExitMenuItem.Text = "E&xit";
this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click);
//
@ -317,7 +318,7 @@
this.StopAllScriptsMenuItem,
this.RegisteredFunctionsMenuItem});
this.ScriptSubMenu.Name = "ScriptSubMenu";
this.ScriptSubMenu.Size = new System.Drawing.Size(46, 20);
this.ScriptSubMenu.Size = new System.Drawing.Size(49, 20);
this.ScriptSubMenu.Text = "&Script";
this.ScriptSubMenu.DropDownOpened += new System.EventHandler(this.ScriptSubMenu_DropDownOpened);
//
@ -326,7 +327,7 @@
this.NewScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.NewFile;
this.NewScriptMenuItem.Name = "NewScriptMenuItem";
this.NewScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.NewScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.NewScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.NewScriptMenuItem.Text = "New Script";
this.NewScriptMenuItem.Click += new System.EventHandler(this.NewScriptMenuItem_Click);
//
@ -335,7 +336,7 @@
this.OpenScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.OpenFile;
this.OpenScriptMenuItem.Name = "OpenScriptMenuItem";
this.OpenScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.OpenScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.OpenScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.OpenScriptMenuItem.Text = "&Open Script...";
this.OpenScriptMenuItem.Click += new System.EventHandler(this.OpenScriptMenuItem_Click);
//
@ -344,7 +345,7 @@
this.RefreshScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Refresh1;
this.RefreshScriptMenuItem.Name = "RefreshScriptMenuItem";
this.RefreshScriptMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5;
this.RefreshScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.RefreshScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.RefreshScriptMenuItem.Text = "&Re&fresh";
this.RefreshScriptMenuItem.Click += new System.EventHandler(this.RefreshScriptMenuItem_Click);
//
@ -353,7 +354,7 @@
this.ToggleScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.checkbox;
this.ToggleScriptMenuItem.Name = "ToggleScriptMenuItem";
this.ToggleScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.T)));
this.ToggleScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.ToggleScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.ToggleScriptMenuItem.Text = "&Toggle";
this.ToggleScriptMenuItem.Click += new System.EventHandler(this.ToggleScriptMenuItem_Click);
//
@ -361,7 +362,7 @@
//
this.PauseScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Pause;
this.PauseScriptMenuItem.Name = "PauseScriptMenuItem";
this.PauseScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.PauseScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.PauseScriptMenuItem.Text = "Pause or Resume";
this.PauseScriptMenuItem.Click += new System.EventHandler(this.PauseScriptMenuItem_Click);
//
@ -370,7 +371,7 @@
this.EditScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CutHS;
this.EditScriptMenuItem.Name = "EditScriptMenuItem";
this.EditScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E)));
this.EditScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.EditScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.EditScriptMenuItem.Text = "&Edit Script";
this.EditScriptMenuItem.Click += new System.EventHandler(this.EditScriptMenuItem_Click);
//
@ -379,28 +380,28 @@
this.RemoveScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Delete;
this.RemoveScriptMenuItem.Name = "RemoveScriptMenuItem";
this.RemoveScriptMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete;
this.RemoveScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.RemoveScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.RemoveScriptMenuItem.Text = "&Remove Script";
this.RemoveScriptMenuItem.Click += new System.EventHandler(this.RemoveScriptMenuItem_Click);
//
// DuplicateScriptMenuItem
//
this.DuplicateScriptMenuItem.Name = "DuplicateScriptMenuItem";
this.DuplicateScriptMenuItem.Size = new System.Drawing.Size(223, 22);
this.DuplicateScriptMenuItem.Size = new System.Drawing.Size(218, 22);
this.DuplicateScriptMenuItem.Text = "&Duplicate Script";
this.DuplicateScriptMenuItem.Click += new System.EventHandler(this.DuplicateScriptMenuItem_Click);
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(220, 6);
this.toolStripSeparator7.Size = new System.Drawing.Size(215, 6);
//
// InsertSeparatorMenuItem
//
this.InsertSeparatorMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.InsertSeparator;
this.InsertSeparatorMenuItem.Name = "InsertSeparatorMenuItem";
this.InsertSeparatorMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I)));
this.InsertSeparatorMenuItem.Size = new System.Drawing.Size(223, 22);
this.InsertSeparatorMenuItem.Size = new System.Drawing.Size(218, 22);
this.InsertSeparatorMenuItem.Text = "Insert Separator";
this.InsertSeparatorMenuItem.Click += new System.EventHandler(this.InsertSeparatorMenuItem_Click);
//
@ -409,7 +410,7 @@
this.MoveUpMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveUp;
this.MoveUpMenuItem.Name = "MoveUpMenuItem";
this.MoveUpMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.U)));
this.MoveUpMenuItem.Size = new System.Drawing.Size(223, 22);
this.MoveUpMenuItem.Size = new System.Drawing.Size(218, 22);
this.MoveUpMenuItem.Text = "Move &Up";
this.MoveUpMenuItem.Click += new System.EventHandler(this.MoveUpMenuItem_Click);
//
@ -418,7 +419,7 @@
this.MoveDownMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveDown;
this.MoveDownMenuItem.Name = "MoveDownMenuItem";
this.MoveDownMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D)));
this.MoveDownMenuItem.Size = new System.Drawing.Size(223, 22);
this.MoveDownMenuItem.Size = new System.Drawing.Size(218, 22);
this.MoveDownMenuItem.Text = "Move &Down";
this.MoveDownMenuItem.Click += new System.EventHandler(this.MoveDownMenuItem_Click);
//
@ -426,20 +427,20 @@
//
this.SelectAllMenuItem.Name = "SelectAllMenuItem";
this.SelectAllMenuItem.ShortcutKeyDisplayString = "Ctrl+A";
this.SelectAllMenuItem.Size = new System.Drawing.Size(223, 22);
this.SelectAllMenuItem.Size = new System.Drawing.Size(218, 22);
this.SelectAllMenuItem.Text = "Select &All";
this.SelectAllMenuItem.Click += new System.EventHandler(this.SelectAllMenuItem_Click);
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(220, 6);
this.toolStripSeparator6.Size = new System.Drawing.Size(215, 6);
//
// StopAllScriptsMenuItem
//
this.StopAllScriptsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop;
this.StopAllScriptsMenuItem.Name = "StopAllScriptsMenuItem";
this.StopAllScriptsMenuItem.Size = new System.Drawing.Size(223, 22);
this.StopAllScriptsMenuItem.Size = new System.Drawing.Size(218, 22);
this.StopAllScriptsMenuItem.Text = "Stop All Scripts";
this.StopAllScriptsMenuItem.Click += new System.EventHandler(this.StopAllScriptsMenuItem_Click);
//
@ -447,7 +448,7 @@
//
this.RegisteredFunctionsMenuItem.Name = "RegisteredFunctionsMenuItem";
this.RegisteredFunctionsMenuItem.ShortcutKeyDisplayString = "F12";
this.RegisteredFunctionsMenuItem.Size = new System.Drawing.Size(223, 22);
this.RegisteredFunctionsMenuItem.Size = new System.Drawing.Size(218, 22);
this.RegisteredFunctionsMenuItem.Text = "&Registered Functions...";
this.RegisteredFunctionsMenuItem.Click += new System.EventHandler(this.RegisteredFunctionsMenuItem_Click);
//
@ -456,30 +457,31 @@
this.SettingsSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.DisableScriptsOnLoadMenuItem,
this.ReturnAllIfNoneSelectedMenuItem,
this.RemoveRegisteredFunctionsOnToggleMenuItem});
this.RemoveRegisteredFunctionsOnToggleMenuItem,
this.ReloadWhenScriptFileChangesMenuItem});
this.SettingsSubMenu.Name = "SettingsSubMenu";
this.SettingsSubMenu.Size = new System.Drawing.Size(58, 20);
this.SettingsSubMenu.Size = new System.Drawing.Size(61, 20);
this.SettingsSubMenu.Text = "&Settings";
this.SettingsSubMenu.DropDownOpened += new System.EventHandler(this.OptionsSubMenu_DropDownOpened);
//
// DisableScriptsOnLoadMenuItem
//
this.DisableScriptsOnLoadMenuItem.Name = "DisableScriptsOnLoadMenuItem";
this.DisableScriptsOnLoadMenuItem.Size = new System.Drawing.Size(278, 22);
this.DisableScriptsOnLoadMenuItem.Size = new System.Drawing.Size(286, 22);
this.DisableScriptsOnLoadMenuItem.Text = "Disable Scripts on Load";
this.DisableScriptsOnLoadMenuItem.Click += new System.EventHandler(this.DisableScriptsOnLoadMenuItem_Click);
//
// ReturnAllIfNoneSelectedMenuItem
//
this.ReturnAllIfNoneSelectedMenuItem.Name = "ReturnAllIfNoneSelectedMenuItem";
this.ReturnAllIfNoneSelectedMenuItem.Size = new System.Drawing.Size(278, 22);
this.ReturnAllIfNoneSelectedMenuItem.Size = new System.Drawing.Size(286, 22);
this.ReturnAllIfNoneSelectedMenuItem.Text = "Toggle All if None Selected";
this.ReturnAllIfNoneSelectedMenuItem.Click += new System.EventHandler(this.ToggleAllIfNoneSelectedMenuItem_Click);
//
// RemoveRegisteredFunctionsOnToggleMenuItem
//
this.RemoveRegisteredFunctionsOnToggleMenuItem.Name = "RemoveRegisteredFunctionsOnToggleMenuItem";
this.RemoveRegisteredFunctionsOnToggleMenuItem.Size = new System.Drawing.Size(278, 22);
this.RemoveRegisteredFunctionsOnToggleMenuItem.Size = new System.Drawing.Size(286, 22);
this.RemoveRegisteredFunctionsOnToggleMenuItem.Text = "Remove Registered Functions on Toggle";
this.RemoveRegisteredFunctionsOnToggleMenuItem.Click += new System.EventHandler(this.RemoveRegisteredFunctionsOnToggleMenuItem_Click);
//
@ -489,21 +491,21 @@
this.FunctionsListMenuItem,
this.OnlineDocsMenuItem});
this.HelpSubMenu.Name = "HelpSubMenu";
this.HelpSubMenu.Size = new System.Drawing.Size(40, 20);
this.HelpSubMenu.Size = new System.Drawing.Size(44, 20);
this.HelpSubMenu.Text = "&Help";
//
// FunctionsListMenuItem
//
this.FunctionsListMenuItem.Name = "FunctionsListMenuItem";
this.FunctionsListMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1;
this.FunctionsListMenuItem.Size = new System.Drawing.Size(200, 22);
this.FunctionsListMenuItem.Size = new System.Drawing.Size(202, 22);
this.FunctionsListMenuItem.Text = "&Lua Functions List";
this.FunctionsListMenuItem.Click += new System.EventHandler(this.FunctionsListMenuItem_Click);
//
// OnlineDocsMenuItem
//
this.OnlineDocsMenuItem.Name = "OnlineDocsMenuItem";
this.OnlineDocsMenuItem.Size = new System.Drawing.Size(200, 22);
this.OnlineDocsMenuItem.Size = new System.Drawing.Size(202, 22);
this.OnlineDocsMenuItem.Text = "Documentation online...";
this.OnlineDocsMenuItem.Click += new System.EventHandler(this.OnlineDocsMenuItem_Click);
//
@ -528,20 +530,20 @@
this.ClearConsoleContextItem,
this.RegisteredFunctionsContextItem});
this.ConsoleContextMenu.Name = "contextMenuStrip2";
this.ConsoleContextMenu.Size = new System.Drawing.Size(187, 48);
this.ConsoleContextMenu.Size = new System.Drawing.Size(185, 48);
this.ConsoleContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ConsoleContextMenu_Opening);
//
// ClearConsoleContextItem
//
this.ClearConsoleContextItem.Name = "ClearConsoleContextItem";
this.ClearConsoleContextItem.Size = new System.Drawing.Size(186, 22);
this.ClearConsoleContextItem.Size = new System.Drawing.Size(184, 22);
this.ClearConsoleContextItem.Text = "&Clear";
this.ClearConsoleContextItem.Click += new System.EventHandler(this.ClearConsoleContextItem_Click);
//
// RegisteredFunctionsContextItem
//
this.RegisteredFunctionsContextItem.Name = "RegisteredFunctionsContextItem";
this.RegisteredFunctionsContextItem.Size = new System.Drawing.Size(186, 22);
this.RegisteredFunctionsContextItem.Size = new System.Drawing.Size(184, 22);
this.RegisteredFunctionsContextItem.Text = "&Registered Functions";
this.RegisteredFunctionsContextItem.Click += new System.EventHandler(this.RegisteredFunctionsMenuItem_Click);
//
@ -807,6 +809,13 @@
this.splitContainer1.SplitterDistance = 280;
this.splitContainer1.TabIndex = 7;
//
// ReloadWhenScriptFileChangesMenuItem
//
this.ReloadWhenScriptFileChangesMenuItem.Name = "ReloadWhenScriptFileChangesMenuItem";
this.ReloadWhenScriptFileChangesMenuItem.Size = new System.Drawing.Size(286, 22);
this.ReloadWhenScriptFileChangesMenuItem.Text = "Reload When Script File Changes";
this.ReloadWhenScriptFileChangesMenuItem.Click += new System.EventHandler(this.ReloadWhenScriptFileChangesMenuItem_Click);
//
// LuaConsole
//
this.AllowDrop = true;
@ -919,5 +928,6 @@
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.ToolStripMenuItem ReturnAllIfNoneSelectedMenuItem;
private System.Windows.Forms.ToolStripMenuItem RemoveRegisteredFunctionsOnToggleMenuItem;
private System.Windows.Forms.ToolStripMenuItem ReloadWhenScriptFileChangesMenuItem;
}
}

View File

@ -181,6 +181,48 @@ namespace BizHawk.Client.EmuHawk
UpdateDialog();
}
private readonly List<FileSystemWatcher> _watches = new List<FileSystemWatcher>();
private void AddFileWatches()
{
_watches.Clear();
foreach (var item in _luaList)
{
var processedPath = PathManager.TryMakeRelative(item.Path);
string pathToLoad = Path.IsPathRooted(processedPath)
? processedPath
: PathManager.MakeProgramRelativePath(processedPath);
CreateFileWatcher(pathToLoad);
}
}
private void CreateFileWatcher(string path)
{
var watcher = new FileSystemWatcher
{
Path = Path.GetDirectoryName(path),
Filter = Path.GetFileName(path),
NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName,
EnableRaisingEvents = true,
};
// TODO, Deleted and Renamed events
watcher.Changed += new FileSystemEventHandler(OnChanged);
_watches.Add(watcher);
}
private void OnChanged(object source, FileSystemEventArgs e)
{
string message = "File: " + e.FullPath + " " + e.ChangeType;
Invoke(new MethodInvoker(delegate
{
RefreshScriptMenuItem_Click(null, null);
}));
}
public void LoadLuaFile(string path)
{
var processedPath = PathManager.TryMakeRelative(path);
@ -194,7 +236,6 @@ namespace BizHawk.Client.EmuHawk
LuaListView.ItemCount = _luaList.Count;
Global.Config.RecentLua.Add(processedPath);
if (!Global.Config.DisableLuaScriptsOnLoad)
{
try
@ -211,6 +252,7 @@ namespace BizHawk.Client.EmuHawk
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
@ -219,6 +261,11 @@ namespace BizHawk.Client.EmuHawk
luaFile.State = LuaFile.RunState.Disabled;
}
if (Global.Config.LuaReloadOnScriptFileChange)
{
CreateFileWatcher(processedPath);
}
//luaFile.Paused = false;
}
else
@ -766,7 +813,7 @@ namespace BizHawk.Client.EmuHawk
LuaSandbox.Sandbox(null, () =>
{
string pathToLoad = Path.IsPathRooted(item.Path) ? item.Path : PathManager.MakeProgramRelativePath(item.Path); //JUNIPIER SQUATCHBOX COMPLEX
item.Thread = LuaImp.SpawnCoroutine(item.Path);
item.Thread = LuaImp.SpawnCoroutine(pathToLoad);
LuaSandbox.CreateSandbox(item.Thread, Path.GetDirectoryName(pathToLoad));
}, () =>
{
@ -774,6 +821,10 @@ namespace BizHawk.Client.EmuHawk
});
}
catch (IOException)
{
ConsoleLog("Unable to access file " + item.Path);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
@ -977,6 +1028,7 @@ namespace BizHawk.Client.EmuHawk
DisableScriptsOnLoadMenuItem.Checked = Global.Config.DisableLuaScriptsOnLoad;
ReturnAllIfNoneSelectedMenuItem.Checked = Global.Config.ToggleAllIfNoneSelected;
RemoveRegisteredFunctionsOnToggleMenuItem.Checked = Global.Config.RemoveRegisteredFunctionsOnToggle;
ReloadWhenScriptFileChangesMenuItem.Checked = Global.Config.LuaReloadOnScriptFileChange;
}
private void DisableScriptsOnLoadMenuItem_Click(object sender, EventArgs e)
@ -994,6 +1046,20 @@ namespace BizHawk.Client.EmuHawk
Global.Config.RemoveRegisteredFunctionsOnToggle ^= true;
}
private void ReloadWhenScriptFileChangesMenuItem_Click(object sender, EventArgs e)
{
Global.Config.LuaReloadOnScriptFileChange ^= true;
if (Global.Config.LuaReloadOnScriptFileChange)
{
AddFileWatches();
}
else
{
_watches.Clear();
}
}
#endregion
#region Help

View File

@ -133,18 +133,17 @@
<data name="OpenScriptToolbarItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I
k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC
TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p
AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0
BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr
UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG
CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5
F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS
rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt
NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp
59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W
AAAAAElFTkSuQmCC
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp
olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4
4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm
YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl
5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd
HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX
0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc
hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv
S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt
5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg
g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC
</value>
</data>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@ -154,70 +153,70 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACG
DgAAAk1TRnQBSQFMAgEBAwEAASABAAEgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEgBgABECoAAXwBTAFRAeUBsgG0AdIB/wG7Ab4B1wH/AX0BUQFUAecwAAF8AVEBTAHl
AbIB0gG2Af8BuwHXAb4B/wF9AVQBUQHnMAABgAFNAUwB5QHSAb4BsgH/AdcBxQG7Af8BgQJRAedoAAFv
AVsBfgH1ATwBQwGXAf8BCAETAYcB/wEJARMBhwH/AQcBEgGHAf8BDgEYAYgB/wERARsBiQH/AWkBXgGL
AfkgAAFvAX4BYgH1ATwBlwFIAf8BCAGHARcB/wEJAYcBGAH/AQcBhwEVAf8BDgGIARwB/wERAYkBHwH/
AWkBiwFeAfkgAAGTAWoBWAH1AZcBXgE8Af8BhwE2AQgB/wGHATcBCQH/AYcBNQEHAf8BiAE6AQ4B/wGJ
AT0BEQH/AZgBaAFaAflcAAE3AT8BmAH/ATQBPAGYAf8BsAGyAcsB/wHaAdsB2gH/AtEB1QH/AcsBzAHS
Af8BxAHHAc4B/wFbAWEBpQH/AU0BRQF9AfkBLAE1AY8B/xgAASkBkgE1Af8BNAGYAUAB/wGwAcsBswH/
AdsC2gH/AdEB1QHSAf8BywHSAcsB/wHFAc4BxAH/AVsBpQFkAf8BTQF9AUYB+QEsAY8BNwH/GAABkgFP
ASkB/wGYAVkBNAH/AcsBugGwAf8C2gHbAf8B1QHTAdEB/wHSAc0BywH/Ac4BxgHEAf8BpQF2AVsB/wGL
AVwBPgH5AY8BTwEsAf9UAAFBAT8BjQH9AXgBRwFKAeMC/gH9Af8B/gH9AfUB/wL3AfMB/wHvAu4B/wLt
AesB/wHZAtsB/wHjAeQB4gH/AsABzAH/AXQBUQFcAe0BTAFJAYQB+xAAAUEBjQE/Af0BeAFKAUcB4wH/
Af4C/wH+AfUB/QH/AfcB8wH2Af8C7gHvAf8B7QHrAe0B/wLbAdkB/wHkAeIB4wH/AcABzAHCAf8BdAFc
AVEB7QFMAYQBSwH7EAABkwFNAT0B/QF8AUgBRwHjAf4D/wH1AfsB/gH/AfMB9QH3Af8B7gHvAe4B/wHr
AewB7QH/AdsB2QHaAf8C4gHkAf8BzAHFAcAB/wGAAVIBUAHtAY0BWQFDAftMAAFyAVwBdwHzAX8BVgFg
AesF/wH+Af0X/wH+Af8B8AHvAfAB/wHPAdAB1gH/AWsBRwFaAe0BcwFRAWcB7wgAAXIBdwFdAfMBfwFg
AVkB6wX/Af0G/wHjAfAB4wH/AZwBzQGcCv8B/gL/Ae8C8AH/Ac8B1gHPAf8BawFaAUkB7QFzAWcBUQHv
CAABkgFkAVYB8wGJAVoBVQHrBP8B/Rf/Af4D/wLjAeAB/wHPAckBxwH/AX4BUQFGAe0BhAFcAVAB70gA
AWsBXgGRAfkD/iX/AfAB8gHwAf8CxgHNAf8BSgE9AXgB+QgAAWsBkQFeAfkQ/wHcAe0B3AH/ARQBfAEU
Af8BgwHBAYMN/wHyAfEB8AH/AccBzgHIAf8BSgF4AUEB+QgAAZ4BcgFeAfkM/wHhAc0BvgH/Ab4BkgGN
Af8B9wHxAe8B/wH7AfgB9wH/AcEBmAGPAf8B6gHaAdEF/wHlAeIB5gH/Ac4BygHHAf8BhwFXAT0B+UQA
AYABaAGCAfMBgQFdAWoB7Qj/AvUB+wH/AXABbAHUAf8BoQGfAecB/wGjAaEB5gH/AaIBoQHlAf8BlAGR
AeEB/wGeAZwB5gX/AfkB+AH3Af8B5wHkAd4B/wFgAVABcgH1AV0BWQGQAfsBgAGCAWgB8wGBAWsBXgHt
EP8B5AHxAeQB/wEEAXgBBAH/ARQBfgEUAf8BnAHOAZwJ/wH5AfcB+QH/AeYB3gHnAf8BYAFyAVUB9QFd
AZABWQH7AZsBcAFmAfMBjwFhAV0B7Qz/Aa4BeQFXAf8BXAIDAf8B+AH1AfIB/wH6AfcB9QH/AVwCAwH/
AbMBfgFdBf8B8QH0AfUB/wHeAeYB5wH/AYgBWgFNAfUBmQFhAVQB+0AAAYIBiAHKAf8B0AHSAe0J/wL1
AfoB/wE+ATsBuwH/AWoBZwHeAf8BZwFjAdgB/wFiAV4B0wH/AVYBUQHRAf8BogGhAekF/wL5AfgB/wH8
AfsB6gH/AaMBpgG+Af8BRgFNAaAB/wGCAcoBigH/AdAB7QHUEf8B4gHwAeIB/wEFAXkBBQH/AQMBeQED
Af8BFAGEARQB/wGYAcwBmAX/AfkB+AH5Af8B/AHqAfoB/wGjAb4BpQH/AUYBoAFRAf8BygGcAYIB/wHt
AdsB0A3/AboBjAFtAf8BjQElAQMC/wL+Af8D/gH/AY0BJAEDAf8BuwGJAWsF/wHyAfQB9QH/AeoB9QH8
Af8BvgGsAaMB/wGgAWcBRgH/QAABdwF9AcIB/wHlAeYB9An/AvcB+wH/AU0BSgHDAf8BeAF2AeMB/wFz
AXAB3QH/AW4BawHYAf8BYgFdAdMB/wGrAakB6gX/A/kB/wH+AfsB7wH/AbQBtgHFAf8BRAFMAZ8B/wF3
AcIBgQH/AeUB9AHnEf8B4gHwAeIB/wEEAXsBBAH/AQMBfQEDAf8BAwF1AQMB/wEUAYQBFAH/AfoB/AH6
Af8D+QH/Af4B7wH+Af8BtAHFAbYB/wFEAZ8BTwH/AcIBkwF3Af8B9AHrAeUN/wG5AYwBbgH/AacBOwEO
Af8B+wH5AfgB/wH7AfoB+QH/AacBOwEOAf8BvQGMAW4F/wP0Af8B7wH6Af4B/wHFAboBtAH/AZ8BZQFE
Af9AAAFzAXoBvQH/AtoB7wn/AvcB+wH/AVEBTgHHAf8BfgF8AeoB/wF5AXgB4wH/AXYBdAHfAf8BaQFm
AdoB/wGtAasB6wX/AvoB+AH/Af0B/AHuAf8BnQGgAbsB/wFMAVQBowH/AXMBvQF7Af8B2gHvAd4R/wHi
AfAB4gH/AQUBewEFAf8BAwFzAQMB/wEvAY4BLwH/AeIB8AHiBf8B+gH4AfoB/wH9Ae4B+wH/AZ0BuwGh
Af8BTAGjAVUB/wG9AY4BcwH/Ae8B4wHaDf8BtwGIAWkB/wHEAUoBJwH/Av0B/AH/AfwB+gH5Af8BxgFN
ASkB/wHCAY8BcwX/AfIB9QH3Af8B7gH3Af0B/wG7AagBnQH/AaMBawFMAf9AAAF+AVwBcQHvAYcBawF8
AfEI/wL2AfsB/wFOAUoBxQH/AX0BfAHrAf8BeQF4AeQB/wF3AXQB4QH/AWcBZAHbAf8BqQGnAesF/wL7
AfkB/wH7AfwB7gH/AU0BSgGIAfsBeAFcAWoB7wF+AXEBXAHvAYcBfAFsAfEQ/wHiAfAB4gH/AQMBcQED
Af8BKwGHASsB/wHnAfMB5wn/AfsB+QH7Af8B/AHuAfkB/wFNAYgBTAH7AXgBagFcAe8BkAFlAVwB7wGe
AXABagHxDP8BwQGXAX0B/wGkAUEBGQH/Af0B+wH6Af8B/AH6AfkB/wGTATwBEgH/AcwBqQGUBf8B9AH3
AfkB/wHuAfUB/AH/AZEBWQFFAfsBjQFcAVsB70QAAX4BgQHPCf8C8wH5Af8BTAFJAbkB/wGHAYYB1gH/
AYcBhQHVAf8BhwGFAdUB/wFoAWUByAH/AXABbwHMBv8B/gH8Af8CzgHXAf8BPAFEAZgB/wgAAX4BzwGN
Ef8B0wHoAdMB/wEnAYcBJwH/AeIB8AHiDf8B/gH8Av8BzgHXAdAB/wE8AZgBRgH/CAABzwGhAX4p/wH7
A/8B1wHSAc4B/wGYAV0BPAH/SAABiQF8AagB+QGSAXABiQHxJP8B/AH7AfYB/wE6AUIBlgH/AXoBUgFc
AekIAAGJAagBfgH5AZIBiQF5AfEM/wH6AfwB+gH/Ae8B9gHvEf8B/AH2AfwB/wE6AZYBRAH/AXoBXAFR
AekIAAG3AYgBewH5AaUBegFwAfEk/wH1AfoB/AH/AZYBWwE6Af8BgwFVAVEB6UwAAoMBwAH9AYQBXQFj
Aekc/wHyAfUB+AH/AV4BUwFzAfUBcQFeAYEB9RAAAYMBwAGIAf0BhAFjAV0B6Rz/AfQB+AHyAf8BXgFz
AVMB9QFxAYEBZAH1EAABxgGdAX8B/QGLAV8BXQHpHP8B+ALyAf8BiQFYAUsB9QGXAWoBWgH1VAABgwGA
AbUB+wGRAYMBsgH5AtMB9wH/AfEB8AH7Af8B9gH3Av8B9wH4Af0B/wHkAecB8wH/AXkBXAFtAe8BeAFg
AXgB8wGBAVkBYwHrGAABgwG1AYQB+wGRAbIBiwH5AdMB9wHaAf8B8AH7AfMB/wH2Af8B9wH/AfcB/QH4
Af8B5AHzAeQB/wF5AW0BXAHvAngBYgHzAYEBYwFZAesYAAG/AY8BewH7Ab4BmAGCAfkB9wHjAdMB/wH7
AfYB8AL/AfkB9gH/Af0B+QH3Af8B8wHoAeQB/wGPAV8BXAHvAZMBaAFfAfMBiwFdAVkB61wAAYUBXQFq
AesBjQGTAdcB/wGOAZQB3QH/AY8BlQHgAf8BjQGUAdsB/wGaAZ8B2gH/AX4BUgFZAeckAAGFAWoBXwHr
AY0B1wGWAf8BjgHdAZgB/wGPAeABmQH/AY0B2wGWAf8BmgHaAaIB/wF+AVkBUwHnJAABkAFiAV0B6wHX
AagBjQH/Ad0BrAGOAf8B4AGtAY8B/wHbAakBjQH/AdoBsgGaAf8BgwFUAVEB51QAAUIBTQE+BwABPgMA
ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH8AT8B/AE/AfwBPwIAAfABDwHwAQ8B8AEPAgAB4AEH
AeABBwHgAQcCAAHAAQMBwAEDAcABAwIAAYABAQGAAQEBgAEBAgABgAEBAYABAQGAAQEqAAGAAQEBgAEB
AYABAQIAAYABAQGAAQEBgAEBAgABwAEDAcABAwHAAQMCAAHgAQcB4AEHAeABBwIAAfABHwHwAR8B8AEf
AgAL
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACE
DgAAAk1TRnQBSQFMAgEBAwEAASgBAAEoAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEgBgABECoAAXYBTwFUAeUBsgG0AdIB/wG7Ab4B1wH/AXgBUwFVAecwAAF2AVQBTwHl
AbIB0gG2Af8BuwHXAb4B/wF4AVUBUwHnMAABewFQAU8B5QHSAb4BsgH/AdcBxQG7Af8BfAJTAedoAAFu
AVkBewH1ATsBQgGXAf8BBwESAYcB/wEIARIBhwH/AQYBEQGHAf8BDQEXAYgB/wEQARoBiQH/AWkBXgGK
AfkgAAFuAXsBYAH1ATsBlwFHAf8BBwGHARYB/wEIAYcBFwH/AQYBhwEUAf8BDQGIARsB/wEQAYkBHgH/
AWkBigFeAfkgAAGOAWkBWQH1AZcBXQE7Af8BhwE1AQcB/wGHATYBCAH/AYcBNAEGAf8BiAE5AQ0B/wGJ
ATwBEAH/AZQBaAFaAflcAAE2AT4BmAH/ATMBOwGYAf8BsAGyAcsB/wHaAdsB2gH/AtEB1QH/AcsBzAHS
Af8BxAHHAc4B/wFaAWABpQH/AUwBRQF6AfkBKwE0AY8B/xgAASgBkgE0Af8BMwGYAT8B/wGwAcsBswH/
AdsC2gH/AdEB1QHSAf8BywHSAcsB/wHFAc4BxAH/AVoBpQFjAf8BTAF6AUYB+QErAY8BNgH/GAABkgFO
ASgB/wGYAVgBMwH/AcsBugGwAf8C2gHbAf8B1QHTAdEB/wHSAc0BywH/Ac4BxgHEAf8BpQF1AVoB/wGK
AVwBQAH5AY8BTgErAf9UAAJAAY0B/QF0AUsBTgHjAv4B/QH/Af4B/QH1Af8C9wHzAf8B7wLuAf8C7QHr
Af8B2QLbAf8B4wHkAeIB/wLAAcwB/wFxAVIBXQHtAUwBSQGDAfsQAAFAAY0BQAH9AXQBTgFLAeMB/wH+
Av8B/gH1Af0B/wH3AfMB9gH/Au4B7wH/Ae0B6wHtAf8C2wHZAf8B5AHiAeMB/wHAAcwBwgH/AXEBXQFS
Ae0BTAGDAUsB+xAAAZMBTAE+Af0BdQFMAUsB4wH+A/8B9QH7Af4B/wHzAfUB9wH/Ae4B7wHuAf8B6wHs
Ae0B/wHbAdkB2gH/AuIB5AH/AcwBxQHAAf8BfAFTAVEB7QGMAVkBQwH7TAABcAFdAXMB8wF7AVcBYAHr
Bf8B/gH9F/8B/gH/AfAB7wHwAf8BzwHQAdYB/wFpAUoBWwHtAXABUwFmAe8IAAFwAXMBXQHzAXsBYAFZ
AesF/wH9Bv8B4wHwAeMB/wGcAc0BnAr/Af4C/wHvAvAB/wHPAdYBzwH/AWkBWwFMAe0BcAFmAVMB7wgA
AY0BYgFXAfMBgwFbAVYB6wT/Af0X/wH+A/8C4wHgAf8BzwHJAccB/wF6AVIBSQHtAYABWwFSAe9IAAFq
AV4BjwH5A/4l/wHwAfIB8AH/AsYBzQH/AUkBPwF1AfkIAAFqAY8BXgH5EP8B3AHtAdwB/wETAXsBEwH/
AYMBwQGDDf8B8gHxAfAB/wHHAc4ByAH/AUkBdQFBAfkIAAGaAW8BXgH5DP8B4QHNAb4B/wG+AZIBjQH/
AfcB8QHvAf8B+wH4AfcB/wHBAZgBjwH/AeoB2gHRBf8B5QHiAeYB/wHOAcoBxwH/AYYBVwE/AflEAAF+
AWYBgAHzAX0BXQFpAe0I/wL1AfsB/wFvAWsB1AH/AaEBnwHnAf8BowGhAeYB/wGiAaEB5QH/AZQBkQHh
Af8BngGcAeYF/wH5AfgB9wH/AecB5AHeAf8BXgFRAXAB9QFdAVkBjwH7AX4BgAFmAfMBfQFpAV0B7RD/
AeQB8QHkAf8BAwF3AQMB/wETAX0BEwH/AZwBzgGcCf8B+QH3AfkB/wHmAd4B5wH/AV4BcAFWAfUBXQGP
AVkB+wGWAW8BZAHzAYkBYAFdAe0M/wGuAXgBVgH/AVsCAgH/AfgB9QHyAf8B+gH3AfUB/wFbAgIB/wGz
AX0BXAX/AfEB9AH1Af8B3gHmAecB/wGFAVkBTgH1AZcBXwFUAftAAAGCAYgBygH/AdAB0gHtCf8C9QH6
Af8BPQE6AbsB/wFpAWYB3gH/AWYBYgHYAf8BYQFdAdMB/wFVAVAB0QH/AaIBoQHpBf8C+QH4Af8B/AH7
AeoB/wGjAaYBvgH/AUUBTAGgAf8BggHKAYoB/wHQAe0B1BH/AeIB8AHiAf8BBAF4AQQB/wECAXgBAgH/
ARMBhAETAf8BmAHMAZgF/wH5AfgB+QH/AfwB6gH6Af8BowG+AaUB/wFFAaABUAH/AcoBnAGCAf8B7QHb
AdAN/wG6AYwBbAH/AY0BJAECAv8C/gH/A/4B/wGNASMBAgH/AbsBiQFqBf8B8gH0AfUB/wHqAfUB/AH/
Ab4BrAGjAf8BoAFmAUUB/0AAAXYBfAHCAf8B5QHmAfQJ/wL3AfsB/wFMAUkBwwH/AXcBdQHjAf8BcgFv
Ad0B/wFtAWoB2AH/AWEBXAHTAf8BqwGpAeoF/wP5Af8B/gH7Ae8B/wG0AbYBxQH/AUMBSwGfAf8BdgHC
AYEB/wHlAfQB5xH/AeIB8AHiAf8BAwF6AQMB/wECAXwBAgH/AQIBdAECAf8BEwGEARMB/wH6AfwB+gH/
A/kB/wH+Ae8B/gH/AbQBxQG2Af8BQwGfAU4B/wHCAZMBdgH/AfQB6wHlDf8BuQGMAW0B/wGnAToBDQH/
AfsB+QH4Af8B+wH6AfkB/wGnAToBDQH/Ab0BjAFtBf8D9AH/Ae8B+gH+Af8BxQG6AbQB/wGfAWQBQwH/
QAABcgF5Ab0B/wLaAe8J/wL3AfsB/wFQAU0BxwH/AX0BewHqAf8BeAF3AeMB/wF1AXMB3wH/AWgBZQHa
Af8BrQGrAesF/wL6AfgB/wH9AfwB7gH/AZ0BoAG7Af8BSwFTAaMB/wFyAb0BegH/AdoB7wHeEf8B4gHw
AeIB/wEEAXoBBAH/AQIBcgECAf8BLgGOAS4B/wHiAfAB4gX/AfoB+AH6Af8B/QHuAfsB/wGdAbsBoQH/
AUsBowFUAf8BvQGOAXIB/wHvAeMB2g3/AbcBiAFoAf8BxAFJASYB/wL9AfwB/wH8AfoB+QH/AcYBTAEo
Af8BwgGPAXIF/wHyAfUB9wH/Ae4B9wH9Af8BuwGoAZ0B/wGjAWoBSwH/QAABegFbAW8B7wGEAWkBeQHx
CP8C9gH7Af8BTQFJAcUB/wF8AXsB6wH/AXgBdwHkAf8BdgFzAeEB/wFmAWMB2wH/AakBpwHrBf8C+wH5
Af8B+wH8Ae4B/wFNAUoBhwH7AXQBWwFnAe8BegFvAVsB7wGEAXkBagHxEP8B4gHwAeIB/wECAXABAgH/
ASoBhwEqAf8B5wHzAecJ/wH7AfkB+wH/AfwB7gH5Af8BTQGHAUwB+wF0AWcBWwHvAYsBZAFbAe8BlwFv
AWgB8Qz/AcEBlwF8Af8BpAFAARgB/wH9AfsB+gH/AfwB+gH5Af8BkwE7AREB/wHMAakBlAX/AfQB9wH5
Af8B7gH1AfwB/wGQAVkBRQH7AYcBWwFaAe9EAAF9AYEBzwn/AvMB+QH/AUsBSAG5Af8BhwGGAdYB/wGH
AYUB1QH/AYcBhQHVAf8BZwFkAcgB/wFvAW4BzAb/Af4B/AH/As4B1wH/ATsBQwGYAf8IAAF9Ac8BjRH/
AdMB6AHTAf8BJgGHASYB/wHiAfAB4g3/Af4B/AL/Ac4B1wHQAf8BOwGYAUUB/wgAAc8BoQF9Kf8B+wP/
AdcB0gHOAf8BmAFcATsB/0gAAYgBeQGkAfkBjgFvAYUB8ST/AfwB+wH2Af8BOQFBAZYB/wF2AVQBWwHp
CAABiAGkAXsB+QGOAYUBdQHxDP8B+gH8AfoB/wHvAfYB7xH/AfwB9gH8Af8BOQGWAUMB/wF2AVsBUgHp
CAABswGHAXgB+QGfAXYBbwHxJP8B9QH6AfwB/wGWAVoBOQH/AX4BVwFSAelMAAKDAb4B/QF/AV0BYgHp
HP8B8gH1AfgB/wFcAVQBcAH1AW8BXAF/AfUQAAGDAb4BiAH9AX8BYgFdAekc/wH0AfgB8gH/AVwBcAFU
AfUBbwF/AWIB9RAAAcMBnQF9Af0BgwFfAV0B6Rz/AfgC8gH/AYYBWQFLAfUBkgFpAVkB9VQAAYIBfwGx
AfsBjwGCAa8B+QLTAfcB/wHxAfAB+wH/AfYB9wL/AfcB+AH9Af8B5AHnAfMB/wF0AVsBagHvAXQBXwF0
AfMBfQFZAWIB6xgAAYIBsQGDAfsBjwGvAYoB+QHTAfcB2gH/AfAB+wHzAf8B9gH/AfcB/wH3Af0B+AH/
AeQB8wHkAf8BdAFqAVsB7wJ0AWAB8wF9AWIBWQHrGAABuwGOAXgB+wG6AZQBgQH5AfcB4wHTAf8B+wH2
AfAC/wH5AfYB/wH9AfkB9wH/AfMB6AHkAf8BiQFeAVsB7wGOAWYBXwHzAYUBXgFZAetcAAGBAV4BaQHr
AY0BkwHXAf8BjgGUAd0B/wGPAZUB4AH/AY0BlAHbAf8BmgGfAdoB/wF4AVMBWwHnJAABgQFpAWAB6wGN
AdcBlgH/AY4B3QGYAf8BjwHgAZkB/wGNAdsBlgH/AZoB2gGiAf8BeAFbAVQB5yQAAYoBYQFeAesB1wGo
AY0B/wHdAawBjgH/AeABrQGPAf8B2wGpAY0B/wHaAbIBmgH/AX4BVQFTAedUAAFCAU0BPgcAAT4DAAEo
AwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB/AE/AfwBPwH8AT8CAAHwAQ8B8AEPAfABDwIAAeABBwHg
AQcB4AEHAgABwAEDAcABAwHAAQMCAAGAAQEBgAEBAYABAQIAAYABAQGAAQEBgAEBKgABgAEBAYABAQGA
AQECAAGAAQEBgAEBAYABAQIAAcABAwHAAQMBwAEDAgAB4AEHAeABBwHgAQcCAAHwAR8B8AEfAfABHwIA
Cw==
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">