private void OnDataCollectionChanged(object?sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { if (e.NewItems != null) { foreach (ConditionJsonData data in e.NewItems) { PushAction(new ConditionsListHistoryAction(in data, e.NewStartingIndex, ListHistoryActionMode.ActionAdd, conditionsList)); } } } else if (e.Action == NotifyCollectionChangedAction.Remove) { if (e.OldItems != null) { foreach (ConditionJsonData data in e.OldItems) { PushAction(new ConditionsListHistoryAction(in data, e.OldStartingIndex, ListHistoryActionMode.ActionRemove, conditionsList)); } } } else if (e.Action == NotifyCollectionChangedAction.Replace) { if (e.NewItems != null && e.OldItems != null && e.NewItems.Count == e.OldItems.Count) { for (int i = 0; i < e.NewItems.Count; ++i) { ConditionJsonData oldItem = e.OldItems[i] is ConditionJsonData ? (ConditionJsonData)e.OldItems[i] ! : default; ConditionJsonData newItem = e.NewItems[i] is ConditionJsonData ? (ConditionJsonData)e.NewItems[i] ! : default; PushAction(new CondtionsListHistoryReplaceAction(in oldItem, in newItem, e.NewStartingIndex, conditionsList)); } } } }
private async Task AddNewItem() { var obj = new ConditionJsonData(); obj.Id = SourceItems.Max(x => x.Id) + 1; obj.Name = "CONDITION_"; await OpenEditor(obj, true); }
internal void UpdateCondition(ConditionJsonData data) { var old = conditionId; conditionId = data.Id; readableHint = data.Description; RaisePropertyChanged(nameof(Readable)); ConditionChanged?.Invoke(this, old, conditionId); }
private async Task OpenEditor(ConditionJsonData item, bool isCreating) { var vm = new ConditionEditorViewModel(in item, windowManager, parameterFactory); if (await windowManager.ShowDialog(vm) && !vm.IsEmpty()) { if (isCreating) { SourceItems.Add(vm.Source.ToConditionJsonData()); } else { if (SelectedIndex >= 0) { SourceItems[SelectedIndex] = vm.Source.ToConditionJsonData(); } } } }
private void SetParameterObjects(SmartBaseElement element, ConditionJsonData data) { element.Id = data.Id; element.ReadableHint = data.Description; for (var i = 0; i < element.ParametersCount; ++i) { element.GetParameter(i).IsUsed = false; } if (data.Parameters == null) { return; } for (var i = 0; i < data.Parameters.Count; ++i) { string key = data.Parameters[i].Type; if (data.Parameters[i].Values != null) { key = $"{data.Name}_{i}"; if (!parameterFactory.IsRegisteredLong(key)) { parameterFactory.Register(key, new Parameter() { Items = data.Parameters[i].Values }); } } IParameter <long> parameter = parameterFactory.Factory(key); element.GetParameter(i).Name = data.Parameters[i].Name; element.GetParameter(i).IsUsed = true; element.GetParameter(i).Parameter = parameter; } }