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/Core/OverheadManager.cs b/Razor/Core/OverheadManager.cs index db8fec57..2e12e65f 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 readonly List _overheadMessages = new List(); + public static IReadOnlyList OverheadMessages + { + get { return _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); + _overheadMessages.Add(overheadMessage); } } catch @@ -86,7 +79,7 @@ public static void Load(XmlElement node) public static void ClearAll() { - OverheadMessages.Clear(); + _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); + _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) + { + _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/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 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/Filters/Filter.cs b/Razor/Filters/Filter.cs index 324962bc..0e2e692f 100644 --- a/Razor/Filters/Filter.cs +++ b/Razor/Filters/Filter.cs @@ -19,24 +19,23 @@ #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 readonly List _filters = new List(); - public static ArrayList 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) @@ -53,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)) @@ -72,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"); @@ -91,37 +90,32 @@ 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; } public bool Enabled { - get { return m_Enabled; } + get { return _enabled; } + set + { + if (value == _enabled) + return; + + if (value) + OnEnable(); + else + OnDisable(); + } } - 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() @@ -131,24 +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); - } - - public void OnCheckChanged(CheckState newValue) - { - if (Enabled && newValue == CheckState.Unchecked) - OnDisable(); - else if (!Enabled && newValue == CheckState.Checked) - OnEnable(); + PacketHandler.RemoveServerToClientViewer(PacketIDs[i], _callback); } } } \ No newline at end of file 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/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/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(); } diff --git a/Razor/UI/Razor.cs b/Razor/UI/Razor.cs index 9adb8787..5b49b886 100644 --- a/Razor/UI/Razor.cs +++ b/Razor/UI/Razor.cs @@ -74,12 +74,14 @@ private void MainForm_StartLoad(object sender, System.EventArgs e) FriendsManager.SetControls(friendsGroup, friendsList); DressList.SetControls(dressList, dressItems); - TargetFilterManager.SetControls(targetFilter); - SoundMusicManager.SetControls(soundFilterList, playableMusicList); + TargetFilterManager.OnItemsChanged += this.RefreshTargetFilters; + TargetFilterManager.OnAddFriendTarget += this.OnFriendTargetFilterAdd; + SoundMusicManager.OnPlayableMusicChanged += this.RefreshMusicList; + SoundMusicManager.OnSoundFiltersChanged += this.RefreshSoundFilter; ScriptManager.SetControls(scriptEditor, scriptTree, scriptVariables); - WaypointManager.SetControls(waypointList); - OverheadManager.SetControls(cliLocOverheadView); - TextFilterManager.SetControls(textFilterList); + WaypointManager.OnWaypointsChanged += this.RefreshWaypoints; + WaypointManager.ResetTimer(); + TextFilterManager.OnItemsChanged += this.RefreshTextFilters; bool st = Config.GetBool("Systray"); taskbar.Checked = this.ShowInTaskbar = !st; @@ -612,6 +614,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 +639,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 +962,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) @@ -6931,13 +6947,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,19 +7015,100 @@ 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 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 RefreshTextFilters() + { + UpdateListBox(textFilterList, TextFilterManager.FilteredText); + } + + 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) { - TextFilterManager.RedrawList(); + RefreshTextFilters(); } else if (filterTabs.SelectedTab == subFilterSoundMusic) { - SoundMusicManager.RedrawList(); + RefreshMusicList(); + RefreshSoundFilter(); } } @@ -7058,33 +7160,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 +7198,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 +7218,7 @@ private void setColorHue_Click(object sender, EventArgs e) { if (cliLocOverheadView.SelectedItems.Count > 0) { - OverheadManager.SetOverheadHue(); + SetOverheadMessageHue(); } } @@ -7166,16 +7250,61 @@ 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) { - WaypointManager.RedrawList(); + RefreshWaypoints(); } }