示例#1
0
        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);
        }
示例#2
0
        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> >();
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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());
        }
示例#6
0
 public static string RenderMulti(Tasks tasks, TaskSetting setting, int roundTo)
 => RenderMulti(tasks, setting, roundTo, out string selectedItemIds);
示例#7
0
 public static string Render(Tasks tasks, TaskSetting setting)
 => Render(tasks, setting, out string selectedItemIds);