public BaseStep Clone() { var step = new BaseStep(Name, LuaName, DefaultPosition); step.Owner = Owner; return(step); }
/// <summary> /// Добавить базовый шаг /// </summary> /// <param name="luaName">Lua-имя</param> /// <param name="name">Имя</param> /// <param name="defaultPosition">Стандартная позиция шага в /// базовой операции.</param> public void AddStep(string luaName, string name, int defaultPosition) { if (Steps.Count == 0) { var emptyStep = new BaseStep("", ""); emptyStep.Owner = this; // Пустой объект, если не должно быть выбрано никаких объектов Steps.Add(emptyStep); } var step = new BaseStep(name, luaName, defaultPosition); step.Owner = this; Steps.Add(step); }
public override bool SetNewValue(string newVal, bool isExtraValue) { State state = Owner; Step equalStep = state.Steps .Where(x => x.GetBaseStepName() == newVal) .FirstOrDefault(); if (equalStep == null) { equalStep = state.Steps .Where(x => x.GetBaseStepLuaName() == newVal) .FirstOrDefault(); } if (equalStep != null && newVal != string.Empty) { return(false); } Mode mode = state.Owner; BaseStep baseStep = mode.BaseOperation .GetStateBaseSteps(state.Type) .Where(x => x.LuaName == newVal).FirstOrDefault(); if (baseStep == null) { baseStep = mode.BaseOperation .GetStateBaseSteps(state.Type) .Where(x => x.Name == newVal).FirstOrDefault(); } if (baseStep != null) { this.baseStep = baseStep.Clone(); this.baseStep.Owner = this; if (name.Contains(NewStepName) && baseStep.Name != string.Empty) { name = baseStep.Name; } return(true); } return(false); }
/// <summary> /// Копирование состояний и базовых шагов /// </summary> /// <param name="newOwner">Новая операция-владелец</param> /// <returns></returns> private Dictionary <string, List <BaseStep> > CloneStates( BaseOperation newOwner) { var clonedStates = new Dictionary <string, List <BaseStep> >(); foreach (var state in States) { var clonedSteps = new List <BaseStep>(); List <BaseStep> steps = state.Value; foreach (var step in steps) { BaseStep clonedStep = step.Clone(); clonedStep.Owner = newOwner; clonedSteps.Add(clonedStep); } clonedStates.Add(state.Key, clonedSteps); } return(clonedStates); }
/// <summary> /// Добавить базовый шаг /// </summary> /// <param name="stateTypeStr">Тип состояния</param> /// <param name="luaName">Lua-имя</param> /// <param name="name">Имя</param> /// <param name="defaultPosition">Стандартная позиция шага в /// базовой операции.</param> public void AddStep(string stateTypeStr, string luaName, string name, int defaultPosition) { var step = new BaseStep(name, luaName, defaultPosition); step.Owner = this; if (states.ContainsKey(stateTypeStr)) { states[stateTypeStr].Add(step); } else { var emptyStep = new BaseStep(string.Empty, string.Empty); emptyStep.Owner = this; var stepsList = new List <BaseStep>(); stepsList.Add(emptyStep); stepsList.Add(step); states.Add(stateTypeStr, stepsList); } }
public void SetUpFromBaseTechObject(BaseStep baseStep) { bool setBaseStep = true; SetNewValue(baseStep.Name, setBaseStep); }
/// <summary> /// Создание нового шага. /// </summary> /// <param name="name">Имя шага.</param> /// <param name="getN">Функция получения номера шага.</param> /// <param name="isMainStep">Признак того, является ли шаг /// шагом операции. </param> /// <param name="owner">Владелец шага (Состояние)</param> public Step(string name, GetN getN, State owner, bool isMainStep = false) { this.name = name; this.getN = getN; IsMainStep = isMainStep; Owner = owner; baseStep = new BaseStep(string.Empty, string.Empty); baseStep.Owner = this; items = new List <ITreeViewItem>(); actions = new List <Action>(); actions.Add(new Action("Включать", this, Action.OpenDevices, new Device.DeviceType[] { Device.DeviceType.V, Device.DeviceType.DO, Device.DeviceType.M })); actions.Add(new Action("Включать реверс", this, Action.OpenReverseDevices, new Device.DeviceType[] { Device.DeviceType.M }, new Device.DeviceSubType[] { Device.DeviceSubType.M_REV_FREQ, Device.DeviceSubType.M_REV_FREQ_2, Device.DeviceSubType.M_REV_FREQ_2_ERROR, Device.DeviceSubType.M_ATV, Device.DeviceSubType.M })); actions.Add(new Action("Выключать", this, Action.CloseDevices, new Device.DeviceType[] { Device.DeviceType.V, Device.DeviceType.DO, Device.DeviceType.M })); actions[2].DrawStyle = DrawInfo.Style.RED_BOX; actions.Add(new ActionGroup("Верхние седла", this, ActionGroup.OpenedUpperSeats, new Device.DeviceType[] { Device.DeviceType.V }, new Device.DeviceSubType[] { Device.DeviceSubType.V_MIXPROOF, Device.DeviceSubType.V_AS_MIXPROOF, Device.DeviceSubType.V_IOLINK_MIXPROOF })); actions[3].DrawStyle = DrawInfo.Style.GREEN_UPPER_BOX; actions.Add(new ActionGroup("Нижние седла", this, ActionGroup.OpenedLowerSeats, new Device.DeviceType[] { Device.DeviceType.V }, new Device.DeviceSubType[] { Device.DeviceSubType.V_MIXPROOF, Device.DeviceSubType.V_AS_MIXPROOF, Device.DeviceSubType.V_IOLINK_MIXPROOF })); actions[4].DrawStyle = DrawInfo.Style.GREEN_LOWER_BOX; actions.Add(new Action("Сигналы для включения", this, Action.RequiredFB, new Device.DeviceType[] { Device.DeviceType.DI, Device.DeviceType.GS })); actions.Add(new ActionGroupWash("Устройства", this, ActionGroupWash.SingleGroupAction)); // Специальное действие - выдача дискретных сигналов // при наличии входного дискретного сигнала. actions.Add(new ActionGroup("Группы DI -> DO DO ...", this, ActionGroup.DIDO, new Device.DeviceType[] { Device.DeviceType.DI, Device.DeviceType.SB, Device.DeviceType.DO })); // Специальное действие - выдача аналоговых сигналов при // наличии входного аналогового сигнала. actions.Add(new ActionGroup("Группы AI -> AO AO ...", this, ActionGroup.AIAO, new Device.DeviceType[] { Device.DeviceType.AI, Device.DeviceType.AO, Device.DeviceType.M })); items.AddRange(actions.ToArray()); if (!isMainStep) { timeParam = new ObjectProperty("Время (параметр)", -1, -1); nextStepN = new ObjectProperty("Номер следующего шага", -1, -1); items.Add(timeParam); items.Add(nextStepN); } }