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);
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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);
                }
            }
        }
Exemple #6
0
 // 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();
        }
Exemple #9
0
        public static void Before_DoCategoryChildren(ref TreeNode_ThingCategory node)
        {
            if (projections.Count == 0)
            {
                return;
            }

            node = projections.Dequeue()(node);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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;
            }
        }
Exemple #12
0
 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);
 }
Exemple #14
0
 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);
         }
     }
 }
Exemple #15
0
        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);
        }
Exemple #20
0
        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);
                }
            }
        }
Exemple #21
0
        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);
                }
            }
        }
Exemple #22
0
        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);
        }
Exemple #23
0
        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();
        }
Exemple #24
0
        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();
        }