Ejemplo n.º 1
0
        private static void SaveThreeStateItemContainerOrdered <T>(XContainer xRoot, string containerName, string entryName,
                                                                   ThreeStateItemContainerOrdered <T> container) where T : Def
        {
            if (container.IsInDefaultState())
            {
                return;
            }

            var xContainerElement = new XElement(containerName);

            xRoot.Add(xContainerElement);

            xContainerElement.Add(new XElement("FilterBooleanState", container.FilterBooleanState));
            xContainerElement.Add(new XElement("OffPartialNoSelect", container.OffPartialNoSelect));
            xContainerElement.Add(new XElement("OrderedFiltering", container.OrderedFiltering));

            foreach (var def in container.OrderedItems)
            {
                if (!container.TryGetValue(def, out var threeStateItem))
                {
                    // shouldn't happen, but just a defensive check
                    Log.Error($"[PrepareLanding] The def '{def.defName}' doesn't exit in the given dictionary.");
                    continue;
                }
                var xEntry = new XElement(entryName);
                xEntry.Add(new XElement(DefNameNode, def.defName));
                xEntry.Add(new XElement(StateNode, threeStateItem.State.ToString()));
                xContainerElement.Add(xEntry);
            }
        }
Ejemplo n.º 2
0
        private void LoadThreeStateItemContainerOrdered <T>(XContainer xParent, string elementName, string entryName,
                                                            ThreeStateItemContainerOrdered <T> container) where T : Def
        {
            var xFoundElement = xParent.Element(elementName);

            if (xFoundElement == null)
            {
                return;
            }

            container.FilterBooleanState = LoadEnum <FilterBoolean>(xFoundElement, "FilterBooleanState");
            LoadBoolean(xFoundElement, "OffPartialNoSelect", b => container.OffPartialNoSelect = b);
            LoadBoolean(xFoundElement, "OrderedFiltering", b => container.OrderedFiltering     = b);

            var orderedList = new List <T>();

            foreach (var xElement in xFoundElement.Elements(entryName))
            {
                var xDefName = xElement.Element(DefNameNode);
                if (xDefName == null)
                {
                    goto EnsureAllEntriesPresent;
                }

                var def = LoadDef <T>(xElement, DefNameNode) as T;
                if (def == null)
                {
                    goto EnsureAllEntriesPresent;
                }

                orderedList.Add(def);

                if (!container.TryGetValue(def, out var threeStateItem))
                {
                    goto EnsureAllEntriesPresent;
                }

                var state = LoadEnum <MultiCheckboxState>(xElement, StateNode);
                threeStateItem.State = state;
            }

EnsureAllEntriesPresent:
            foreach (var entry in container)
            {
                if (orderedList.Contains(entry.Key))
                {
                    continue;
                }

                orderedList.Add(entry.Key);
            }

            container.SetNewOrder(orderedList);
        }