From 0e4e9a2840f214b0ca3a4a124a6206e5a5e475cb Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Fri, 26 Feb 2021 18:12:12 +1000 Subject: [PATCH] Refactor PathConfig.DoTabs and helpers --- .../config/PathConfig.cs | 76 ++++++------------- 1 file changed, 25 insertions(+), 51 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/config/PathConfig.cs b/src/BizHawk.Client.EmuHawk/config/PathConfig.cs index e08229a2c4..605c56d7d9 100644 --- a/src/BizHawk.Client.EmuHawk/config/PathConfig.cs +++ b/src/BizHawk.Client.EmuHawk/config/PathConfig.cs @@ -69,51 +69,12 @@ namespace BizHawk.Client.EmuHawk { RecentForROMs.Checked = _pathEntries.UseRecentForRoms; - DoTabs(_pathEntries.ToList()); - SetDefaultFocusedTab(); + DoTabs(_pathEntries.ToList(), _game.System); DoRomToggle(); } - private void SetDefaultFocusedTab() + private void DoTabs(IList pathCollection, string focusTabOfSystem) { - var tab = FindTabByName(_game.System); - if (tab != null) - { - PathTabControl.SelectTab(tab); - } - } - - private TabPage FindTabByName(string name) - { - var global = PathTabControl.TabPages - .OfType() - .First(tp => tp.Name.ToUpper().Contains("GLOBAL")); - - return PathTabControl.TabPages - .OfType() - .FirstOrDefault(tp => tp.Name.ToUpper().StartsWith(name.ToUpper())) - ?? global; - } - - private void DoTabs(List pathCollection) - { - PathTabControl.Visible = false; - PathTabControl.TabPages.Clear(); - - // Separate by system - var systems = _pathEntries - .Select(s => s.SystemDisplayName) - .Distinct() - .ToList(); - systems.Sort(); - - // Hacky way to put global first - var global = systems.FirstOrDefault(s => s == "Global"); - systems.Remove(global); - systems.Insert(0, global); - - var tabPages = new List(systems.Count); - int x = UIHelper.ScaleX(6); int textBoxWidth = UIHelper.ScaleX(70); int padding = UIHelper.ScaleX(5); @@ -123,18 +84,17 @@ namespace BizHawk.Client.EmuHawk int widgetOffset = UIHelper.ScaleX(85); int rowHeight = UIHelper.ScaleY(30); - foreach (var systemDisplayName in systems) + void AddTabPageForSystem(string system, string systemDisplayName) { - var systemId = _pathEntries.First(p => p.SystemDisplayName == systemDisplayName).System; var t = new TabPage { + Name = system, Text = systemDisplayName, - Name = systemId, Width = UIHelper.ScaleX(200), // Initial Left/Width of child controls are based on this size. AutoScroll = true }; var paths = pathCollection - .Where(p => p.System == systemId) + .Where(p => p.System == system) .OrderBy(p => p.Ordinal) .ThenBy(p => p.Type); @@ -215,10 +175,27 @@ namespace BizHawk.Client.EmuHawk y += rowHeight; } - tabPages.Add(t); + PathTabControl.TabPages.Add(t); + if (system == focusTabOfSystem || system.Split('_').Contains(focusTabOfSystem)) + { + PathTabControl.SelectTab(PathTabControl.TabPages.Count - 1); + } } - PathTabControl.TabPages.AddRange(tabPages.ToArray()); + PathTabControl.Visible = false; + + PathTabControl.TabPages.Clear(); + var systems = _pathEntries.Select(e => e.System).Distinct() // group entries by "system" (intentionally using instance field here, not parameter) + .Select(sys => (sys, _pathEntries.First(p => p.System == sys).SystemDisplayName)) + .OrderBy(tuple => tuple.Item2) // sorted alphabetically by display name + .ToList(); + // add the Global tab first... + const string idGlobal = "Global_NULL"; + systems.RemoveAll(tuple => tuple.Item1 == idGlobal); + AddTabPageForSystem(idGlobal, _pathEntries.First(p => p.System == idGlobal).SystemDisplayName); + // ...then continue with the others + foreach (var (sys, dispName) in systems) AddTabPageForSystem(sys, dispName); + PathTabControl.Visible = true; } @@ -330,10 +307,7 @@ namespace BizHawk.Client.EmuHawk } private void DefaultsBtn_Click(object sender, EventArgs e) - { - DoTabs(PathEntryCollection.DefaultValues); - SetDefaultFocusedTab(); - } + => DoTabs(PathEntryCollection.DefaultValues, "Global_NULL"); private void Ok_Click(object sender, EventArgs e) {