private void CalculateHiddenSpecialFilters(TreeNode_ThingCategory node) { hiddenSpecialFilters = new List <SpecialThingFilterDef>(); if (tempForceHiddenSpecialFilters != null) { hiddenSpecialFilters.AddRange(tempForceHiddenSpecialFilters); } var enumerable = node.catDef.ParentsSpecialThingFilterDefs.Concat(node.catDef.DescendantSpecialThingFilterDefs); var enumerable2 = node.catDef.DescendantThingDefs; if (parentFilter != null) { enumerable2 = from x in enumerable2 where parentFilter.Allows(x) select x; } foreach (var specialThingFilterDef in enumerable) { var flag = false; foreach (var def in enumerable2) { if (specialThingFilterDef.Worker.CanEverMatch(def)) { flag = true; break; } } if (!flag) { hiddenSpecialFilters.Add(specialThingFilterDef); } } }
public static bool FilterNodes_Prefix(SearchTerm __instance, TreeNode_ThingCategory node, ref TreeNode_ThingCategory __result) { //if (!string.IsNullOrEmpty(__instance.Value) && __instance.Value.Length >= 3) // return true; // call original var s = __instance.Value; if (!s?.Equals(_prevValue) ?? true) { _sw.Restart(); _prevValue = s; } if (string.IsNullOrEmpty(s)) { return(true); } if (s.Length >= 3 || _sw.Elapsed.TotalMilliseconds > 500) { return(true); } __result = node; return(false); }
private static void SetAllowInCategory(Listing_TreeThingFilter instance, TreeNode_ThingCategory node, bool allow, List <ThingDef> exceptedDefs, List <SpecialThingFilterDef> exceptedFilters) { ThingFilter filter = fieldFilter.GetValue(instance) as ThingFilter; ThingCategoryDef categoryDef = node.catDef; if (!ThingCategoryNodeDatabase.initialized) { Log.Error("SetAllow categories won't work before ThingCategoryDatabase is initialized.", false); } foreach (ThingDef thingDef in categoryDef.DescendantThingDefs) { if ((exceptedDefs == null || !exceptedDefs.Contains(thingDef)) && SearchUtility.CheckVisible(thingDef)) { if (SearchUtility.CheckVisible(thingDef)) { filter.SetAllow(thingDef, allow); } } } foreach (SpecialThingFilterDef specialThingFilterDef in categoryDef.DescendantSpecialThingFilterDefs) { if (exceptedFilters == null || !exceptedFilters.Contains(specialThingFilterDef)) { filter.SetAllow(specialThingFilterDef, allow); } } (fieldSettingsChangedCallback.GetValue(filter) as Action)?.Invoke(); }
public void DoCategory(TreeNode_ThingCategory node, int nestLevel, int openMask) { int countIn = this.map.resourceCounter.GetCountIn(node.catDef); if (countIn != 0) { base.OpenCloseWidget(node, nestLevel, openMask); Rect rect = new Rect(0f, base.curY, this.LabelWidth, base.lineHeight); rect.xMin = (float)(base.XAtIndentLevel(nestLevel) + 18.0); Rect position = rect; position.width = 80f; position.yMax -= 3f; position.yMin += 3f; GUI.DrawTexture(position, Listing_ResourceReadout.SolidCategoryBG); if (Mouse.IsOver(rect)) { GUI.DrawTexture(rect, TexUI.HighlightTex); } TooltipHandler.TipRegion(rect, new TipSignal(node.catDef.LabelCap, node.catDef.GetHashCode())); Rect position2 = new Rect(rect); float num3 = position2.width = (position2.height = 28f); position2.y = (float)(rect.y + rect.height / 2.0 - position2.height / 2.0); GUI.DrawTexture(position2, node.catDef.icon); Rect rect2 = new Rect(rect); rect2.xMin = (float)(position2.xMax + 6.0); Widgets.Label(rect2, countIn.ToStringCached()); base.EndLine(); if (node.IsOpen(openMask)) { this.DoCategoryChildren(node, nestLevel + 1, openMask); } } }
public void DoCategoryChildren(TreeNode_ThingCategory node, int indentLevel, int openMask, Map map, bool isRoot = false) { // public void EndLine() => this.curY += this.lineHeight + this.verticalSpacing; if (isRoot) { foreach (var sfDef in node.catDef.ParentsSpecialThingFilterDefs) { if (curY > listingRect.height) { break; // if Y > MAX HEIGHT } if (Visible_NewTemp(sfDef, node)) { DoSpecialFilter(sfDef, indentLevel); } } } var childSpecialFilters = node.catDef.childSpecialFilters; for (var i = 0; i < childSpecialFilters.Count; i++) { if (curY > listingRect.height) { break; // if Y > MAX HEIGHT } if (Visible_NewTemp(childSpecialFilters[i], node)) { DoSpecialFilter(childSpecialFilters[i], indentLevel); } } foreach (var node2 in node.ChildCategoryNodes) { if (curY > listingRect.height) { break; // if Y > MAX HEIGHT } if (Visible(node2)) { DoCategory(node2, indentLevel, openMask, map); } } foreach (var thingDef in from n in node.catDef.childThingDefs orderby n.label select n) { if (curY > listingRect.height) { break; // if Y > MAX HEIGHT } if (Visible(thingDef)) { DoThingDef(thingDef, indentLevel, map); } } }
// exact copy of Verse.ThingCategoryNodeDatabase.SetNestLevelRecursive (Tynan, pls). private static void SetNestLevelRecursive(TreeNode_ThingCategory node, int nestDepth) { foreach (ThingCategoryDef current in node.catDef.childCategories) { current.treeNode.nestDepth = nestDepth; SetNestLevelRecursive(current.treeNode, nestDepth + 1); } }
// exact copy of Verse.ThingCategoryNodeDatabase.SetNestLevelRecursive (Tynan, pls). private static void SetNestLevelRecursive( TreeNode_ThingCategory node, int nestDepth ) { foreach( ThingCategoryDef current in node.catDef.childCategories ) { current.treeNode.nestDepth = nestDepth; SetNestLevelRecursive( current.treeNode, nestDepth + 1 ); } }
public static void DoThingFilterConfigWindow(Rect rect, ref Vector2 scrollPosition, ThingFilter filter, ThingFilter parentFilter = null, int openMask = 1, string filterText = null) { Widgets.DrawMenuSection(rect, true); Text.Font = GameFont.Tiny; float num = rect.width - 2f; Rect rect2 = new Rect(rect.x + 1f, rect.y + 1f, num / 2f, 24f); if (Widgets.TextButton(rect2, "ClearAll".Translate(), true, false)) { filter.SetDisallowAll(); } Rect rect3 = new Rect(rect2.xMax + 1f, rect2.y, num / 2f, 24f); if (Widgets.TextButton(rect3, "AllowAll".Translate(), true, false)) { filter.SetAllowAll(parentFilter); } Text.Font = GameFont.Small; rect.yMin = rect2.yMax; Rect viewRect = new Rect(0f, 0f, rect.width - 16f, HelperThingFilterUI.viewHeight); Widgets.BeginScrollView(rect, ref scrollPosition, viewRect); float num2 = 0f; num2 += 2f; HelperThingFilterUI.DrawHitPointsFilterConfig(ref num2, viewRect.width, filter); HelperThingFilterUI.DrawQualityFilterConfig(ref num2, viewRect.width, filter); float num3 = num2; Rect rect4 = new Rect(0f, num2, 9999f, 9999f); Listing_TreeThingFilter listing_TreeThingFilter = new Listing_TreeThingFilter(rect4, filter, parentFilter, 210f, true); TreeNode_ThingCategory node = ThingCategoryNodeDatabase.RootNode; if (parentFilter != null) { if (parentFilter.DisplayRootCategory == null) { parentFilter.RecalculateDisplayRootCategory(); } node = parentFilter.DisplayRootCategory; } if (filterText != null && filterText.Length > 2) { var rootNode = new TreeNode_ThingCategory(new ThingCategoryDef()); node.catDef.DescendantThingDefs.Where(td => td.label.ToLower().Contains(filterText.ToLower())); foreach (ThingDef currentThing in node.catDef.DescendantThingDefs.Where(td => td.label.ToLower().Contains(filterText.ToLower()))) { rootNode.catDef.childThingDefs.Add(currentThing); } node = rootNode; } listing_TreeThingFilter.DoCategoryChildren(node, 0, openMask, true); listing_TreeThingFilter.End(); if (Event.current.type == EventType.Layout) { HelperThingFilterUI.viewHeight = num3 + listing_TreeThingFilter.CurHeight + 90f; } Widgets.EndScrollView(); }
public static void Before_DoCategoryChildren(ref TreeNode_ThingCategory node) { if (projections.Count == 0) { return; } node = projections.Dequeue()(node); }
public static void Before_DoCategoryChildren(ref TreeNode_ThingCategory node, int indentLevel, int openMask, Map map, bool subtreeMatchedSearch) { if (projections.Count == 0) { return; } node = projections.Dequeue()(node); }
public static void DoThingFilterConfigWindow(Rect rect, ref Vector2 scrollPosition, ref ThingFilter filter, ThingFilter parentFilter = null, ThingFilter defaultFilter = null, int openMask = 1) { Widgets.DrawMenuSection(rect); Text.Font = GameFont.Tiny; float num = rect.width - 2f; Rect rect2 = new Rect(rect.x + 1f, rect.y + 1f, num / 2f, buttonHeight); if (Widgets.ButtonText(rect2, "ClearAll".Translate(), true, false, true)) { filter.SetDisallowAll(null, null); SoundDefOf.Checkbox_TurnedOff.PlayOneShotOnCamera(null); } Rect rect3 = new Rect(rect2.xMax + 1f, rect2.y, rect.xMax - 1f - (rect2.xMax + 1f), buttonHeight); if (Widgets.ButtonText(rect3, "AllowAll".Translate(), true, false, true)) { filter.SetAllowAll(parentFilter); SoundDefOf.Checkbox_TurnedOn.PlayOneShotOnCamera(null); } Text.Font = GameFont.Small; rect.yMin = rect2.yMax; TreeNode_ThingCategory node = ThingCategoryNodeDatabase.RootNode; if (parentFilter != null) { node = parentFilter.DisplayRootCategory; } Rect viewRect = new Rect(0f, 0f, rect.width - 17f, viewHeight); Rect scrollrect = new Rect(rect.x, rect.y, rect.width - 1f, rect.height - buttonHeight - 1f); Widgets.BeginScrollView(scrollrect, ref scrollPosition, viewRect, true); float num2 = 2f; float num3 = num2; Rect rect4 = new Rect(0f, num2, viewRect.width, 9999f); Listing_TreeThingFilter listing_TreeThingFilter = new Listing_TreeThingFilter(filter, parentFilter, null, null, null); listing_TreeThingFilter.Begin(rect4); listing_TreeThingFilter.DoCategoryChildren(node, 0, openMask, null, true); listing_TreeThingFilter.End(); if (Event.current.type == EventType.Layout) { viewHeight = num3 + listing_TreeThingFilter.CurHeight + 90f; } Widgets.EndScrollView(); Rect buttonRect = new Rect(rect.x + 1f, rect.y + 1f, num, buttonHeight); buttonRect.height = 24f; buttonRect.position = new Vector2(buttonRect.position.x, rect.yMax - buttonHeight - 1f); bool clicked = Widgets.ButtonText(buttonRect, "Reset"); if (clicked && defaultFilter != null) { filter = defaultFilter; } }
public void OpenAll(TreeNode_ThingCategory node, int nestLevel, int openMask) { node.SetOpen(openMask, true); foreach (TreeNode_ThingCategory current in node.ChildCategoryNodes) { if (!current.catDef.resourceReadoutRoot) { OpenAll(current, nestLevel + 1, openMask); } } }
public static bool DoCategory(TreeNode_ThingCategory node, int indentLevel, int openMask, Map map) { if (!InDoThingFilterConfigWindow || InViewArea) { return(true); } ThingFilterOptimizerMod.DbgLog("SKIP"); l.EndLine(); if (node.IsOpen(openMask)) { l.DoCategoryChildren(node, indentLevel + 1, openMask, map); } return(false); }
public void DoCategoryChildren(TreeNode_ThingCategory node, int indentLevel, int openMask) { foreach (TreeNode_ThingCategory current in node.ChildCategoryNodes) { if (!current.catDef.resourceReadoutRoot) { this.DoCategory(current, indentLevel, openMask); } } foreach (ThingDef current2 in node.catDef.childThingDefs) { if (!current2.menuHidden) { this.DoThingDef(current2, indentLevel + 1); } } }
public static void DoThingFilterConfigWindow(Rect rect, ref Vector2 scrollPosition, ThingFilter filter, ThingFilter parentFilter = null, int openMask = 1, IEnumerable <ThingDef> forceHiddenDefs = null, IEnumerable <SpecialThingFilterDef> forceHiddenFilters = null, List <ThingDef> suppressSmallVolumeTags = null) { Widgets.DrawMenuSection(rect); Text.Font = GameFont.Tiny; float num = rect.width - 2f; Rect rect2 = new Rect(rect.x + 1f, rect.y + 1f, num / 2f, 24f); if (Widgets.ButtonText(rect2, "ClearAll".Translate())) { filter.SetDisallowAll(forceHiddenDefs, forceHiddenFilters); } Rect rect3 = new Rect(rect2.xMax + 1f, rect2.y, rect.xMax - 1f - (rect2.xMax + 1f), 24f); if (Widgets.ButtonText(rect3, "AllowAll".Translate())) { filter.SetAllowAll(parentFilter); } Text.Font = GameFont.Small; rect.yMin = rect2.yMax; Rect viewRect = new Rect(0f, 0f, rect.width - 16f, viewHeight); Widgets.BeginScrollView(rect, ref scrollPosition, viewRect); float num2 = 2f; DrawHitPointsFilterConfig(ref num2, viewRect.width, filter); DrawQualityFilterConfig(ref num2, viewRect.width, filter); DrawMarketValueFilterConfig(ref num2, viewRect.width, filter); float num3 = num2; Rect rect4 = new Rect(0f, num2, viewRect.width, 9999f); Listing_TreeThingFilter listing_TreeThingFilter = new Listing_TreeThingFilter(filter, parentFilter, forceHiddenDefs, forceHiddenFilters, suppressSmallVolumeTags); listing_TreeThingFilter.Begin(rect4); TreeNode_ThingCategory node = ThingCategoryNodeDatabase.RootNode; if (parentFilter != null) { node = parentFilter.DisplayRootCategory; } listing_TreeThingFilter.DoCategoryChildren(node, 0, openMask, true); listing_TreeThingFilter.End(); if (Event.current.type == EventType.Layout) { viewHeight = num3 + listing_TreeThingFilter.CurHeight + 90f; } Widgets.EndScrollView(); }
public void DoCategoryChildren(TreeNode_ThingCategory node, int indentLevel, int openMask) { foreach (TreeNode_ThingCategory treeNode_ThingCategory in node.ChildCategoryNodes) { if (!treeNode_ThingCategory.catDef.resourceReadoutRoot) { this.DoCategory(treeNode_ThingCategory, indentLevel, openMask); } } foreach (ThingDef thingDef in node.catDef.childThingDefs) { if (!thingDef.menuHidden) { this.DoThingDef(thingDef, indentLevel + 1); } } }
private bool Visible_NewTemp(SpecialThingFilterDef filter, TreeNode_ThingCategory node) { if (parentFilter != null && !parentFilter.Allows(filter)) { return(false); } if (hiddenSpecialFilters == null) { CalculateHiddenSpecialFilters(node); } for (var i = 0; i < hiddenSpecialFilters.Count; i++) { if (hiddenSpecialFilters[i] == filter) { return(false); } } return(true); }
public void DoCategory(TreeNode_ThingCategory node, int indentLevel, int openMask, Map map) { if (InViewArea) { OpenCloseWidget(node, indentLevel, openMask); LabelLeft(node.LabelCap, node.catDef.description, indentLevel); var multiCheckboxState = AllowanceStateOf(node); var multiCheckboxState2 = Widgets.CheckboxMulti(new Rect(LabelWidth, curY, lineHeight, lineHeight), multiCheckboxState, true); if (multiCheckboxState != multiCheckboxState2) { filter.SetAllow(node.catDef, multiCheckboxState2 == MultiCheckboxState.On, forceHiddenDefs, hiddenSpecialFilters); } } EndLine(); if (node.IsOpen(openMask)) { DoCategoryChildren(node, indentLevel + 1, openMask, map); } }
public MultiCheckboxState AllowanceStateOf(TreeNode_ThingCategory cat) { var num = 0; var num2 = 0; foreach (var thingDef in cat.catDef.DescendantThingDefs) { if (Visible(thingDef)) { num++; if (filter.Allows(thingDef)) { num2++; } } } var flag = false; foreach (var sf in cat.catDef.DescendantSpecialThingFilterDefs) { if (Visible_NewTemp(sf, cat) && !filter.Allows(sf)) { flag = true; break; } } if (num2 == 0) { return(MultiCheckboxState.Off); } if (num == num2 && !flag) { return(MultiCheckboxState.On); } return(MultiCheckboxState.Partial); }
public void SaveTree(TreeNode_ThingCategory node, int nestLevel, int openMask) { if (node.Openable) { bool open = false; if (Scribe.mode == LoadSaveMode.Saving) { open = node.IsOpen(openMask); } //Try to load by old xml tag, just defName string xmlTag = node.catDef.defName; if (Scribe.mode == LoadSaveMode.LoadingVars) { Scribe_Values.Look(ref open, xmlTag); } if (!open || Scribe.mode == LoadSaveMode.Saving) { //From now on let's validate xml, and start with a letter for sure xmlTag = "open_" + Regex.Replace(xmlTag, "[^a-zA-Z0-9:.-_]", ""); Scribe_Values.Look(ref open, xmlTag); } if (Scribe.mode == LoadSaveMode.LoadingVars) { node.SetOpen(openMask, open); } } foreach (TreeNode_ThingCategory current in node.ChildCategoryNodes) { if (!current.catDef.resourceReadoutRoot) { SaveTree(current, nestLevel + 1, openMask); } } }
public void DoCategory(TreeNode_ThingCategory node, int nestLevel, int openMask) { int countIn = map.resourceCounter.GetCountIn(node.catDef); if (countIn != 0) { OpenCloseWidget(node, nestLevel, openMask); Rect rect = new Rect(0f, curY, LabelWidth, lineHeight); rect.xMin = XAtIndentLevel(nestLevel) + 18f; Rect position = rect; position.width = 80f; position.yMax -= 3f; position.yMin += 3f; GUI.DrawTexture(position, SolidCategoryBG); if (Mouse.IsOver(rect)) { GUI.DrawTexture(rect, TexUI.HighlightTex); } if (Mouse.IsOver(rect)) { TooltipHandler.TipRegion(rect, new TipSignal(node.catDef.LabelCap, node.catDef.GetHashCode())); } Rect position2 = new Rect(rect); float num3 = (position2.width = (position2.height = 28f)); position2.y = rect.y + rect.height / 2f - position2.height / 2f; GUI.DrawTexture(position2, node.catDef.icon); Rect rect2 = new Rect(rect); rect2.xMin = position2.xMax + 6f; Widgets.Label(rect2, countIn.ToStringCached()); EndLine(); if (node.IsOpen(openMask)) { DoCategoryChildren(node, nestLevel + 1, openMask); } } }
internal TreeNode_ThingCategory FilterNodes(TreeNode_ThingCategory node) { if (!string.IsNullOrEmpty(Value)) { TreeNode_ThingCategory rootNode = new TreeNode_ThingCategory(new ThingCategoryDef()); foreach (ThingDef currentThing in node.catDef.DescendantThingDefs.Where( td => td.label.IndexOf(Value, StringComparison.CurrentCultureIgnoreCase) != -1)) { rootNode.catDef.childThingDefs.Add(currentThing); if (Settings.IncludeParentCategory) { if (!rootNode.catDef.childCategories.Contains(currentThing.FirstThingCategory)) { rootNode.catDef.childCategories.Add(currentThing.FirstThingCategory); } } } node = rootNode; } return(node); }
public static void DoThingFilterConfigWindow(Rect rect, ref Vector2 scrollPosition, ThingFilter filter, ThingFilter parentFilter = null, int openMask = 1, string filterText = null) { Widgets.DrawMenuSection(rect, true); Text.Font = GameFont.Tiny; float num = rect.width - 2f; Rect rect2 = new Rect(rect.x + 1f, rect.y + 1f, num / 2f, 24f); if (Widgets.TextButton(rect2, "ClearAll".Translate(), true, false)) { filter.SetDisallowAll(); } Rect rect3 = new Rect(rect2.xMax + 1f, rect2.y, num / 2f, 24f); if (Widgets.TextButton(rect3, "AllowAll".Translate(), true, false)) { filter.SetAllowAll(parentFilter); } Text.Font = GameFont.Small; rect.yMin = rect2.yMax; Rect viewRect = new Rect(0f, 0f, rect.width - 16f, HelperThingFilterUI.viewHeight); Widgets.BeginScrollView(rect, ref scrollPosition, viewRect); float num2 = 0f; num2 += 2f; HelperThingFilterUI.DrawHitPointsFilterConfig(ref num2, viewRect.width, filter); HelperThingFilterUI.DrawQualityFilterConfig(ref num2, viewRect.width, filter); float num3 = num2; Rect rect4 = new Rect(0f, num2, 9999f, 9999f); Listing_TreeThingFilter listing_TreeThingFilter = new Listing_TreeThingFilter(rect4, filter, parentFilter, 210f, true); TreeNode_ThingCategory node = ThingCategoryNodeDatabase.RootNode; if (parentFilter != null) { if (parentFilter.DisplayRootCategory == null) { parentFilter.RecalculateDisplayRootCategory(); } node = parentFilter.DisplayRootCategory; } if (filterText != null && filterText.Length > 2) { var rootNode = new TreeNode_ThingCategory(new ThingCategoryDef()); node.catDef.DescendantThingDefs.Where(td => td.label.ToLower().Contains(filterText.ToLower())); foreach (ThingDef currentThing in node.catDef.DescendantThingDefs.Where(td => td.label.ToLower().Contains(filterText.ToLower()))) { rootNode.catDef.childThingDefs.Add(currentThing); } node = rootNode; } listing_TreeThingFilter.DoCategoryChildren(node, 0, openMask, true); listing_TreeThingFilter.End(); if (Event.current.type == EventType.Layout) { HelperThingFilterUI.viewHeight = num3 + listing_TreeThingFilter.CurHeight + 90f; } Widgets.EndScrollView(); }
public static void DoThingFilterConfigWindow(Rect rect, ref Vector2 scrollPosition, ThingFilter filter, ThingFilter parentFilter = null, int openMask = 1, IEnumerable <ThingDef> forceHiddenDefs = null, IEnumerable <SpecialThingFilterDef> forceHiddenFilters = null, string filterText = null) { Widgets.DrawMenuSection(rect, true); Text.Font = GameFont.Tiny; float num = rect.width - 2f; Rect rect2 = new Rect(rect.x + 1f, rect.y + 1f, num / 2f, 24f); if (Widgets.ButtonText(rect2, "ClearAll".Translate(), true, false, true)) { filter.SetDisallowAll(forceHiddenDefs, forceHiddenFilters); } if (Widgets.ButtonText(new Rect(rect2.xMax + 1f, rect2.y, num / 2f, 24f), "AllowAll".Translate(), true, false, true)) { filter.SetAllowAll(parentFilter); } Text.Font = GameFont.Small; rect.yMin = rect2.yMax; Rect viewRect = new Rect(0f, 0f, rect.width - 16f, HelperThingFilterUI.viewHeight); Widgets.BeginScrollView(rect, ref scrollPosition, viewRect); float num2 = 2f; HelperThingFilterUI.DrawHitPointsFilterConfig(ref num2, viewRect.width, filter); HelperThingFilterUI.DrawQualityFilterConfig(ref num2, viewRect.width, filter); float num3 = num2; Listing_TreeThingFilter listing_TreeThingFilter = new Listing_TreeThingFilter(new Rect(0f, num2, viewRect.width, 9999f), filter, parentFilter, forceHiddenDefs, forceHiddenFilters); TreeNode_ThingCategory treeNode_ThingCategory = ThingCategoryNodeDatabase.RootNode; if (parentFilter != null) { if (parentFilter.DisplayRootCategory == null) { parentFilter.RecalculateDisplayRootCategory(); } treeNode_ThingCategory = parentFilter.DisplayRootCategory; } if (filterText != null && filterText.Length > 0) { TreeNode_ThingCategory treeNode_ThingCategory2 = new TreeNode_ThingCategory(new ThingCategoryDef()); from td in treeNode_ThingCategory.catDef.DescendantThingDefs where td.label.ToLower().Contains(filterText.ToLower()) select td; IEnumerable <ThingDef> arg_1D5_0 = treeNode_ThingCategory.catDef.DescendantThingDefs; Func <ThingDef, bool> < > 9__1; Func <ThingDef, bool> arg_1D5_1; if ((arg_1D5_1 = < > 9__1) == null) { arg_1D5_1 = (< > 9__1 = ((ThingDef td) => td.label.ToLower().Contains(filterText.ToLower()))); } foreach (ThingDef current in arg_1D5_0.Where(arg_1D5_1)) { treeNode_ThingCategory2.catDef.childThingDefs.Add(current); } treeNode_ThingCategory = treeNode_ThingCategory2; } listing_TreeThingFilter.DoCategoryChildren(treeNode_ThingCategory, 0, openMask, true); listing_TreeThingFilter.End(); if (Event.current.type == EventType.Layout) { HelperThingFilterUI.viewHeight = num3 + listing_TreeThingFilter.CurHeight + 90f; } Widgets.EndScrollView(); }
private bool Visible(TreeNode_ThingCategory node) { return(node.catDef.DescendantThingDefs.Any(Visible)); }
public void DoThingFilterConfigWindow(Rect canvas, ref Vector2 scrollPosition, ThingFilter filter, ThingFilter parentFilter = null, int openMask = 1, bool buttonsAtBottom = false) { // respect your bounds! GUI.BeginGroup(canvas); canvas = canvas.AtZero(); // set up buttons Text.Font = GameFont.Tiny; float width = canvas.width - 2f; var clearButtonRect = new Rect(canvas.x + 1f, canvas.y + 1f, width / 2f, 24f); var allButtonRect = new Rect(clearButtonRect.xMax + 1f, clearButtonRect.y, width / 2f, 24f); // offset canvas position for buttons. if (buttonsAtBottom) { clearButtonRect.y = canvas.height - clearButtonRect.height; allButtonRect.y = canvas.height - clearButtonRect.height; canvas.yMax -= clearButtonRect.height; } else { canvas.yMin = clearButtonRect.height; } // draw buttons + logic if (Widgets.ButtonTextSubtle(clearButtonRect, "ClearAll".Translate())) { filter.SetDisallowAll(); } if (Widgets.ButtonTextSubtle(allButtonRect, "AllowAll".Translate())) { filter.SetAllowAll(parentFilter); } Text.Font = GameFont.Small; // do list var curY = 2f; var viewRect = new Rect(0f, 0f, canvas.width - ScrollbarWidth, viewHeight); // scrollview Widgets.BeginScrollView(canvas, ref scrollPosition, viewRect); // slider(s) DrawHitPointsFilterConfig(ref curY, viewRect.width, filter); DrawQualityFilterConfig(ref curY, viewRect.width, filter); // main listing var listingRect = new Rect(0f, curY, viewRect.width, 9999f); var listingTreeThingFilter = new Listing_TreeThingFilter(filter, parentFilter, null, null, null); listingTreeThingFilter.Begin(listingRect); TreeNode_ThingCategory node = ThingCategoryNodeDatabase.RootNode; if (parentFilter != null) { if (parentFilter.DisplayRootCategory == null) { parentFilter.RecalculateDisplayRootCategory(); } node = parentFilter.DisplayRootCategory; } // draw the actual thing listingTreeThingFilter.DoCategoryChildren(node, 0, openMask, Find.CurrentMap, true); listingTreeThingFilter.End(); // update height. viewHeight = curY + listingTreeThingFilter.CurHeight; Widgets.EndScrollView(); GUI.EndGroup(); }