private static void SaveMinMaxFromRestrictedList <T>(XContainer xRoot, string elementName, MinMaxFromRestrictedListItem <T> item) where T : struct, IConvertible { if (!item.Use) { return; } var xElement = new XElement(elementName); xRoot.Add(xElement); xElement.Add(new XElement(UseNode, item.Use)); xElement.Add(new XElement(MinNode, item.Min.ToString(CultureInfo.InvariantCulture))); xElement.Add(new XElement(MaxNode, item.Max.ToString(CultureInfo.InvariantCulture))); }
private static void LoadMinMaxFromRestrictedList <T>(XContainer xParent, string elementName, MinMaxFromRestrictedListItem <T> item) where T : struct, IConvertible { var xFoundElement = xParent.Element(elementName); var xUse = xFoundElement?.Element(UseNode); if (xUse == null) { return; } if (!Load(xFoundElement, UseNode, out bool use)) { return; } if (!use) { return; } item.Use = true; if (typeof(T).IsEnum) { // min if (!Load(xFoundElement, MinNode, out string value)) { return; } if (string.IsNullOrEmpty(value)) { item.Use = false; return; } item.Min = LoadEnum <T>(xFoundElement, MinNode); // max if (!Load(xFoundElement, MaxNode, out value)) { return; } if (string.IsNullOrEmpty(value)) { item.Use = false; return; } item.Max = LoadEnum <T>(xFoundElement, MaxNode); } else { if (!Load(xFoundElement, MinNode, out T value)) { return; } item.Min = value; if (!Load(xFoundElement, MaxNode, out value)) { return; } item.Max = value; } }
protected void DrawUsableMinMaxFromRestrictedListItem <T>(MinMaxFromRestrictedListItem <T> item, string label, Func <T, string> itemToStringFunc = null) where T : struct, IConvertible { var tmpCheckedOn = item.Use; var textMin = "PLINT_UsableMinMaxNumFieldMin".Translate(); var textMax = "PLINT_UsableMinMaxNumFieldMax".Translate(); // Use ListingStandard.Gap(); ListingStandard.CheckboxLabeled(label, ref tmpCheckedOn, $"{"PLINT_UsableMinMaxNumFieldUse".Translate()} {textMin}/{textMax} {label}"); item.Use = tmpCheckedOn; // MIN if (ListingStandard.ButtonText($"{"PLINT_UsableMinMaxNumFieldMin".Translate()} {label}")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var itemOption in item.Options) { var menuOptionString = itemToStringFunc == null ? itemOption.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(itemOption); var menuOption = new FloatMenuOption(menuOptionString, delegate { item.Min = itemOption; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, $"{"PLINT_MinMaxFromRestrictedListItemSelect".Translate()} {label}"); Find.WindowStack.Add(floatMenu); } var minValueString = itemToStringFunc == null ? item.Min.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(item.Min); ListingStandard.LabelDouble($"{"PLINT_UsableMinMaxNumFieldMin".Translate()} {label}:", minValueString); // MAX if (ListingStandard.ButtonText($"{"PLINT_UsableMinMaxNumFieldMax".Translate()} {label}")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var itemOption in item.Options) { var menuOptionString = itemToStringFunc == null ? itemOption.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(itemOption); var menuOption = new FloatMenuOption(menuOptionString, delegate { item.Max = itemOption; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, $"{"PLINT_MinMaxFromRestrictedListItemSelect".Translate()} {label}"); Find.WindowStack.Add(floatMenu); } var maxValueString = itemToStringFunc == null ? item.Min.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(item.Max); ListingStandard.LabelDouble($"{"PLINT_UsableMinMaxNumFieldMax".Translate()} {label}:", maxValueString); }