public static TabRecord DrawTabs(Rect baseRect, List <TabRecord> tabs, float maxTabWidth = 200f) { TabRecord tabRecord = null; TabRecord tabRecord2 = tabs.Find((TabRecord t) => t.Selected); float num = baseRect.width + (float)(tabs.Count - 1) * 10f; float tabWidth = num / (float)tabs.Count; if (tabWidth > maxTabWidth) { tabWidth = maxTabWidth; } Rect position = new Rect(baseRect); position.y -= 32f; position.height = 9999f; GUI.BeginGroup(position); Text.Anchor = TextAnchor.MiddleCenter; Text.Font = GameFont.Small; Func <TabRecord, Rect> func = (TabRecord tab) => new Rect((float)tabs.IndexOf(tab) * (tabWidth - 10f), 1f, tabWidth, 32f); List <TabRecord> list = tabs.ListFullCopy(); if (tabRecord2 != null) { list.Remove(tabRecord2); list.Add(tabRecord2); } TabRecord tabRecord3 = null; List <TabRecord> list2 = list.ListFullCopy(); list2.Reverse(); for (int i = 0; i < list2.Count; i++) { TabRecord tabRecord4 = list2[i]; Rect rect = func(tabRecord4); if (tabRecord3 == null && Mouse.IsOver(rect)) { tabRecord3 = tabRecord4; } MouseoverSounds.DoRegion(rect, SoundDefOf.Mouseover_Tab); if (Widgets.ButtonInvisible(rect)) { tabRecord = tabRecord4; } } foreach (TabRecord item in list) { Rect rect2 = func(item); item.Draw(rect2); } Text.Anchor = TextAnchor.UpperLeft; GUI.EndGroup(); if (tabRecord != null && tabRecord != tabRecord2) { SoundDefOf.RowTabSelect.PlayOneShotOnCamera(); if (tabRecord.clickedAction != null) { tabRecord.clickedAction(); } } return(tabRecord); }
public static TabRecord DrawTabs(Rect baseRect, IEnumerable <TabRecord> tabsEnum) { TabDrawer.tabList.Clear(); foreach (TabRecord item in tabsEnum) { TabDrawer.tabList.Add(item); } TabRecord tabRecord = null; TabRecord tabRecord2 = (from t in TabDrawer.tabList where t.selected select t).FirstOrDefault(); if (tabRecord2 == null) { Log.ErrorOnce("Drew tabs without any being selected.", 5509712); return(TabDrawer.tabList[0]); } float num = (float)(baseRect.width + (float)(TabDrawer.tabList.Count - 1) * 10.0); float tabWidth = num / (float)TabDrawer.tabList.Count; if (tabWidth > 200.0) { tabWidth = 200f; } Rect position = new Rect(baseRect); position.y -= 32f; position.height = 9999f; GUI.BeginGroup(position); Text.Anchor = TextAnchor.MiddleCenter; Text.Font = GameFont.Small; Func <TabRecord, Rect> func = delegate(TabRecord tab) { int num2 = TabDrawer.tabList.IndexOf(tab); float x = (float)((float)num2 * (tabWidth - 10.0)); return(new Rect(x, 1f, tabWidth, 32f)); }; List <TabRecord> list = TabDrawer.tabList.ListFullCopy(); list.Remove(tabRecord2); list.Add(tabRecord2); TabRecord tabRecord3 = null; List <TabRecord> list2 = list.ListFullCopy(); list2.Reverse(); for (int i = 0; i < list2.Count; i++) { TabRecord tabRecord4 = list2[i]; Rect rect = func(tabRecord4); if (tabRecord3 == null && Mouse.IsOver(rect)) { tabRecord3 = tabRecord4; } MouseoverSounds.DoRegion(rect, SoundDefOf.MouseoverTab); if (Widgets.ButtonInvisible(rect, false)) { tabRecord = tabRecord4; } } foreach (TabRecord item2 in list) { Rect rect2 = func(item2); item2.Draw(rect2); } Text.Anchor = TextAnchor.UpperLeft; GUI.EndGroup(); if (tabRecord != null && tabRecord != tabRecord2) { SoundDefOf.RowTabSelect.PlayOneShotOnCamera(null); if (tabRecord.clickedAction != null) { tabRecord.clickedAction(); } } return(tabRecord); }