/// <summary> /// Конструктор /// </summary> public Change(SchemeChangeTypes changeType) { ChangeType = changeType; Stamp = 0; ChangedObject = null; OldObject = null; ComponentID = -1; ImageName = ""; OldImageName = ""; }
/// <summary> /// Добавить изменение в историю /// </summary> public void Add(SchemeChangeTypes changeType, object changedObject, object oldKey = null) { try { lock (this) { Change change = new Change(changeType, changedObject, oldKey); switch (changeType) { case SchemeChangeTypes.SchemeDocChanged: change.OldObject = schemeDocCopy; schemeDocCopy = (SchemeDocument)change.ChangedObject; break; case SchemeChangeTypes.ComponentAdded: componentsCopy[change.ComponentID] = (BaseComponent)change.ChangedObject; break; case SchemeChangeTypes.ComponentChanged: change.OldObject = componentsCopy[change.ComponentID]; componentsCopy[change.ComponentID] = (BaseComponent)change.ChangedObject; break; case SchemeChangeTypes.ComponentDeleted: componentsCopy.Remove(change.ComponentID); break; } if (addingEnabled) { if (currentPoint == null) { Point point = new Point(); point.Changes.Add(change); AddPoint(point); } else { currentPoint.Changes.Add(change); } } } } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при добавлении изменения в историю" : "Error adding a change to the history"); } }
/// <summary> /// Конструктор /// </summary> public Change(SchemeChangeTypes changeType, object changedObject, object oldKey) : this(changeType) { switch (changeType) { case SchemeChangeTypes.SchemeDocChanged: if (changedObject is SchemeDocument) { ChangedObject = ((SchemeDocument)changedObject).Copy(); } else { throw new ScadaException("SchemeDocument expected."); } break; case SchemeChangeTypes.ComponentAdded: case SchemeChangeTypes.ComponentChanged: case SchemeChangeTypes.ComponentDeleted: if (changedObject is BaseComponent) { ChangedObject = ((BaseComponent)changedObject).Clone(); ComponentID = ((BaseComponent)changedObject).ID; } else { throw new ScadaException("BaseComponent expected."); } break; case SchemeChangeTypes.ImageAdded: case SchemeChangeTypes.ImageRenamed: case SchemeChangeTypes.ImageDeleted: if (changedObject is Image) { ChangedObject = ((Image)changedObject).Copy(); ImageName = ((Image)changedObject).Name; OldImageName = (oldKey as string) ?? ""; } else { throw new ScadaException("Image expected."); } break; } }
/// <summary> /// Обработать событие изменения схемы /// </summary> private void Scheme_ItemChanged(object sender, SchemeChangeTypes changeType, object changedObject, object oldKey) { // создание объекта изменения Change change = new Change(changeType, changedObject, oldKey) { Stamp = ++changeStampCntr }; // добавление изменения в список изменений lock (changes) { changes.Add(change); } // добавление изменения в историю History.Add(changeType, changedObject, oldKey); // установка признака изменений Modified = true; }
private void Scheme_ItemChanged(object sender, SchemeChangeTypes changeType, object changedObject, object oldKey) { ExecuteAction(() => { switch (changeType) { case SchemeChangeTypes.ComponentAdded: // привязка события на изменение компонента ((BaseComponent)changedObject).ItemChanged += Scheme_ItemChanged; // добавление компонента в выпадающий список cbSchComp.Items.Add(changedObject); break; case SchemeChangeTypes.ComponentChanged: // обновление текста выпадающего списка при изменении отображаемого наименования выбранного объекта object selItem = cbSchComp.SelectedItem; if (selItem != null) { string newDisplayName = selItem.ToString(); string oldDisplayName = cbSchComp.Text; if (oldDisplayName != newDisplayName) { cbSchComp.Items[cbSchComp.SelectedIndex] = selItem; } } break; case SchemeChangeTypes.ComponentDeleted: // удаление компонента из выпадающего списка cbSchComp.Items.Remove(changedObject); break; } SetButtonsEnabled(); }); }
/// <summary> /// Вызвать событие ItemChanged. /// </summary> public void OnItemChanged(SchemeChangeTypes changeType, object changedObject, object oldKey = null) { ItemChanged?.Invoke(this, changeType, changedObject, oldKey); }