From d9ca5a894dd5567c7da9fa39928fc8b698890dd2 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Mon, 30 Aug 2021 20:17:55 +0300 Subject: [PATCH 01/22] [ui-isolation] Extract some MessageBox calls from Network and Core --- Razor/Core/Notifications.cs | 16 ++++++++++++++++ Razor/Core/Spells.cs | 5 ++--- Razor/Core/Utility.cs | 6 ++---- Razor/Network/Handlers.cs | 3 +-- Razor/Razor.csproj | 1 + 5 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 Razor/Core/Notifications.cs diff --git a/Razor/Core/Notifications.cs b/Razor/Core/Notifications.cs new file mode 100644 index 00000000..779202dc --- /dev/null +++ b/Razor/Core/Notifications.cs @@ -0,0 +1,16 @@ +using System.Windows.Forms; + +namespace Assistant.Core +{ + public class Notifications + { + public static void SendError(string caption, string text) + { + MessageBox.Show(Engine.ActiveWindow, text, caption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + public static void SendWarning(string caption, string text) + { + MessageBox.Show(Engine.ActiveWindow, text, caption, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } +} diff --git a/Razor/Core/Spells.cs b/Razor/Core/Spells.cs index dd8a571d..912905d4 100644 --- a/Razor/Core/Spells.cs +++ b/Razor/Core/Spells.cs @@ -21,7 +21,7 @@ using System; using System.IO; using System.Collections.Generic; -using System.Windows.Forms; +using Assistant.Core; namespace Assistant { @@ -294,8 +294,7 @@ static Spell() if (!File.Exists(filename)) { - MessageBox.Show(Engine.ActiveWindow, Language.GetString(LocString.NoSpells), "Spells.def", - MessageBoxButtons.OK, MessageBoxIcon.Warning); + Notifications.SendWarning("Spells.def", Language.GetString(LocString.NoSpells)); return; } diff --git a/Razor/Core/Utility.cs b/Razor/Core/Utility.cs index f080e5a0..dd353723 100644 --- a/Razor/Core/Utility.cs +++ b/Razor/Core/Utility.cs @@ -22,9 +22,8 @@ using System.IO; using System.Text; using System.Globalization; -using System.Runtime.InteropServices; using System.Diagnostics; -using System.Windows.Forms; +using Assistant.Core; namespace Assistant { @@ -443,8 +442,7 @@ public static void LaunchBrowser(string url) } catch (Exception ex) { - MessageBox.Show(null, ex.Message, "Unable to open directory", MessageBoxButtons.OK, - MessageBoxIcon.Warning); + Notifications.SendWarning("Unable to open directory", ex.Message); } } } diff --git a/Razor/Network/Handlers.cs b/Razor/Network/Handlers.cs index 48cee7e0..66ceda88 100644 --- a/Razor/Network/Handlers.cs +++ b/Razor/Network/Handlers.cs @@ -2711,8 +2711,7 @@ private static void ServerAddress(Packet p, PacketHandlerEventArgs args) } catch { - System.Windows.Forms.MessageBox.Show(Engine.MainWindow, "Error parsing Proxy Settings.", - "Force Proxy Error."); + Notifications.SendError("Force Proxy Error.", "Error parsing Proxy Settings."); } } } diff --git a/Razor/Razor.csproj b/Razor/Razor.csproj index a90c3870..c2e21b58 100644 --- a/Razor/Razor.csproj +++ b/Razor/Razor.csproj @@ -172,6 +172,7 @@ + From 1dbc0f12a7d470f05e1f79ef1cf601bfb5675c83 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Mon, 30 Aug 2021 20:20:25 +0300 Subject: [PATCH 02/22] [ui-isolation] Detach gums from WinForms clipboard API --- Razor/Core/Clipboard.cs | 27 ++++++++++++++++++++++ Razor/Gumps/Internal/ItemInfoGump.cs | 3 ++- Razor/Gumps/Internal/MobileInfoGump.cs | 2 +- Razor/Gumps/Internal/SystemMessagesGump.cs | 1 - Razor/Razor.csproj | 1 + Razor/Scripts/Commands.cs | 2 -- Razor/UI/Razor.cs | 1 + 7 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 Razor/Core/Clipboard.cs diff --git a/Razor/Core/Clipboard.cs b/Razor/Core/Clipboard.cs new file mode 100644 index 00000000..b5595670 --- /dev/null +++ b/Razor/Core/Clipboard.cs @@ -0,0 +1,27 @@ +using System.Windows.Forms; + +namespace Assistant.Core +{ + public class Clipboard + { + public static void SetText(string text) + { + System.Windows.Forms.Clipboard.SetText(text); + } + + public static string GetText() + { + return System.Windows.Forms.Clipboard.GetText(); + } + + public static void SetDataObject(object data, bool copy) + { + System.Windows.Forms.Clipboard.SetDataObject(data, copy); + } + + public static void Clear() + { + System.Windows.Forms.Clipboard.Clear(); + } + } +} diff --git a/Razor/Gumps/Internal/ItemInfoGump.cs b/Razor/Gumps/Internal/ItemInfoGump.cs index 73cc6d8a..6e621e46 100644 --- a/Razor/Gumps/Internal/ItemInfoGump.cs +++ b/Razor/Gumps/Internal/ItemInfoGump.cs @@ -18,8 +18,9 @@ #endregion -using System.Windows.Forms; +using Assistant.Core; + namespace Assistant.Gumps.Internal { public sealed class ItemInfoGump : Gump diff --git a/Razor/Gumps/Internal/MobileInfoGump.cs b/Razor/Gumps/Internal/MobileInfoGump.cs index 95518a74..eb830c11 100644 --- a/Razor/Gumps/Internal/MobileInfoGump.cs +++ b/Razor/Gumps/Internal/MobileInfoGump.cs @@ -19,7 +19,7 @@ #endregion using System.Text; -using System.Windows.Forms; +using Assistant.Core; namespace Assistant.Gumps.Internal { diff --git a/Razor/Gumps/Internal/SystemMessagesGump.cs b/Razor/Gumps/Internal/SystemMessagesGump.cs index ab686447..2139b028 100644 --- a/Razor/Gumps/Internal/SystemMessagesGump.cs +++ b/Razor/Gumps/Internal/SystemMessagesGump.cs @@ -19,7 +19,6 @@ #endregion using System.Linq; -using System.Windows.Forms; using Assistant.Core; namespace Assistant.Gumps.Internal diff --git a/Razor/Razor.csproj b/Razor/Razor.csproj index c2e21b58..2c7ac601 100644 --- a/Razor/Razor.csproj +++ b/Razor/Razor.csproj @@ -169,6 +169,7 @@ + diff --git a/Razor/Scripts/Commands.cs b/Razor/Scripts/Commands.cs index ce32bcab..6a89548a 100644 --- a/Razor/Scripts/Commands.cs +++ b/Razor/Scripts/Commands.cs @@ -19,10 +19,8 @@ #endregion using System; -using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Windows.Forms; using Assistant.Core; using Assistant.HotKeys; using Assistant.Scripts.Engine; diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 9adb8787..e2fd47dc 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -39,6 +39,7 @@ using Ultima; using ContainerLabels = Assistant.UI.ContainerLabels; using Exception = System.Exception; +using Clipboard = System.Windows.Forms.Clipboard; namespace Assistant { From 6cdee35b723d00ac13af8026b366e22d8255adc7 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Mon, 30 Aug 2021 21:00:29 +0300 Subject: [PATCH 03/22] [ui-isolation] Re-implement Filters::Draw in UI code --- Razor/Filters/Filter.cs | 21 +++------------------ Razor/UI/Razor.cs | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Razor/Filters/Filter.cs b/Razor/Filters/Filter.cs index 324962bc..d52cf43b 100644 --- a/Razor/Filters/Filter.cs +++ b/Razor/Filters/Filter.cs @@ -19,7 +19,7 @@ #endregion using System; -using System.Collections; +using System.Collections.Generic; using System.Windows.Forms; using System.Xml; @@ -27,9 +27,9 @@ namespace Assistant.Filters { public abstract class Filter { - private static ArrayList m_Filters = new ArrayList(); + private static List m_Filters = new List(); - public static ArrayList List + public static IList List { get { return m_Filters; } } @@ -91,21 +91,6 @@ public static void Save(XmlTextWriter xml) } } - public static void Draw(CheckedListBox list) - { - list.BeginUpdate(); - list.Items.Clear(); - - for (int i = 0; i < m_Filters.Count; i++) - { - Filter f = (Filter) m_Filters[i]; - list.Items.Add(f); - list.SetItemChecked(i, f.Enabled); - } - - list.EndUpdate(); - } - public abstract void OnFilter(PacketReader p, PacketHandlerEventArgs args); public abstract byte[] PacketIDs { get; } public abstract LocString Name { get; } diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index e2fd47dc..8a800f3f 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -613,6 +613,20 @@ private void LoadAnimationLists() } } + private void updateFilterList(IList filters) + { + this.filters.BeginUpdate(); + this.filters.Items.Clear(); + + for (int i = 0; i < filters.Count; ++i) + { + Filter filter = filters[i]; + this.filters.Items.Add(filter, filter.Enabled); + } + + this.filters.EndUpdate(); + } + private void tabs_IndexChanged(object sender, System.EventArgs e) { if (tabs == null) @@ -625,7 +639,7 @@ private void tabs_IndexChanged(object sender, System.EventArgs e) if (tabs.SelectedTab == generalTab) { - Filter.Draw(filters); + updateFilterList(Filter.List); langSel.BeginUpdate(); langSel.Items.Clear(); langSel.Items.AddRange(Language.GetPackNames()); From f808aaff9f227bcc2702700875fa2789e20c5e8c Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Mon, 30 Aug 2021 21:04:56 +0300 Subject: [PATCH 04/22] [ui-isolation] Use bool for OnCheckChanged in Filter --- Razor/Filters/Filter.cs | 7 +++---- Razor/UI/Razor.cs | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Razor/Filters/Filter.cs b/Razor/Filters/Filter.cs index d52cf43b..17b07200 100644 --- a/Razor/Filters/Filter.cs +++ b/Razor/Filters/Filter.cs @@ -20,7 +20,6 @@ using System; using System.Collections.Generic; -using System.Windows.Forms; using System.Xml; namespace Assistant.Filters @@ -128,11 +127,11 @@ public virtual void OnDisable() PacketHandler.RemoveServerToClientViewer(PacketIDs[i], m_Callback); } - public void OnCheckChanged(CheckState newValue) + public void OnCheckChanged(bool newValue) { - if (Enabled && newValue == CheckState.Unchecked) + if (Enabled && !newValue) OnDisable(); - else if (!Enabled && newValue == CheckState.Checked) + else if (!Enabled && newValue) OnEnable(); } } diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 8a800f3f..8ef52a79 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -962,7 +962,7 @@ public void RedrawSkills() private void OnFilterCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e) { - ((Filter) filters.Items[e.Index]).OnCheckChanged(e.NewValue); + ((Filter) filters.Items[e.Index]).OnCheckChanged(e.NewValue == CheckState.Checked); } private void incomingMob_CheckedChanged(object sender, System.EventArgs e) From 95cfd3d4293d6f08a253bb3a1f8ca7ef2cbdf001 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Mon, 30 Aug 2021 22:16:05 +0300 Subject: [PATCH 05/22] [ui-isolation] Detach WaypointManager from UI --- Razor/Core/WaypointManager.cs | 41 +++++++---------------------------- Razor/UI/Razor.cs | 23 +++++++++++++++++--- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/Razor/Core/WaypointManager.cs b/Razor/Core/WaypointManager.cs index 6b17585d..e6d54941 100644 --- a/Razor/Core/WaypointManager.cs +++ b/Razor/Core/WaypointManager.cs @@ -21,15 +21,12 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; namespace Assistant.Core { public static class WaypointManager { - private static ListBox _waypointList; private static WaypointDistanceTimer _waypointTimer; public static Waypoint CurrentWaypoint; @@ -37,6 +34,10 @@ public static class WaypointManager public static List Waypoints = new List(); + public delegate void WaypointsChangedCallback(IList waypoints); + + public static WaypointsChangedCallback OnWaypointsChanged; + public static void Initialize() { HotKey.Add(HKCategory.Misc, LocString.NextWaypoint, new HotKeyCallback(NextWaypoint)); @@ -44,13 +45,6 @@ public static void Initialize() HotKey.Add(HKCategory.Misc, LocString.HideWaypoint, new HotKeyCallback(ClearWaypoint)); } - public static void SetControls(ListBox waypointList) - { - _waypointList = waypointList; - _waypointTimer = new WaypointDistanceTimer(); - _waypointTimer.Stop(); - } - public class Waypoint { public int X { get; set; } @@ -86,17 +80,14 @@ public static void PrevWaypoint() public static void AddWaypoint(Waypoint waypoint) { Waypoints.Add(waypoint); - - RedrawList(); + OnWaypointsChanged?.Invoke(Waypoints); } public static void RemoveWaypoint(Waypoint waypoint) { ClearWaypoint(); - - Waypoints.Remove(waypoint); - - RedrawList(); + Waypoints.Remove(waypoint); + OnWaypointsChanged?.Invoke(Waypoints); } public static void ShowWaypoint(Waypoint waypoint) @@ -221,7 +212,7 @@ public static void Load(XmlElement node) Waypoints.Add(waypoint); } - RedrawList(); + OnWaypointsChanged?.Invoke(Waypoints); } catch (Exception ex) { @@ -233,21 +224,5 @@ public static void ClearAll() { Waypoints.Clear(); } - - public static void RedrawList() - { - _waypointList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - foreach (Waypoint waypoint in Waypoints) - { - s.Items.Add(waypoint); - } - - s.EndUpdate(); - }); - } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 8ef52a79..8338f6d5 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -78,7 +78,8 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) TargetFilterManager.SetControls(targetFilter); SoundMusicManager.SetControls(soundFilterList, playableMusicList); ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); - WaypointManager.SetControls(waypointList); + WaypointManager.OnWaypointsChanged += this.onWaypointsChanged; + WaypointManager.ResetTimer(); OverheadManager.SetControls(cliLocOverheadView); TextFilterManager.SetControls(textFilterList); @@ -6946,13 +6947,29 @@ private void listWaypoints_MouseDown(object sender, MouseEventArgs e) } } + private void onWaypointsChanged(IList waypoints) + { + waypointList?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var waypoint in waypoints) + { + s.Items.Add(waypoint); + } + + s.EndUpdate(); + }); + } + private void onClearWaypoints(object sender, EventArgs e) { if (MessageBox.Show(this, "Are you sure you want to clear all of your waypoints?", "Clear Waypoints?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { WaypointManager.ClearAll(); - WaypointManager.RedrawList(); + onWaypointsChanged(WaypointManager.Waypoints); } } @@ -7190,7 +7207,7 @@ private void displayCountersTabCtrl_SelectedIndexChanged(object sender, EventArg if (displayCountersTabCtrl.SelectedTab == subWaypoints) { - WaypointManager.RedrawList(); + onWaypointsChanged(WaypointManager.Waypoints); } } From b2c34f947e7a06a61f8d23a3c3a01c7238758b0d Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Mon, 30 Aug 2021 22:57:36 +0300 Subject: [PATCH 06/22] [ui-isolation] Unify some listbox updates in UI and remove UI code from TextFilterManager --- Razor/Core/TextFilterManager.cs | 35 +++++---------------------- Razor/Core/WaypointManager.cs | 8 +++--- Razor/UI/Razor.cs | 43 ++++++++++++++++++++------------- 3 files changed, 36 insertions(+), 50 deletions(-) diff --git a/Razor/Core/TextFilterManager.cs b/Razor/Core/TextFilterManager.cs index e5fe4949..31eebc3c 100644 --- a/Razor/Core/TextFilterManager.cs +++ b/Razor/Core/TextFilterManager.cs @@ -21,35 +21,28 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; namespace Assistant.Core { public static class TextFilterManager { - private static ListBox _filterTextList; - public static List FilteredText = new List(); - public static void SetControls(ListBox filterTextList) - { - _filterTextList = filterTextList; - } + public delegate void ItemsChangedCallback(); + + public static ItemsChangedCallback OnItemsChanged { get; set; } public static void AddFilter(string filter) { FilteredText.Add(filter); - - RedrawList(); + OnItemsChanged?.Invoke(); } public static void RemoveFilter(string filter) { FilteredText.Remove(filter); - - RedrawList(); + OnItemsChanged?.Invoke(); } public static void Save(XmlTextWriter xml) @@ -89,7 +82,7 @@ public static void Load(XmlElement node) FilteredText.Add(Convert.ToString(el.GetAttribute("text"))); } - RedrawList(); + OnItemsChanged?.Invoke(); } catch (Exception ex) { @@ -101,21 +94,5 @@ public static void ClearAll() { FilteredText.Clear(); } - - public static void RedrawList() - { - _filterTextList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - foreach (string text in FilteredText) - { - s.Items.Add(text); - } - - s.EndUpdate(); - }); - } } } \ No newline at end of file diff --git a/Razor/Core/WaypointManager.cs b/Razor/Core/WaypointManager.cs index e6d54941..dbc1b30e 100644 --- a/Razor/Core/WaypointManager.cs +++ b/Razor/Core/WaypointManager.cs @@ -34,7 +34,7 @@ public static class WaypointManager public static List Waypoints = new List(); - public delegate void WaypointsChangedCallback(IList waypoints); + public delegate void WaypointsChangedCallback(); public static WaypointsChangedCallback OnWaypointsChanged; @@ -80,14 +80,14 @@ public static void PrevWaypoint() public static void AddWaypoint(Waypoint waypoint) { Waypoints.Add(waypoint); - OnWaypointsChanged?.Invoke(Waypoints); + OnWaypointsChanged?.Invoke(); } public static void RemoveWaypoint(Waypoint waypoint) { ClearWaypoint(); Waypoints.Remove(waypoint); - OnWaypointsChanged?.Invoke(Waypoints); + OnWaypointsChanged?.Invoke(); } public static void ShowWaypoint(Waypoint waypoint) @@ -212,7 +212,7 @@ public static void Load(XmlElement node) Waypoints.Add(waypoint); } - OnWaypointsChanged?.Invoke(Waypoints); + OnWaypointsChanged?.Invoke(); } catch (Exception ex) { diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 8338f6d5..267a17de 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -78,9 +78,11 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) TargetFilterManager.SetControls(targetFilter); SoundMusicManager.SetControls(soundFilterList, playableMusicList); ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); - WaypointManager.OnWaypointsChanged += this.onWaypointsChanged; + WaypointManager.OnWaypointsChanged += this.refreshWaypoints; WaypointManager.ResetTimer(); OverheadManager.SetControls(cliLocOverheadView); + + TextFilterManager.OnItemsChanged += this.refreshTextFilters; TextFilterManager.SetControls(textFilterList); bool st = Config.GetBool("Systray"); @@ -6947,20 +6949,9 @@ private void listWaypoints_MouseDown(object sender, MouseEventArgs e) } } - private void onWaypointsChanged(IList waypoints) + private void refreshWaypoints() { - waypointList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - foreach (var waypoint in waypoints) - { - s.Items.Add(waypoint); - } - - s.EndUpdate(); - }); + updateListBox(waypointList, WaypointManager.Waypoints); } private void onClearWaypoints(object sender, EventArgs e) @@ -6969,7 +6960,7 @@ private void onClearWaypoints(object sender, EventArgs e) MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { WaypointManager.ClearAll(); - onWaypointsChanged(WaypointManager.Waypoints); + refreshWaypoints(); } } @@ -7026,6 +7017,24 @@ private void showPartyFriendOverhead_CheckedChanged(object sender, EventArgs e) Config.SetProperty("ShowPartyFriendOverhead", showPartyFriendOverhead.Checked); } + private void updateListBox(ListBox listBox, IList items) + { + listBox.BeginUpdate(); + listBox.Items.Clear(); + + foreach (var item in items) + { + listBox.Items.Add(item); + } + + listBox.EndUpdate(); + } + + private void refreshTextFilters() + { + updateListBox(textFilterList, TextFilterManager.FilteredText); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) @@ -7034,7 +7043,7 @@ private void filterTabs_IndexChanged(object sender, EventArgs e) } else if (filterTabs.SelectedTab == subFilterText) { - TextFilterManager.RedrawList(); + refreshTextFilters(); } else if (filterTabs.SelectedTab == subFilterSoundMusic) { @@ -7207,7 +7216,7 @@ private void displayCountersTabCtrl_SelectedIndexChanged(object sender, EventArg if (displayCountersTabCtrl.SelectedTab == subWaypoints) { - onWaypointsChanged(WaypointManager.Waypoints); + refreshWaypoints(); } } From ac3a3a28159d03df43c0ae031b8e7f0db982d33e Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Mon, 30 Aug 2021 23:41:42 +0300 Subject: [PATCH 07/22] [ui-isolation] Remove UI code from OverheadManager --- Razor/Core/OverheadManager.cs | 66 ----------------------------------- Razor/UI/Razor.cs | 59 ++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 70 deletions(-) diff --git a/Razor/Core/OverheadManager.cs b/Razor/Core/OverheadManager.cs index db8fec57..fe4fa985 100644 --- a/Razor/Core/OverheadManager.cs +++ b/Razor/Core/OverheadManager.cs @@ -20,11 +20,7 @@ using System; using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; -using Ultima; namespace Assistant.Core { @@ -37,15 +33,8 @@ public class OverheadMessage public static class OverheadManager { - private static ListView _listView; - public static List OverheadMessages = new List(); - public static void SetControls(ListView listView) - { - _listView = listView; - } - public static void Save(XmlTextWriter xml) { foreach (var message in OverheadMessages) @@ -101,31 +90,6 @@ public static void Remove(string text) } } - public static void RedrawList() - { - _listView.SafeAction(s => s.Items.Clear()); - - foreach (OverheadMessage message in OverheadMessages) - { - ListViewItem item = new ListViewItem($"{message.SearchMessage}"); - item.SubItems.Add(new ListViewItem.ListViewSubItem(item, message.MessageOverhead)); - - int hueIdx = message.Hue; - - if (hueIdx > 0 && hueIdx < 3000) - item.SubItems[1].BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); - else - item.SubItems[1].BackColor = SystemColors.Control; - - item.SubItems[1].ForeColor = - (item.SubItems[1].BackColor.GetBrightness() < 0.35 ? Color.White : Color.Black); - - item.UseItemStyleForSubItems = false; - - _listView.SafeAction(s => s.Items.Add(item)); - } - } - public static void DisplayOverheadMessage(string text) { if (Config.GetBool("ShowOverheadMessages") && OverheadMessages.Count > 0) @@ -154,36 +118,6 @@ public static void DisplayOverheadMessage(string text) } } - public static void SetOverheadHue() - { - ListViewItem selectedItem = _listView.Items[_listView.SelectedIndices[0]]; - - HueEntry h = new HueEntry(GetHue(selectedItem.SubItems[1].Text)); - - if (h.ShowDialog(Engine.MainWindow) == DialogResult.OK) - { - int hueIdx = h.Hue; - - if (hueIdx > 0 && hueIdx < 3000) - selectedItem.SubItems[1].BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); - else - selectedItem.SubItems[1].BackColor = Color.White; - - selectedItem.SubItems[1].ForeColor = (selectedItem.SubItems[1].BackColor.GetBrightness() < 0.35 - ? Color.White - : Color.Black); - - foreach (OverheadMessage list in OverheadManager.OverheadMessages) - { - if (list.SearchMessage.Equals(selectedItem.Text)) - { - list.Hue = hueIdx; - break; - } - } - } - } - public static int GetHue(string id) { int hue = 0; diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 267a17de..69ea6226 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -80,10 +80,8 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); WaypointManager.OnWaypointsChanged += this.refreshWaypoints; WaypointManager.ResetTimer(); - OverheadManager.SetControls(cliLocOverheadView); TextFilterManager.OnItemsChanged += this.refreshTextFilters; - TextFilterManager.SetControls(textFilterList); bool st = Config.GetBool("Systray"); taskbar.Checked = this.ShowInTaskbar = !st; @@ -7175,7 +7173,7 @@ private void setColorHue_Click(object sender, EventArgs e) { if (cliLocOverheadView.SelectedItems.Count > 0) { - OverheadManager.SetOverheadHue(); + setOverheadMessageHue(); } } @@ -7207,11 +7205,64 @@ private void showOverheadMessages_CheckedChanged(object sender, EventArgs e) Config.SetProperty("ShowOverheadMessages", showOverheadMessages.Checked); } + private void fillOverheadMessageSubItem(ListViewItem.ListViewSubItem subItem, int hueIdx) + { + if (hueIdx > 0 && hueIdx < 3000) + subItem.BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); + else + subItem.BackColor = SystemColors.Control; + + subItem.ForeColor = (subItem.BackColor.GetBrightness() < 0.35 ? Color.White : Color.Black); + } + + private ListViewItem makeOverheadMessageItem(OverheadMessage message) + { + var item = new ListViewItem($"{message.SearchMessage}"); + var subItem = new ListViewItem.ListViewSubItem(item, message.MessageOverhead); + fillOverheadMessageSubItem(subItem, message.Hue); + item.SubItems.Add(subItem); + item.UseItemStyleForSubItems = false; + return item; + } + + private void refreshOverheadMessages() + { + cliLocOverheadView?.SafeAction(s => s.Items.Clear()); + + foreach (OverheadMessage message in OverheadManager.OverheadMessages) + { + var item = makeOverheadMessageItem(message); + cliLocOverheadView?.SafeAction(s => s.Items.Add(item)); + } + } + + private void setOverheadMessageHue() + { + ListViewItem selectedItem = cliLocOverheadView.Items[cliLocOverheadView.SelectedIndices[0]]; + + var hue = OverheadManager.GetHue(selectedItem.SubItems[1].Text); + HueEntry hueEntry = new HueEntry(hue); + + if (hueEntry.ShowDialog(Engine.MainWindow) == DialogResult.OK) + { + fillOverheadMessageSubItem(selectedItem.SubItems[1], hueEntry.Hue); + + foreach (OverheadMessage list in OverheadManager.OverheadMessages) + { + if (list.SearchMessage.Equals(selectedItem.Text)) + { + list.Hue = hueEntry.Hue; + break; + } + } + } + } + private void displayCountersTabCtrl_SelectedIndexChanged(object sender, EventArgs e) { if (displayCountersTabCtrl.SelectedTab == subOverheadTab) { - OverheadManager.RedrawList(); + refreshOverheadMessages(); } if (displayCountersTabCtrl.SelectedTab == subWaypoints) From 6023ac173ca46d0f582458a26108df0b67cb6ab1 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Tue, 31 Aug 2021 00:11:42 +0300 Subject: [PATCH 08/22] [ui-isolation] Get rid of UI code in TargetFilterManager --- Razor/Filters/TargetFilterManager.cs | 39 +++++++--------------------- Razor/UI/Razor.cs | 16 +++++++++--- 2 files changed, 23 insertions(+), 32 deletions(-) diff --git a/Razor/Filters/TargetFilterManager.cs b/Razor/Filters/TargetFilterManager.cs index 0e29047f..0e1237aa 100644 --- a/Razor/Filters/TargetFilterManager.cs +++ b/Razor/Filters/TargetFilterManager.cs @@ -20,23 +20,20 @@ using System.Collections.Generic; using System.Linq; -using System.Windows.Forms; using System.Xml; using Assistant.Core; -using Assistant.UI; namespace Assistant.Filters { public static class TargetFilterManager { - private static ListBox _targetFilterList; + public static List TargetFilters = new List(); - private static List TargetFilters = new List(); + public delegate void ItemsChangedCallback(); + public delegate void AddTargetCallback(); - public static void SetControls(ListBox targetFilterList) - { - _targetFilterList = targetFilterList; - } + public static ItemsChangedCallback OnItemsChanged { get; set; } + public static AddTargetCallback OnAddTarget { get; set; } public static void OnTargetAddTargetFilter() { @@ -46,7 +43,7 @@ public static void OnTargetAddTargetFilter() public static void OnAddFriendTargetFilter(bool location, Serial serial, Point3D loc, ushort gfx) { - Engine.MainWindow.SafeAction(s => s.ShowMe()); + OnAddTarget?.Invoke(); if (!location && serial.IsMobile && serial != World.Player.Serial) { @@ -57,7 +54,7 @@ public static void OnAddFriendTargetFilter(bool location, Serial serial, Point3D AddTargetFilter(m.Name, serial); - RedrawList(); + OnItemsChanged?.Invoke(); } } @@ -157,7 +154,7 @@ public static bool IsFilteredTarget(Serial serial) public static bool RemoveTargetFilter(int index) { TargetFilters.RemoveAt(index); - RedrawList(); + OnItemsChanged?.Invoke(); return true; } @@ -165,7 +162,7 @@ public static bool RemoveTargetFilter(int index) public static void ClearTargetFilters() { TargetFilters.Clear(); - RedrawList(); + OnItemsChanged?.Invoke(); } public static void Save(XmlTextWriter xml) @@ -208,28 +205,12 @@ public static void Load(XmlElement node) // must not be in the profile, move on } - RedrawList(); + OnItemsChanged?.Invoke(); } public static void ClearAll() { TargetFilters.Clear(); } - - public static void RedrawList() - { - _targetFilterList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - foreach (var target in TargetFilters) - { - s.Items.Add(target); - } - - s.EndUpdate(); - }); - } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 69ea6226..de38c136 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -75,12 +75,12 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) FriendsManager.SetControls(friendsGroup, friendsList); DressList.SetControls(dressList, dressItems); - TargetFilterManager.SetControls(targetFilter); + TargetFilterManager.OnItemsChanged += this.refreshTargetFilters; + TargetFilterManager.OnAddTarget += this.onTargetFilterAdd; SoundMusicManager.SetControls(soundFilterList, playableMusicList); ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); WaypointManager.OnWaypointsChanged += this.refreshWaypoints; WaypointManager.ResetTimer(); - TextFilterManager.OnItemsChanged += this.refreshTextFilters; bool st = Config.GetBool("Systray"); @@ -7033,11 +7033,21 @@ private void refreshTextFilters() updateListBox(textFilterList, TextFilterManager.FilteredText); } + private void onTargetFilterAdd() + { + Engine.MainWindow.SafeAction(s => s.ShowMe()); + } + + private void refreshTargetFilters() + { + updateListBox(targetFilter, TargetFilterManager.TargetFilters); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) { - TargetFilterManager.RedrawList(); + refreshTargetFilters(); } else if (filterTabs.SelectedTab == subFilterText) { From 48c65df6a1a54b9096532dded49fa7e1e89fddd2 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Tue, 31 Aug 2021 00:54:53 +0300 Subject: [PATCH 09/22] [ui-isolation] Remove UI code from SoundMusicManager --- Razor/Filters/SoundMusicManager.cs | 83 +++++++++++------------------- Razor/UI/Razor.cs | 70 ++++++++++++++++++++++--- 2 files changed, 92 insertions(+), 61 deletions(-) diff --git a/Razor/Filters/SoundMusicManager.cs b/Razor/Filters/SoundMusicManager.cs index f00d2303..1eb867df 100644 --- a/Razor/Filters/SoundMusicManager.cs +++ b/Razor/Filters/SoundMusicManager.cs @@ -22,27 +22,22 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; namespace Assistant.Filters { public static class SoundMusicManager { - private static CheckedListBox _soundFilterList; - private static ComboBox _playableMusicList; - private static List SoundFilters = new List(); - private static List SoundList = new List(); - private static List MusicList = new List(); + public static List SoundList = new List(); + public static List MusicList = new List(); - public static void SetControls(CheckedListBox soundFilterList, ComboBox playableMusicList) - { - _soundFilterList = soundFilterList; - _playableMusicList = playableMusicList; - } + public delegate void SoundFiltersChangeCallback(); + public delegate void PlayableMusicChangeCallback(); + + public static SoundFiltersChangeCallback OnSoundFiltersChanged { get; set; } + public static PlayableMusicChangeCallback OnPlayableMusicChanged { get; set; } public class Sound { @@ -100,7 +95,9 @@ public static bool IsFilteredSound(ushort serial, out string name) public static string GetSoundName(ushort soundId) { if (SoundList.Count == 0) - RedrawList(); + { + notifySoundFilter(); + } foreach (Sound sound in SoundList) { @@ -116,7 +113,9 @@ public static string GetSoundName(ushort soundId) public static string GetMusicName(int musicId, out bool loop) { if (MusicList.Count == 0) - RedrawList(); + { + notifyPlayableMusic(); + } foreach (Music music in MusicList) { @@ -709,7 +708,8 @@ public static void Load(XmlElement node) // must not be in the profile, move on } - RedrawList(); + notifySoundFilter(); + notifyPlayableMusic(); } public static void ClearAll() @@ -717,45 +717,22 @@ public static void ClearAll() SoundFilters.Clear(); } - public static void RedrawList() - { - _soundFilterList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - if (SoundList.Count == 0) - { - LoadSounds(); - } - - foreach (Sound sound in SoundList) - { - bool isFiltered = IsFilteredSound(sound.Serial, out string name); - s.Items.Add(sound, isFiltered); - } - - s.EndUpdate(); - }); - - _playableMusicList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - if (MusicList.Count == 0) - { - LoadMusic(); - } - - foreach (Music music in MusicList) - { - s.Items.Add(music); - } + private static void notifySoundFilter() + { + if (SoundList.Count == 0) + { + LoadSounds(); + } + OnSoundFiltersChanged?.Invoke(); + } - s.SelectedIndex = 0; - s.EndUpdate(); - }); + private static void notifyPlayableMusic() + { + if (MusicList.Count == 0) + { + LoadMusic(); + } + OnPlayableMusicChanged?.Invoke(); } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index de38c136..a6f6a6bb 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -77,7 +77,8 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) DressList.SetControls(dressList, dressItems); TargetFilterManager.OnItemsChanged += this.refreshTargetFilters; TargetFilterManager.OnAddTarget += this.onTargetFilterAdd; - SoundMusicManager.SetControls(soundFilterList, playableMusicList); + SoundMusicManager.OnPlayableMusicChanged += this.refreshMusicList; + SoundMusicManager.OnSoundFiltersChanged += this.refreshSoundFilter; ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); WaypointManager.OnWaypointsChanged += this.refreshWaypoints; WaypointManager.ResetTimer(); @@ -7017,15 +7018,36 @@ private void showPartyFriendOverhead_CheckedChanged(object sender, EventArgs e) private void updateListBox(ListBox listBox, IList items) { - listBox.BeginUpdate(); - listBox.Items.Clear(); + listBox?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var item in items) + { + s.Items.Add(item); + } + + s.EndUpdate(); + }); + } - foreach (var item in items) + private void updateComboBox(ComboBox comboBox, IList items) + { + comboBox?.SafeAction(s => { - listBox.Items.Add(item); - } + s.BeginUpdate(); + s.Items.Clear(); - listBox.EndUpdate(); + foreach (var item in items) + { + s.Items.Add(item); + } + + s.SelectedIndex = 0; + s.EndUpdate(); + }); +; } private void refreshTextFilters() @@ -7043,6 +7065,37 @@ private void refreshTargetFilters() updateListBox(targetFilter, TargetFilterManager.TargetFilters); } + private void refreshMusicList() + { + if (SoundMusicManager.MusicList.Count == 0) + { + SoundMusicManager.LoadMusic(); + } + updateComboBox(playableMusicList, SoundMusicManager.MusicList); + } + + private void refreshSoundFilter() + { + if (SoundMusicManager.SoundList.Count == 0) + { + SoundMusicManager.LoadSounds(); + } + + soundFilterList?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var sound in SoundMusicManager.SoundList) + { + bool isFiltered = SoundMusicManager.IsFilteredSound(sound.Serial, out string name); + s.Items.Add(sound, isFiltered); + } + + s.EndUpdate(); + }); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) @@ -7055,7 +7108,8 @@ private void filterTabs_IndexChanged(object sender, EventArgs e) } else if (filterTabs.SelectedTab == subFilterSoundMusic) { - SoundMusicManager.RedrawList(); + refreshMusicList(); + refreshSoundFilter(); } } From c5773dd4655a3f7284cf994d0cdf88d62d30d84f Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Tue, 31 Aug 2021 01:43:33 +0300 Subject: [PATCH 10/22] [ui-isolation] Make OverheadMessages read-only in OverheadManager --- Razor/Core/OverheadManager.cs | 41 ++++++++++++++++++++++++++++---- Razor/UI/Razor.cs | 44 +++++++---------------------------- 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/Razor/Core/OverheadManager.cs b/Razor/Core/OverheadManager.cs index fe4fa985..3098f51b 100644 --- a/Razor/Core/OverheadManager.cs +++ b/Razor/Core/OverheadManager.cs @@ -33,7 +33,11 @@ public class OverheadMessage public static class OverheadManager { - public static List OverheadMessages = new List(); + private static List m_overheadMessages = new List(); + public static IReadOnlyList OverheadMessages + { + get { return m_overheadMessages; } + } public static void Save(XmlTextWriter xml) { @@ -64,7 +68,7 @@ public static void Load(XmlElement node) : Convert.ToInt32(el.GetAttribute("hue")) }; - OverheadMessages.Add(overheadMessage); + m_overheadMessages.Add(overheadMessage); } } catch @@ -75,7 +79,7 @@ public static void Load(XmlElement node) public static void ClearAll() { - OverheadMessages.Clear(); + m_overheadMessages.Clear(); } public static void Remove(string text) @@ -84,7 +88,7 @@ public static void Remove(string text) { if (message.SearchMessage.Equals(text)) { - OverheadMessages.Remove(message); + m_overheadMessages.Remove(message); break; } } @@ -118,6 +122,35 @@ public static void DisplayOverheadMessage(string text) } } + public static void SetMessageHue(string text, int hue) + { + foreach (var message in OverheadMessages) + { + if (message.SearchMessage.Equals(text)) + { + message.Hue = hue; + break; + } + } + } + + public static void AddOverheadMessage(OverheadMessage message) + { + m_overheadMessages.Add(message); + } + + public static void ReplaceOverheadMessage(string oldMessage, string newMessage) + { + foreach (var message in OverheadMessages) + { + if (message.MessageOverhead.Equals(oldMessage)) + { + message.MessageOverhead = newMessage; + break; + } + } + } + public static int GetHue(string id) { int hue = 0; diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index a6f6a6bb..0b12d2c5 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -7161,33 +7161,23 @@ private void setOverheadMessage_Click(object sender, EventArgs e) newItemText = cliLocTextSearch.Text; } - ListViewItem item = new ListViewItem(newItemText); - if (InputBox.Show(this, "Enter text to display overhead", newItemText)) { string overheadMessage = InputBox.GetString(); - item.SubItems.Add(new ListViewItem.ListViewSubItem(item, overheadMessage)); - - if (hueIdx > 0 && hueIdx < 3000) - item.SubItems[1].BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); - else - item.SubItems[1].BackColor = SystemColors.Control; - - item.SubItems[1].ForeColor = - (item.SubItems[1].BackColor.GetBrightness() < 0.35 ? Color.White : Color.Black); - item.UseItemStyleForSubItems = false; - - cliLocOverheadView.SafeAction(s => s.Items.Add(item)); - - OverheadManager.OverheadMessages.Add(new OverheadMessage + var newMessage = new OverheadMessage { SearchMessage = newItemText, Hue = hueIdx, MessageOverhead = overheadMessage - }); + }; + + var item = makeOverheadMessageItem(newMessage); + cliLocOverheadView.SafeAction(s => s.Items.Add(item)); + + OverheadManager.AddOverheadMessage(newMessage); } } @@ -7209,15 +7199,7 @@ private void editOverheadMessage_Click(object sender, EventArgs e) return; selectedItem.SubItems[1].Text = newMessage; - - foreach (OverheadMessage list in OverheadManager.OverheadMessages) - { - if (list.MessageOverhead.Equals(oldMessage)) - { - list.MessageOverhead = newMessage; - break; - } - } + OverheadManager.ReplaceOverheadMessage(oldMessage, newMessage); } } @@ -7310,15 +7292,7 @@ private void setOverheadMessageHue() if (hueEntry.ShowDialog(Engine.MainWindow) == DialogResult.OK) { fillOverheadMessageSubItem(selectedItem.SubItems[1], hueEntry.Hue); - - foreach (OverheadMessage list in OverheadManager.OverheadMessages) - { - if (list.SearchMessage.Equals(selectedItem.Text)) - { - list.Hue = hueEntry.Hue; - break; - } - } + OverheadManager.SetMessageHue(selectedItem.Text, hueEntry.Hue); } } From b2d226ab2fb6d026b57996f0cace8bfb45047cb3 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Wed, 1 Sep 2021 00:46:21 +0300 Subject: [PATCH 11/22] [ui-isolation] Fix startup crash in WaypointManager --- Razor/Core/WaypointManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Razor/Core/WaypointManager.cs b/Razor/Core/WaypointManager.cs index dbc1b30e..f99e2ffd 100644 --- a/Razor/Core/WaypointManager.cs +++ b/Razor/Core/WaypointManager.cs @@ -115,7 +115,7 @@ public static void ClearWaypoint() public static void ResetTimer() { - if (_waypointTimer.Running) + if (_waypointTimer != null && _waypointTimer.Running) { _waypointTimer.Stop(); _waypointTimer = new WaypointDistanceTimer(); From 3137e54568268820596873f70d87e6b7b7aed042 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Wed, 1 Sep 2021 00:47:10 +0300 Subject: [PATCH 12/22] [ui-isolation] Pass handle instead of the whole form in Client.SetMapWndHandle --- Razor/Client/ClassicUO.cs | 2 +- Razor/Client/Client.cs | 3 +-- Razor/Client/OSI.cs | 4 ++-- Razor/Map/MapWindow.cs | 6 +++--- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Razor/Client/ClassicUO.cs b/Razor/Client/ClassicUO.cs index e1a28ea5..b4edef2b 100644 --- a/Razor/Client/ClassicUO.cs +++ b/Razor/Client/ClassicUO.cs @@ -158,7 +158,7 @@ public class ClassicUOClient : Client private static OnFocusLost _onFocusLost; private IntPtr m_ClientWindow; - public override void SetMapWndHandle(Form mapWnd) + public override void SetMapWndHandle(IntPtr mapWndHandle) { } diff --git a/Razor/Client/Client.cs b/Razor/Client/Client.cs index 81878776..4b233687 100644 --- a/Razor/Client/Client.cs +++ b/Razor/Client/Client.cs @@ -23,7 +23,6 @@ using System.Diagnostics; using System.Net; using System.Text; -using System.Windows.Forms; namespace Assistant { @@ -98,7 +97,7 @@ public void SetFeatures(ulong features) public abstract bool ClientRunning { get; } - public abstract void SetMapWndHandle(Form mapWnd); + public abstract void SetMapWndHandle(IntPtr mapWndHandle); public abstract void RequestStatbarPatch(bool preAOS); diff --git a/Razor/Client/OSI.cs b/Razor/Client/OSI.cs index 23b4cacc..8758f2b7 100644 --- a/Razor/Client/OSI.cs +++ b/Razor/Client/OSI.cs @@ -177,9 +177,9 @@ public override bool ClientRunning } } - public override void SetMapWndHandle(Form mapWnd) + public override void SetMapWndHandle(IntPtr mapWndHandle) { - Platform.PostMessage(FindUOWindow(), WM_UONETEVENT, (IntPtr) UONetMessage.SetMapHWnd, mapWnd.Handle); + Platform.PostMessage(FindUOWindow(), WM_UONETEVENT, (IntPtr) UONetMessage.SetMapHWnd, mapWndHandle); } public override void RequestStatbarPatch(bool preAOS) diff --git a/Razor/Map/MapWindow.cs b/Razor/Map/MapWindow.cs index 7eca2a23..3cee3223 100644 --- a/Razor/Map/MapWindow.cs +++ b/Razor/Map/MapWindow.cs @@ -70,7 +70,7 @@ public MapWindow() // this.Map.FullUpdate(); - Client.Instance.SetMapWndHandle(this); + Client.Instance.SetMapWndHandle(this.Handle); } public class MapMenuItem : ToolStripMenuItem @@ -160,7 +160,7 @@ public static void ToggleMap() Engine.MainWindow.MapWindow.Show(); Engine.MainWindow.MapWindow.BringToFront(); Engine.MainWindow.MapWindow.TopMost = true; - Client.Instance.SetMapWndHandle(Engine.MainWindow.MapWindow); + Client.Instance.SetMapWndHandle(Engine.MainWindow.MapWindow.Handle); } } } @@ -358,7 +358,7 @@ private void RequestPartyLocations() public void UpdateMap() { - Client.Instance.SetMapWndHandle(this); + Client.Instance.SetMapWndHandle(this.Handle); this.Map.UpdateMap(); } From a96ab07ade968ec745e24a0c4c9dbe0fe1d3c640 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 3 Sep 2021 21:20:49 +0300 Subject: [PATCH 13/22] Get rid of UI code in base Filter --- Razor/Filters/Filter.cs | 40 +++++++++++++--------------------------- Razor/UI/Razor.cs | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Razor/Filters/Filter.cs b/Razor/Filters/Filter.cs index 324962bc..e6c86c42 100644 --- a/Razor/Filters/Filter.cs +++ b/Razor/Filters/Filter.cs @@ -19,17 +19,16 @@ #endregion using System; -using System.Collections; -using System.Windows.Forms; +using System.Collections.Generic; using System.Xml; namespace Assistant.Filters { public abstract class Filter { - private static ArrayList m_Filters = new ArrayList(); + private static List m_Filters = new List(); - public static ArrayList List + public static IList List { get { return m_Filters; } } @@ -91,21 +90,6 @@ public static void Save(XmlTextWriter xml) } } - public static void Draw(CheckedListBox list) - { - list.BeginUpdate(); - list.Items.Clear(); - - for (int i = 0; i < m_Filters.Count; i++) - { - Filter f = (Filter) m_Filters[i]; - list.Items.Add(f); - list.SetItemChecked(i, f.Enabled); - } - - list.EndUpdate(); - } - public abstract void OnFilter(PacketReader p, PacketHandlerEventArgs args); public abstract byte[] PacketIDs { get; } public abstract LocString Name { get; } @@ -113,6 +97,16 @@ public static void Draw(CheckedListBox list) public bool Enabled { get { return m_Enabled; } + set + { + if (value == m_Enabled) + return; + + if (value) + OnEnable(); + else + OnDisable(); + } } private bool m_Enabled; @@ -142,13 +136,5 @@ public virtual void OnDisable() for (int i = 0; i < PacketIDs.Length; i++) PacketHandler.RemoveServerToClientViewer(PacketIDs[i], m_Callback); } - - public void OnCheckChanged(CheckState newValue) - { - if (Enabled && newValue == CheckState.Unchecked) - OnDisable(); - else if (!Enabled && newValue == CheckState.Checked) - OnEnable(); - } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 9adb8787..8373534c 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -612,6 +612,19 @@ private void LoadAnimationLists() } } + private void UpdateFilterList() + { + filters.BeginUpdate(); + filters.Items.Clear(); + + foreach (Filter filter in Filter.List) + { + filters.Items.Add(filter, filter.Enabled); + } + + filters.EndUpdate(); + } + private void tabs_IndexChanged(object sender, System.EventArgs e) { if (tabs == null) @@ -624,7 +637,7 @@ private void tabs_IndexChanged(object sender, System.EventArgs e) if (tabs.SelectedTab == generalTab) { - Filter.Draw(filters); + UpdateFilterList(); langSel.BeginUpdate(); langSel.Items.Clear(); langSel.Items.AddRange(Language.GetPackNames()); @@ -947,7 +960,8 @@ public void RedrawSkills() private void OnFilterCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e) { - ((Filter) filters.Items[e.Index]).OnCheckChanged(e.NewValue); + var filter = filters.Items[e.Index] as Filter; + filter.Enabled = (e.NewValue == CheckState.Checked); } private void incomingMob_CheckedChanged(object sender, System.EventArgs e) From 2a1365fc5e3f801212d6285dbec21a3432f2b2d5 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 3 Sep 2021 22:12:14 +0300 Subject: [PATCH 14/22] Remove UI code from WaypointManager --- Razor/Core/WaypointManager.cs | 43 ++++++++--------------------------- Razor/UI/Razor.cs | 28 ++++++++++++++++++++--- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/Razor/Core/WaypointManager.cs b/Razor/Core/WaypointManager.cs index 6b17585d..f99e2ffd 100644 --- a/Razor/Core/WaypointManager.cs +++ b/Razor/Core/WaypointManager.cs @@ -21,15 +21,12 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; namespace Assistant.Core { public static class WaypointManager { - private static ListBox _waypointList; private static WaypointDistanceTimer _waypointTimer; public static Waypoint CurrentWaypoint; @@ -37,6 +34,10 @@ public static class WaypointManager public static List Waypoints = new List(); + public delegate void WaypointsChangedCallback(); + + public static WaypointsChangedCallback OnWaypointsChanged; + public static void Initialize() { HotKey.Add(HKCategory.Misc, LocString.NextWaypoint, new HotKeyCallback(NextWaypoint)); @@ -44,13 +45,6 @@ public static void Initialize() HotKey.Add(HKCategory.Misc, LocString.HideWaypoint, new HotKeyCallback(ClearWaypoint)); } - public static void SetControls(ListBox waypointList) - { - _waypointList = waypointList; - _waypointTimer = new WaypointDistanceTimer(); - _waypointTimer.Stop(); - } - public class Waypoint { public int X { get; set; } @@ -86,17 +80,14 @@ public static void PrevWaypoint() public static void AddWaypoint(Waypoint waypoint) { Waypoints.Add(waypoint); - - RedrawList(); + OnWaypointsChanged?.Invoke(); } public static void RemoveWaypoint(Waypoint waypoint) { ClearWaypoint(); - - Waypoints.Remove(waypoint); - - RedrawList(); + Waypoints.Remove(waypoint); + OnWaypointsChanged?.Invoke(); } public static void ShowWaypoint(Waypoint waypoint) @@ -124,7 +115,7 @@ public static void ClearWaypoint() public static void ResetTimer() { - if (_waypointTimer.Running) + if (_waypointTimer != null && _waypointTimer.Running) { _waypointTimer.Stop(); _waypointTimer = new WaypointDistanceTimer(); @@ -221,7 +212,7 @@ public static void Load(XmlElement node) Waypoints.Add(waypoint); } - RedrawList(); + OnWaypointsChanged?.Invoke(); } catch (Exception ex) { @@ -233,21 +224,5 @@ public static void ClearAll() { Waypoints.Clear(); } - - public static void RedrawList() - { - _waypointList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - foreach (Waypoint waypoint in Waypoints) - { - s.Items.Add(waypoint); - } - - s.EndUpdate(); - }); - } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 9adb8787..62fdfd1d 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -77,7 +77,8 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) TargetFilterManager.SetControls(targetFilter); SoundMusicManager.SetControls(soundFilterList, playableMusicList); ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); - WaypointManager.SetControls(waypointList); + WaypointManager.OnWaypointsChanged += this.RefreshWaypoints; + WaypointManager.ResetTimer(); OverheadManager.SetControls(cliLocOverheadView); TextFilterManager.SetControls(textFilterList); @@ -6931,13 +6932,18 @@ private void listWaypoints_MouseDown(object sender, MouseEventArgs e) } } + private void RefreshWaypoints() + { + UpdateListBox(waypointList, WaypointManager.Waypoints); + } + private void onClearWaypoints(object sender, EventArgs e) { if (MessageBox.Show(this, "Are you sure you want to clear all of your waypoints?", "Clear Waypoints?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { WaypointManager.ClearAll(); - WaypointManager.RedrawList(); + RefreshWaypoints(); } } @@ -6994,6 +7000,22 @@ private void showPartyFriendOverhead_CheckedChanged(object sender, EventArgs e) Config.SetProperty("ShowPartyFriendOverhead", showPartyFriendOverhead.Checked); } + private void UpdateListBox(ListBox listBox, IList items) + { + listBox?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var item in items) + { + s.Items.Add(item); + } + + s.EndUpdate(); + }); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) @@ -7175,7 +7197,7 @@ private void displayCountersTabCtrl_SelectedIndexChanged(object sender, EventArg if (displayCountersTabCtrl.SelectedTab == subWaypoints) { - WaypointManager.RedrawList(); + RefreshWaypoints(); } } From 3fa93738dd1a20076eae7ecd8ee273e79d44529d Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 3 Sep 2021 22:34:07 +0300 Subject: [PATCH 15/22] Remove UI code from TextFilterManager --- Razor/Core/TextFilterManager.cs | 35 ++++++--------------------------- Razor/UI/Razor.cs | 25 +++++++++++++++++++++-- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/Razor/Core/TextFilterManager.cs b/Razor/Core/TextFilterManager.cs index e5fe4949..31eebc3c 100644 --- a/Razor/Core/TextFilterManager.cs +++ b/Razor/Core/TextFilterManager.cs @@ -21,35 +21,28 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; namespace Assistant.Core { public static class TextFilterManager { - private static ListBox _filterTextList; - public static List FilteredText = new List(); - public static void SetControls(ListBox filterTextList) - { - _filterTextList = filterTextList; - } + public delegate void ItemsChangedCallback(); + + public static ItemsChangedCallback OnItemsChanged { get; set; } public static void AddFilter(string filter) { FilteredText.Add(filter); - - RedrawList(); + OnItemsChanged?.Invoke(); } public static void RemoveFilter(string filter) { FilteredText.Remove(filter); - - RedrawList(); + OnItemsChanged?.Invoke(); } public static void Save(XmlTextWriter xml) @@ -89,7 +82,7 @@ public static void Load(XmlElement node) FilteredText.Add(Convert.ToString(el.GetAttribute("text"))); } - RedrawList(); + OnItemsChanged?.Invoke(); } catch (Exception ex) { @@ -101,21 +94,5 @@ public static void ClearAll() { FilteredText.Clear(); } - - public static void RedrawList() - { - _filterTextList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - foreach (string text in FilteredText) - { - s.Items.Add(text); - } - - s.EndUpdate(); - }); - } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 9adb8787..f4b163c7 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -79,7 +79,7 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); WaypointManager.SetControls(waypointList); OverheadManager.SetControls(cliLocOverheadView); - TextFilterManager.SetControls(textFilterList); + TextFilterManager.OnItemsChanged += this.RefreshTextFilters; bool st = Config.GetBool("Systray"); taskbar.Checked = this.ShowInTaskbar = !st; @@ -6994,6 +6994,27 @@ private void showPartyFriendOverhead_CheckedChanged(object sender, EventArgs e) Config.SetProperty("ShowPartyFriendOverhead", showPartyFriendOverhead.Checked); } + private void UpdateListBox(ListBox listBox, IList items) + { + listBox?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var item in items) + { + s.Items.Add(item); + } + + s.EndUpdate(); + }); + } + + private void RefreshTextFilters() + { + UpdateListBox(textFilterList, TextFilterManager.FilteredText); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) @@ -7002,7 +7023,7 @@ private void filterTabs_IndexChanged(object sender, EventArgs e) } else if (filterTabs.SelectedTab == subFilterText) { - TextFilterManager.RedrawList(); + RefreshTextFilters(); } else if (filterTabs.SelectedTab == subFilterSoundMusic) { From 987a52b8aa5a1d2d9902b337ea9589e2c0d3182f Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 3 Sep 2021 22:49:05 +0300 Subject: [PATCH 16/22] Add UpdateListBox method to main window --- Razor/UI/Razor.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 9adb8787..8c939b1d 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -6994,6 +6994,22 @@ private void showPartyFriendOverhead_CheckedChanged(object sender, EventArgs e) Config.SetProperty("ShowPartyFriendOverhead", showPartyFriendOverhead.Checked); } + private void UpdateListBox(ListBox listBox, IList items) + { + listBox?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var item in items) + { + s.Items.Add(item); + } + + s.EndUpdate(); + }); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) From ea4aed41147a46acd3b303ed340ab386136a0b85 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 3 Sep 2021 23:10:02 +0300 Subject: [PATCH 17/22] Get rid of UI code in TargetFilterManager --- Razor/Filters/TargetFilterManager.cs | 39 +++++++--------------------- Razor/UI/Razor.cs | 15 +++++++++-- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/Razor/Filters/TargetFilterManager.cs b/Razor/Filters/TargetFilterManager.cs index 0e29047f..eff59a23 100644 --- a/Razor/Filters/TargetFilterManager.cs +++ b/Razor/Filters/TargetFilterManager.cs @@ -20,23 +20,20 @@ using System.Collections.Generic; using System.Linq; -using System.Windows.Forms; using System.Xml; using Assistant.Core; -using Assistant.UI; namespace Assistant.Filters { public static class TargetFilterManager { - private static ListBox _targetFilterList; + public static List TargetFilters = new List(); - private static List TargetFilters = new List(); + public delegate void ItemsChangedCallback(); + public delegate void AddFriendTargetCallback(); - public static void SetControls(ListBox targetFilterList) - { - _targetFilterList = targetFilterList; - } + public static ItemsChangedCallback OnItemsChanged { get; set; } + public static AddFriendTargetCallback OnAddFriendTarget { get; set; } public static void OnTargetAddTargetFilter() { @@ -46,7 +43,7 @@ public static void OnTargetAddTargetFilter() public static void OnAddFriendTargetFilter(bool location, Serial serial, Point3D loc, ushort gfx) { - Engine.MainWindow.SafeAction(s => s.ShowMe()); + OnAddFriendTarget?.Invoke(); if (!location && serial.IsMobile && serial != World.Player.Serial) { @@ -57,7 +54,7 @@ public static void OnAddFriendTargetFilter(bool location, Serial serial, Point3D AddTargetFilter(m.Name, serial); - RedrawList(); + OnItemsChanged?.Invoke(); } } @@ -157,7 +154,7 @@ public static bool IsFilteredTarget(Serial serial) public static bool RemoveTargetFilter(int index) { TargetFilters.RemoveAt(index); - RedrawList(); + OnItemsChanged?.Invoke(); return true; } @@ -165,7 +162,7 @@ public static bool RemoveTargetFilter(int index) public static void ClearTargetFilters() { TargetFilters.Clear(); - RedrawList(); + OnItemsChanged?.Invoke(); } public static void Save(XmlTextWriter xml) @@ -208,28 +205,12 @@ public static void Load(XmlElement node) // must not be in the profile, move on } - RedrawList(); + OnItemsChanged?.Invoke(); } public static void ClearAll() { TargetFilters.Clear(); } - - public static void RedrawList() - { - _targetFilterList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - foreach (var target in TargetFilters) - { - s.Items.Add(target); - } - - s.EndUpdate(); - }); - } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 8c939b1d..d6524bd2 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -74,7 +74,8 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) FriendsManager.SetControls(friendsGroup, friendsList); DressList.SetControls(dressList, dressItems); - TargetFilterManager.SetControls(targetFilter); + TargetFilterManager.OnItemsChanged += this.RefreshTargetFilters; + TargetFilterManager.OnAddFriendTarget += this.OnFriendTargetFilterAdd; SoundMusicManager.SetControls(soundFilterList, playableMusicList); ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); WaypointManager.SetControls(waypointList); @@ -7010,11 +7011,21 @@ private void UpdateListBox(ListBox listBox, IList items) }); } + private void OnFriendTargetFilterAdd() + { + Engine.MainWindow.SafeAction(s => s.ShowMe()); + } + + private void RefreshTargetFilters() + { + UpdateListBox(targetFilter, TargetFilterManager.TargetFilters); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) { - TargetFilterManager.RedrawList(); + RefreshTargetFilters(); } else if (filterTabs.SelectedTab == subFilterText) { From 53b8ca7708014d5f4467d5423a51aba5788e3da6 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 3 Sep 2021 23:23:55 +0300 Subject: [PATCH 18/22] Get rid of UI code in OverheadManager --- Razor/Core/OverheadManager.cs | 97 ++++++++++++----------------------- Razor/UI/Razor.cs | 84 +++++++++++++++++++----------- 2 files changed, 87 insertions(+), 94 deletions(-) diff --git a/Razor/Core/OverheadManager.cs b/Razor/Core/OverheadManager.cs index db8fec57..3098f51b 100644 --- a/Razor/Core/OverheadManager.cs +++ b/Razor/Core/OverheadManager.cs @@ -20,11 +20,7 @@ using System; using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; -using Ultima; namespace Assistant.Core { @@ -37,13 +33,10 @@ public class OverheadMessage public static class OverheadManager { - private static ListView _listView; - - public static List OverheadMessages = new List(); - - public static void SetControls(ListView listView) - { - _listView = listView; + private static List m_overheadMessages = new List(); + public static IReadOnlyList OverheadMessages + { + get { return m_overheadMessages; } } public static void Save(XmlTextWriter xml) @@ -75,7 +68,7 @@ public static void Load(XmlElement node) : Convert.ToInt32(el.GetAttribute("hue")) }; - OverheadMessages.Add(overheadMessage); + m_overheadMessages.Add(overheadMessage); } } catch @@ -86,7 +79,7 @@ public static void Load(XmlElement node) public static void ClearAll() { - OverheadMessages.Clear(); + m_overheadMessages.Clear(); } public static void Remove(string text) @@ -95,37 +88,12 @@ public static void Remove(string text) { if (message.SearchMessage.Equals(text)) { - OverheadMessages.Remove(message); + m_overheadMessages.Remove(message); break; } } } - public static void RedrawList() - { - _listView.SafeAction(s => s.Items.Clear()); - - foreach (OverheadMessage message in OverheadMessages) - { - ListViewItem item = new ListViewItem($"{message.SearchMessage}"); - item.SubItems.Add(new ListViewItem.ListViewSubItem(item, message.MessageOverhead)); - - int hueIdx = message.Hue; - - if (hueIdx > 0 && hueIdx < 3000) - item.SubItems[1].BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); - else - item.SubItems[1].BackColor = SystemColors.Control; - - item.SubItems[1].ForeColor = - (item.SubItems[1].BackColor.GetBrightness() < 0.35 ? Color.White : Color.Black); - - item.UseItemStyleForSubItems = false; - - _listView.SafeAction(s => s.Items.Add(item)); - } - } - public static void DisplayOverheadMessage(string text) { if (Config.GetBool("ShowOverheadMessages") && OverheadMessages.Count > 0) @@ -154,34 +122,33 @@ public static void DisplayOverheadMessage(string text) } } - public static void SetOverheadHue() - { - ListViewItem selectedItem = _listView.Items[_listView.SelectedIndices[0]]; - - HueEntry h = new HueEntry(GetHue(selectedItem.SubItems[1].Text)); - - if (h.ShowDialog(Engine.MainWindow) == DialogResult.OK) - { - int hueIdx = h.Hue; - - if (hueIdx > 0 && hueIdx < 3000) - selectedItem.SubItems[1].BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); - else - selectedItem.SubItems[1].BackColor = Color.White; + public static void SetMessageHue(string text, int hue) + { + foreach (var message in OverheadMessages) + { + if (message.SearchMessage.Equals(text)) + { + message.Hue = hue; + break; + } + } + } - selectedItem.SubItems[1].ForeColor = (selectedItem.SubItems[1].BackColor.GetBrightness() < 0.35 - ? Color.White - : Color.Black); + public static void AddOverheadMessage(OverheadMessage message) + { + m_overheadMessages.Add(message); + } - foreach (OverheadMessage list in OverheadManager.OverheadMessages) - { - if (list.SearchMessage.Equals(selectedItem.Text)) - { - list.Hue = hueIdx; - break; - } - } - } + public static void ReplaceOverheadMessage(string oldMessage, string newMessage) + { + foreach (var message in OverheadMessages) + { + if (message.MessageOverhead.Equals(oldMessage)) + { + message.MessageOverhead = newMessage; + break; + } + } } public static int GetHue(string id) diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 9adb8787..abe89c9b 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -78,7 +78,6 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) SoundMusicManager.SetControls(soundFilterList, playableMusicList); ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); WaypointManager.SetControls(waypointList); - OverheadManager.SetControls(cliLocOverheadView); TextFilterManager.SetControls(textFilterList); bool st = Config.GetBool("Systray"); @@ -7058,33 +7057,23 @@ private void setOverheadMessage_Click(object sender, EventArgs e) newItemText = cliLocTextSearch.Text; } - ListViewItem item = new ListViewItem(newItemText); - if (InputBox.Show(this, "Enter text to display overhead", newItemText)) { string overheadMessage = InputBox.GetString(); - item.SubItems.Add(new ListViewItem.ListViewSubItem(item, overheadMessage)); - - if (hueIdx > 0 && hueIdx < 3000) - item.SubItems[1].BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); - else - item.SubItems[1].BackColor = SystemColors.Control; - - item.SubItems[1].ForeColor = - (item.SubItems[1].BackColor.GetBrightness() < 0.35 ? Color.White : Color.Black); - item.UseItemStyleForSubItems = false; - - cliLocOverheadView.SafeAction(s => s.Items.Add(item)); - - OverheadManager.OverheadMessages.Add(new OverheadMessage + var newMessage = new OverheadMessage { SearchMessage = newItemText, Hue = hueIdx, MessageOverhead = overheadMessage - }); + }; + + var item = makeOverheadMessageItem(newMessage); + cliLocOverheadView.SafeAction(s => s.Items.Add(item)); + + OverheadManager.AddOverheadMessage(newMessage); } } @@ -7106,15 +7095,7 @@ private void editOverheadMessage_Click(object sender, EventArgs e) return; selectedItem.SubItems[1].Text = newMessage; - - foreach (OverheadMessage list in OverheadManager.OverheadMessages) - { - if (list.MessageOverhead.Equals(oldMessage)) - { - list.MessageOverhead = newMessage; - break; - } - } + OverheadManager.ReplaceOverheadMessage(oldMessage, newMessage); } } @@ -7134,7 +7115,7 @@ private void setColorHue_Click(object sender, EventArgs e) { if (cliLocOverheadView.SelectedItems.Count > 0) { - OverheadManager.SetOverheadHue(); + setOverheadMessageHue(); } } @@ -7166,11 +7147,56 @@ private void showOverheadMessages_CheckedChanged(object sender, EventArgs e) Config.SetProperty("ShowOverheadMessages", showOverheadMessages.Checked); } + private void fillOverheadMessageSubItem(ListViewItem.ListViewSubItem subItem, int hueIdx) + { + if (hueIdx > 0 && hueIdx < 3000) + subItem.BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); + else + subItem.BackColor = SystemColors.Control; + + subItem.ForeColor = (subItem.BackColor.GetBrightness() < 0.35 ? Color.White : Color.Black); + } + + private ListViewItem makeOverheadMessageItem(OverheadMessage message) + { + var item = new ListViewItem($"{message.SearchMessage}"); + var subItem = new ListViewItem.ListViewSubItem(item, message.MessageOverhead); + fillOverheadMessageSubItem(subItem, message.Hue); + item.SubItems.Add(subItem); + item.UseItemStyleForSubItems = false; + return item; + } + + private void refreshOverheadMessages() + { + cliLocOverheadView?.SafeAction(s => s.Items.Clear()); + + foreach (OverheadMessage message in OverheadManager.OverheadMessages) + { + var item = makeOverheadMessageItem(message); + cliLocOverheadView?.SafeAction(s => s.Items.Add(item)); + } + } + + private void setOverheadMessageHue() + { + ListViewItem selectedItem = cliLocOverheadView.Items[cliLocOverheadView.SelectedIndices[0]]; + + var hue = OverheadManager.GetHue(selectedItem.SubItems[1].Text); + HueEntry hueEntry = new HueEntry(hue); + + if (hueEntry.ShowDialog(Engine.MainWindow) == DialogResult.OK) + { + fillOverheadMessageSubItem(selectedItem.SubItems[1], hueEntry.Hue); + OverheadManager.SetMessageHue(selectedItem.Text, hueEntry.Hue); + } + } + private void displayCountersTabCtrl_SelectedIndexChanged(object sender, EventArgs e) { if (displayCountersTabCtrl.SelectedTab == subOverheadTab) { - OverheadManager.RedrawList(); + refreshOverheadMessages(); } if (displayCountersTabCtrl.SelectedTab == subWaypoints) From 7300cdab4cacc2dc3de82f3f8e912d6d13dce939 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 3 Sep 2021 23:29:48 +0300 Subject: [PATCH 19/22] Fix up method names --- Razor/UI/Razor.cs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index abe89c9b..2300a41c 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -7070,7 +7070,7 @@ private void setOverheadMessage_Click(object sender, EventArgs e) MessageOverhead = overheadMessage }; - var item = makeOverheadMessageItem(newMessage); + var item = MakeOverheadMessageItem(newMessage); cliLocOverheadView.SafeAction(s => s.Items.Add(item)); OverheadManager.AddOverheadMessage(newMessage); @@ -7115,7 +7115,7 @@ private void setColorHue_Click(object sender, EventArgs e) { if (cliLocOverheadView.SelectedItems.Count > 0) { - setOverheadMessageHue(); + SetOverheadMessageHue(); } } @@ -7147,7 +7147,7 @@ private void showOverheadMessages_CheckedChanged(object sender, EventArgs e) Config.SetProperty("ShowOverheadMessages", showOverheadMessages.Checked); } - private void fillOverheadMessageSubItem(ListViewItem.ListViewSubItem subItem, int hueIdx) + private void FillOverheadMessageSubItem(ListViewItem.ListViewSubItem subItem, int hueIdx) { if (hueIdx > 0 && hueIdx < 3000) subItem.BackColor = Hues.GetHue(hueIdx - 1).GetColor(HueEntry.TextHueIDX); @@ -7157,28 +7157,28 @@ private void fillOverheadMessageSubItem(ListViewItem.ListViewSubItem subItem, in subItem.ForeColor = (subItem.BackColor.GetBrightness() < 0.35 ? Color.White : Color.Black); } - private ListViewItem makeOverheadMessageItem(OverheadMessage message) + private ListViewItem MakeOverheadMessageItem(OverheadMessage message) { var item = new ListViewItem($"{message.SearchMessage}"); var subItem = new ListViewItem.ListViewSubItem(item, message.MessageOverhead); - fillOverheadMessageSubItem(subItem, message.Hue); + FillOverheadMessageSubItem(subItem, message.Hue); item.SubItems.Add(subItem); item.UseItemStyleForSubItems = false; return item; } - private void refreshOverheadMessages() + private void RefreshOverheadMessages() { cliLocOverheadView?.SafeAction(s => s.Items.Clear()); foreach (OverheadMessage message in OverheadManager.OverheadMessages) { - var item = makeOverheadMessageItem(message); + var item = MakeOverheadMessageItem(message); cliLocOverheadView?.SafeAction(s => s.Items.Add(item)); } } - private void setOverheadMessageHue() + private void SetOverheadMessageHue() { ListViewItem selectedItem = cliLocOverheadView.Items[cliLocOverheadView.SelectedIndices[0]]; @@ -7187,7 +7187,7 @@ private void setOverheadMessageHue() if (hueEntry.ShowDialog(Engine.MainWindow) == DialogResult.OK) { - fillOverheadMessageSubItem(selectedItem.SubItems[1], hueEntry.Hue); + FillOverheadMessageSubItem(selectedItem.SubItems[1], hueEntry.Hue); OverheadManager.SetMessageHue(selectedItem.Text, hueEntry.Hue); } } @@ -7196,7 +7196,7 @@ private void displayCountersTabCtrl_SelectedIndexChanged(object sender, EventArg { if (displayCountersTabCtrl.SelectedTab == subOverheadTab) { - refreshOverheadMessages(); + RefreshOverheadMessages(); } if (displayCountersTabCtrl.SelectedTab == subWaypoints) From b3f455ebe18812d746750e10f481d1b4d8ff712d Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Sat, 4 Sep 2021 00:02:07 +0300 Subject: [PATCH 20/22] Remove UI code from SoundMusicManager --- Razor/Filters/SoundMusicManager.cs | 83 +++++++++++------------------- Razor/UI/Razor.cs | 55 +++++++++++++++++++- 2 files changed, 83 insertions(+), 55 deletions(-) diff --git a/Razor/Filters/SoundMusicManager.cs b/Razor/Filters/SoundMusicManager.cs index f00d2303..96585a5b 100644 --- a/Razor/Filters/SoundMusicManager.cs +++ b/Razor/Filters/SoundMusicManager.cs @@ -22,27 +22,22 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Windows.Forms; using System.Xml; -using Assistant.UI; namespace Assistant.Filters { public static class SoundMusicManager { - private static CheckedListBox _soundFilterList; - private static ComboBox _playableMusicList; - private static List SoundFilters = new List(); - private static List SoundList = new List(); - private static List MusicList = new List(); + public static List SoundList = new List(); + public static List MusicList = new List(); - public static void SetControls(CheckedListBox soundFilterList, ComboBox playableMusicList) - { - _soundFilterList = soundFilterList; - _playableMusicList = playableMusicList; - } + public delegate void SoundFiltersChangeCallback(); + public delegate void PlayableMusicChangeCallback(); + + public static SoundFiltersChangeCallback OnSoundFiltersChanged { get; set; } + public static PlayableMusicChangeCallback OnPlayableMusicChanged { get; set; } public class Sound { @@ -100,7 +95,9 @@ public static bool IsFilteredSound(ushort serial, out string name) public static string GetSoundName(ushort soundId) { if (SoundList.Count == 0) - RedrawList(); + { + NotifySoundFilter(); + } foreach (Sound sound in SoundList) { @@ -116,7 +113,9 @@ public static string GetSoundName(ushort soundId) public static string GetMusicName(int musicId, out bool loop) { if (MusicList.Count == 0) - RedrawList(); + { + NotifyPlayableMusic(); + } foreach (Music music in MusicList) { @@ -709,7 +708,8 @@ public static void Load(XmlElement node) // must not be in the profile, move on } - RedrawList(); + NotifySoundFilter(); + NotifyPlayableMusic(); } public static void ClearAll() @@ -717,45 +717,22 @@ public static void ClearAll() SoundFilters.Clear(); } - public static void RedrawList() - { - _soundFilterList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - if (SoundList.Count == 0) - { - LoadSounds(); - } - - foreach (Sound sound in SoundList) - { - bool isFiltered = IsFilteredSound(sound.Serial, out string name); - s.Items.Add(sound, isFiltered); - } - - s.EndUpdate(); - }); - - _playableMusicList?.SafeAction(s => - { - s.BeginUpdate(); - s.Items.Clear(); - - if (MusicList.Count == 0) - { - LoadMusic(); - } - - foreach (Music music in MusicList) - { - s.Items.Add(music); - } + private static void NotifySoundFilter() + { + if (SoundList.Count == 0) + { + LoadSounds(); + } + OnSoundFiltersChanged?.Invoke(); + } - s.SelectedIndex = 0; - s.EndUpdate(); - }); + private static void NotifyPlayableMusic() + { + if (MusicList.Count == 0) + { + LoadMusic(); + } + OnPlayableMusicChanged?.Invoke(); } } } \ No newline at end of file diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 8c939b1d..d71824d4 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -75,7 +75,8 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) FriendsManager.SetControls(friendsGroup, friendsList); DressList.SetControls(dressList, dressItems); TargetFilterManager.SetControls(targetFilter); - SoundMusicManager.SetControls(soundFilterList, playableMusicList); + SoundMusicManager.OnPlayableMusicChanged += this.RefreshMusicList; + SoundMusicManager.OnSoundFiltersChanged += this.RefreshSoundFilter; ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); WaypointManager.SetControls(waypointList); OverheadManager.SetControls(cliLocOverheadView); @@ -7010,6 +7011,55 @@ private void UpdateListBox(ListBox listBox, IList items) }); } + private void UpdateComboBox(ComboBox comboBox, IList items) + { + comboBox?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var item in items) + { + s.Items.Add(item); + } + + s.SelectedIndex = 0; + s.EndUpdate(); + }); +; + } + + private void RefreshMusicList() + { + if (SoundMusicManager.MusicList.Count == 0) + { + SoundMusicManager.LoadMusic(); + } + UpdateComboBox(playableMusicList, SoundMusicManager.MusicList); + } + + private void RefreshSoundFilter() + { + if (SoundMusicManager.SoundList.Count == 0) + { + SoundMusicManager.LoadSounds(); + } + + soundFilterList?.SafeAction(s => + { + s.BeginUpdate(); + s.Items.Clear(); + + foreach (var sound in SoundMusicManager.SoundList) + { + bool isFiltered = SoundMusicManager.IsFilteredSound(sound.Serial, out string name); + s.Items.Add(sound, isFiltered); + } + + s.EndUpdate(); + }); + } + private void filterTabs_IndexChanged(object sender, EventArgs e) { if (filterTabs.SelectedTab == subFilterTargets) @@ -7022,7 +7072,8 @@ private void filterTabs_IndexChanged(object sender, EventArgs e) } else if (filterTabs.SelectedTab == subFilterSoundMusic) { - SoundMusicManager.RedrawList(); + RefreshMusicList(); + RefreshSoundFilter(); } } From e39d7d66672675798bac9f160d19444b2e13d029 Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Sat, 4 Sep 2021 01:11:12 +0300 Subject: [PATCH 21/22] Pass handle instead of the whole form in Client.SetMapWndHandle --- Razor/Client/ClassicUO.cs | 2 +- Razor/Client/Client.cs | 3 +-- Razor/Client/OSI.cs | 4 ++-- Razor/Map/MapWindow.cs | 6 +++--- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Razor/Client/ClassicUO.cs b/Razor/Client/ClassicUO.cs index e1a28ea5..b4edef2b 100644 --- a/Razor/Client/ClassicUO.cs +++ b/Razor/Client/ClassicUO.cs @@ -158,7 +158,7 @@ public class ClassicUOClient : Client private static OnFocusLost _onFocusLost; private IntPtr m_ClientWindow; - public override void SetMapWndHandle(Form mapWnd) + public override void SetMapWndHandle(IntPtr mapWndHandle) { } diff --git a/Razor/Client/Client.cs b/Razor/Client/Client.cs index 81878776..4b233687 100644 --- a/Razor/Client/Client.cs +++ b/Razor/Client/Client.cs @@ -23,7 +23,6 @@ using System.Diagnostics; using System.Net; using System.Text; -using System.Windows.Forms; namespace Assistant { @@ -98,7 +97,7 @@ public void SetFeatures(ulong features) public abstract bool ClientRunning { get; } - public abstract void SetMapWndHandle(Form mapWnd); + public abstract void SetMapWndHandle(IntPtr mapWndHandle); public abstract void RequestStatbarPatch(bool preAOS); diff --git a/Razor/Client/OSI.cs b/Razor/Client/OSI.cs index 23b4cacc..8758f2b7 100644 --- a/Razor/Client/OSI.cs +++ b/Razor/Client/OSI.cs @@ -177,9 +177,9 @@ public override bool ClientRunning } } - public override void SetMapWndHandle(Form mapWnd) + public override void SetMapWndHandle(IntPtr mapWndHandle) { - Platform.PostMessage(FindUOWindow(), WM_UONETEVENT, (IntPtr) UONetMessage.SetMapHWnd, mapWnd.Handle); + Platform.PostMessage(FindUOWindow(), WM_UONETEVENT, (IntPtr) UONetMessage.SetMapHWnd, mapWndHandle); } public override void RequestStatbarPatch(bool preAOS) diff --git a/Razor/Map/MapWindow.cs b/Razor/Map/MapWindow.cs index 7eca2a23..3cee3223 100644 --- a/Razor/Map/MapWindow.cs +++ b/Razor/Map/MapWindow.cs @@ -70,7 +70,7 @@ public MapWindow() // this.Map.FullUpdate(); - Client.Instance.SetMapWndHandle(this); + Client.Instance.SetMapWndHandle(this.Handle); } public class MapMenuItem : ToolStripMenuItem @@ -160,7 +160,7 @@ public static void ToggleMap() Engine.MainWindow.MapWindow.Show(); Engine.MainWindow.MapWindow.BringToFront(); Engine.MainWindow.MapWindow.TopMost = true; - Client.Instance.SetMapWndHandle(Engine.MainWindow.MapWindow); + Client.Instance.SetMapWndHandle(Engine.MainWindow.MapWindow.Handle); } } } @@ -358,7 +358,7 @@ private void RequestPartyLocations() public void UpdateMap() { - Client.Instance.SetMapWndHandle(this); + Client.Instance.SetMapWndHandle(this.Handle); this.Map.UpdateMap(); } From 577b86ffa0fa037835482f4b3213e5f4f1dc766c Mon Sep 17 00:00:00 2001 From: Andrey Kaydalov Date: Fri, 10 Sep 2021 20:28:01 +0300 Subject: [PATCH 22/22] [ui-isolation] Clean up some member naming issues --- Razor/Core/OverheadManager.cs | 12 +++++------ Razor/Filters/Filter.cs | 38 +++++++++++++++++------------------ 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Razor/Core/OverheadManager.cs b/Razor/Core/OverheadManager.cs index 3098f51b..2e12e65f 100644 --- a/Razor/Core/OverheadManager.cs +++ b/Razor/Core/OverheadManager.cs @@ -33,10 +33,10 @@ public class OverheadMessage public static class OverheadManager { - private static List m_overheadMessages = new List(); + private static readonly List _overheadMessages = new List(); public static IReadOnlyList OverheadMessages { - get { return m_overheadMessages; } + get { return _overheadMessages; } } public static void Save(XmlTextWriter xml) @@ -68,7 +68,7 @@ public static void Load(XmlElement node) : Convert.ToInt32(el.GetAttribute("hue")) }; - m_overheadMessages.Add(overheadMessage); + _overheadMessages.Add(overheadMessage); } } catch @@ -79,7 +79,7 @@ public static void Load(XmlElement node) public static void ClearAll() { - m_overheadMessages.Clear(); + _overheadMessages.Clear(); } public static void Remove(string text) @@ -88,7 +88,7 @@ public static void Remove(string text) { if (message.SearchMessage.Equals(text)) { - m_overheadMessages.Remove(message); + _overheadMessages.Remove(message); break; } } @@ -136,7 +136,7 @@ public static void SetMessageHue(string text, int hue) public static void AddOverheadMessage(OverheadMessage message) { - m_overheadMessages.Add(message); + _overheadMessages.Add(message); } public static void ReplaceOverheadMessage(string oldMessage, string newMessage) diff --git a/Razor/Filters/Filter.cs b/Razor/Filters/Filter.cs index e6c86c42..0e2e692f 100644 --- a/Razor/Filters/Filter.cs +++ b/Razor/Filters/Filter.cs @@ -26,16 +26,16 @@ namespace Assistant.Filters { public abstract class Filter { - private static List m_Filters = new List(); + private static readonly List _filters = new List(); public static IList List { - get { return m_Filters; } + get { return _filters; } } public static void Register(Filter filter) { - m_Filters.Add(filter); + _filters.Add(filter); } public static void Load(XmlElement xml) @@ -52,9 +52,9 @@ public static void Load(XmlElement xml) LocString name = (LocString) Convert.ToInt32(el.GetAttribute("name")); string enable = el.GetAttribute("enable"); - for (int i = 0; i < m_Filters.Count; i++) + for (int i = 0; i < _filters.Count; i++) { - Filter f = (Filter) m_Filters[i]; + Filter f = (Filter) _filters[i]; if (f.Name == name) { if (Convert.ToBoolean(enable)) @@ -71,15 +71,15 @@ public static void Load(XmlElement xml) public static void DisableAll() { - for (int i = 0; i < m_Filters.Count; i++) - ((Filter) m_Filters[i]).OnDisable(); + for (int i = 0; i < _filters.Count; i++) + ((Filter) _filters[i]).OnDisable(); } public static void Save(XmlTextWriter xml) { - for (int i = 0; i < m_Filters.Count; i++) + for (int i = 0; i < _filters.Count; i++) { - Filter f = (Filter) m_Filters[i]; + Filter f = (Filter) _filters[i]; if (f.Enabled) { xml.WriteStartElement("filter"); @@ -96,10 +96,10 @@ public static void Save(XmlTextWriter xml) public bool Enabled { - get { return m_Enabled; } + get { return _enabled; } set { - if (value == m_Enabled) + if (value == _enabled) return; if (value) @@ -109,13 +109,13 @@ public bool Enabled } } - private bool m_Enabled; - private PacketViewerCallback m_Callback; + private bool _enabled; + private PacketViewerCallback _callback; protected Filter() { - m_Enabled = false; - m_Callback = new PacketViewerCallback(this.OnFilter); + _enabled = false; + _callback = new PacketViewerCallback(this.OnFilter); } public override string ToString() @@ -125,16 +125,16 @@ public override string ToString() public virtual void OnEnable() { - m_Enabled = true; + _enabled = true; for (int i = 0; i < PacketIDs.Length; i++) - PacketHandler.RegisterServerToClientViewer(PacketIDs[i], m_Callback); + PacketHandler.RegisterServerToClientViewer(PacketIDs[i], _callback); } public virtual void OnDisable() { - m_Enabled = false; + _enabled = false; for (int i = 0; i < PacketIDs.Length; i++) - PacketHandler.RemoveServerToClientViewer(PacketIDs[i], m_Callback); + PacketHandler.RemoveServerToClientViewer(PacketIDs[i], _callback); } } } \ No newline at end of file