private TaskSetting LoadTaskSettings(XElement eSettings) { var setting = new TaskSetting(); if (eSettings == null) { return(setting); } T setProp <T> (TaskSettingProp prop, T defaultValue) { string sVal = eSettings.GetAtt(TaskSetting.ShorPropNames[prop], ""); if (sVal.StartsWith("!")) { setting.ReadOnlyProps |= prop; sVal = sVal.TrimStart('!'); } if (!String.IsNullOrEmpty(sVal)) { setting.SetProps |= prop; } return(TaskExtensions.ConvertValue(sVal, defaultValue)); } setting.Level = setProp(TaskSettingProp.Level, "").Split(',') ?? setting.Level; setting.RandomOrder = setProp(TaskSettingProp.RandomOrder, setting.RandomOrder); setting.Round = setProp(TaskSettingProp.Round, setting.Round); setting.Seed = setProp(TaskSettingProp.Seed, setting.Seed); setting.ItemsCount = LoadItemsCount(setProp(TaskSettingProp.ItemsCount, "")); setting.SeparatePreviousPairs = setProp(TaskSettingProp.SeparatePreviousPairs, setting.SeparatePreviousPairs); eSettings.Attributes().Where(a => a.Name.LocalName.StartsWith("custom_")).ForEach(a => setting.CustomSettings.Add(a.Name.LocalName.Substring(7), a.Value)); return(setting); }
string[] selectedIds; // For Log private TaskRender(Tasks tasks, TaskSetting setting) { this.tasks = tasks; this.Setting = TaskLoader.MergeSettings(tasks.Setting, setting); random = new TaskRandom(setting.Seed); output = new StringBuilder(); globalVariables = new Dictionary <string, object>(); countOfTaskPreviousleyChoosed = new Dictionary <int, int>(); previousChoosedCombinations = new List <List <TaskItem> >(); }
public static string Render(Tasks tasks, TaskSetting setting, out string selectedItemIds) { var render = new TaskRender(tasks, setting); string result = ""; for (int i = 1; i <= render.Setting.Round; i++) { result = render.Render(i); } selectedItemIds = render.selectedIds.ArrayToCommaText(); return(result); }
private static TaskSetting MergeTwoSettings(TaskSetting baseSettings, TaskSetting externalSettings) { if (externalSettings == null) { return(baseSettings?.MakeCopy()); } if (baseSettings == null) { return(externalSettings.MakeCopy()); } var setting = new TaskSetting(); T copyProp <T>(TaskSettingProp prop, T baseVal, T extVal) { if (baseSettings.ReadOnlyProps.HasFlag(prop)) // Base is read-only, external value is skiped { setting.ReadOnlyProps |= prop; // Copy RO flag return(baseVal); } if (externalSettings.ReadOnlyProps.HasFlag(prop)) // Copy RO flag { setting.ReadOnlyProps |= prop; } if (!externalSettings.SetProps.HasFlag(prop)) // External value was not set (is default) - use base value { return(baseVal); } return(extVal); } setting.Level = copyProp(TaskSettingProp.Level, baseSettings.Level, externalSettings.Level); setting.RandomOrder = copyProp(TaskSettingProp.RandomOrder, baseSettings.RandomOrder, externalSettings.RandomOrder); setting.Round = copyProp(TaskSettingProp.Round, baseSettings.Round, externalSettings.Round); setting.Seed = baseSettings?.Seed ?? ""; setting.Seed += externalSettings.Seed; //copyProp(TaskSettingProp.Seed, baseSettings.Seed, externalSettings.Seed); setting.ItemsCount = copyProp(TaskSettingProp.ItemsCount, baseSettings.ItemsCount, externalSettings.ItemsCount); setting.SeparatePreviousPairs = copyProp(TaskSettingProp.SeparatePreviousPairs, baseSettings.SeparatePreviousPairs, externalSettings.SeparatePreviousPairs); return(setting); }
public static string RenderMulti(Tasks tasks, TaskSetting setting, int roundTo, out string selectedItemIds) { var render = new TaskRender(tasks, setting); StringBuilder result = new StringBuilder(); if (roundTo >= render.Setting.Round) { for (int i = 1; i <= roundTo; i++) { if (i >= render.Setting.Round) { result.AppendLine(render.Render(i)); } else { render.Render(i); } } } selectedItemIds = render.selectedIds.ArrayToCommaText(); return(result.ToString()); }
public static string RenderMulti(Tasks tasks, TaskSetting setting, int roundTo) => RenderMulti(tasks, setting, roundTo, out string selectedItemIds);
public static string Render(Tasks tasks, TaskSetting setting) => Render(tasks, setting, out string selectedItemIds);