From ac7c25efa38586d0f76f2173af62743c90414683 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Jul 2011 15:29:35 +1200 Subject: [PATCH] Prioritize alerted tabs when switching group / via hotkey. --- .../Widgets/ProductionTabsWidget.cs | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs b/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs index 4a87588b5c..42ef4044c2 100755 --- a/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs @@ -90,6 +90,22 @@ namespace OpenRA.Mods.Cnc.Widgets Widget.RootWidget.GetWidget(PaletteWidget)); } + public void SelectNextTab(bool reverse) + { + if (queueGroup == null) + return; + + // Prioritize alerted queues + var queues = Groups[queueGroup].Tabs.Select(t => t.Queue) + .OrderByDescending(q => q.CurrentDone ? 1 : 0) + .ToList(); + + if (reverse) queues.Reverse(); + + CurrentQueue = queues.SkipWhile(q => q != CurrentQueue) + .Skip(1).FirstOrDefault() ?? queues.FirstOrDefault(); + } + public string QueueGroup { get @@ -99,9 +115,8 @@ namespace OpenRA.Mods.Cnc.Widgets set { ListOffset = 0; - - // TODO: prioritize alerted tabs - CurrentQueue = Groups[value].Tabs[0].Queue; + queueGroup = value; + SelectNextTab(false); } } @@ -184,16 +199,12 @@ namespace OpenRA.Mods.Cnc.Widgets // Queue destroyed, was last of type: switch to a new group if (Groups[queueGroup].Tabs.Count == 0) - { - // Find a new group - var qg = Groups.Where(g => g.Value.Tabs.Count > 0) + QueueGroup = Groups.Where(g => g.Value.Tabs.Count > 0) .Select(g => g.Key).FirstOrDefault(); - CurrentQueue = qg != null ? Groups[qg].Tabs[0].Queue : null; - } // Queue destroyed, others of same type: switch to another tab else if (!Groups[queueGroup].Tabs.Select(t => t.Queue).Contains(CurrentQueue)) - CurrentQueue = Groups[queueGroup].Tabs[0].Queue; + SelectNextTab(false); } } @@ -272,19 +283,5 @@ namespace OpenRA.Mods.Cnc.Widgets return false; } - - public void SelectNextTab(bool reverse) - { - if (queueGroup == null) - return; - - var tabs = Groups[queueGroup].Tabs.ToList(); - if (reverse) tabs.Reverse(); - - var tab = tabs.SkipWhile(q => q.Queue != CurrentQueue) - .Skip(1).FirstOrDefault() ?? tabs.FirstOrDefault(); - - CurrentQueue = tab != null ? tab.Queue : null; - } } }