/// <summary> /// Obtiene el valor existente de la propiedad y lo inserta en Redo.- /// Retira la ultima propiedad de del objeto en la pila Undo (esto es para establecerlo como el valor vigente de la propiedad) /// Establece al objeto padre el valor de la propiedad que esta en la pila undo /// </summary> public void Undo() { if (_UndoStack.Count > 0) { //Retira las ultimas propiedades del objeto en la pila Undo List<PropertyValue> wPropertyValueUndoList = (List<PropertyValue>)_UndoStack.Pop(); List<PropertyValue> wPropertyValueRedoList = new List<PropertyValue>(); PropertyInfo wPropertyInfo; object wOldValue; PropertyValue wPropertyValueRedo; foreach (PropertyValue wPropertyValue in wPropertyValueUndoList) { //Obtengo la propiedad del objeto wPropertyInfo = _ParentObjectType.GetProperty(wPropertyValue.PropertyName); #region Primero Obtiene el valor existente y lo inserta en Redo.- //Obtengo el valor de la propiedad wPropertyInfo wOldValue = wPropertyInfo.GetValue(_ParentObject, null); //Creo una PropertyValue con el valor de la propiedad y lo invcerto en la pila Redo wPropertyValueRedo = new PropertyValue(wPropertyValue.PropertyName, wOldValue); wPropertyValueRedoList.Add(wPropertyValueRedo); #endregion wPropertyInfo.SetValue(_ParentObject, wPropertyValue.Value, null); } //Saco de la pila redo el ultimo PropertyValue list de propiedad ingresado _RedoStack.Push(wPropertyValueRedoList); } }
/// <summary> /// Obtiene el valor existente de la propiedad y lo inserta en Redo.- /// Retira la ultima propiedad de del objeto en la pila Undo (esto es para establecerlo como el valor vigente de la propiedad) /// Establece al objeto padre el valor de la propiedad que esta en la pila undo /// </summary> public void Undo() { if (_UndoStack.Count > 0) { //Retira la ultima propiedad de del objeto en la pila Undo PropertyValue pPropertyValueUndo = (PropertyValue)_UndoStack.Pop(); PropertyInfo wPropertyInfo = _ParentObjectType.GetProperty(pPropertyValueUndo.PropertyName); #region Primero Obtiene el valor existente y lo inserta en Redo.- object wOldValue = wPropertyInfo.GetValue(_ParentObject, null); PropertyValue _PropertyValueRedo = new PropertyValue(pPropertyValueUndo.PropertyName, wOldValue); _RedoStack.Push(_PropertyValueRedo); #endregion // apply the value that was popped off the undo stack wPropertyInfo.SetValue(_ParentObject, pPropertyValueUndo.Value, null); } }
/// <summary> /// Redo /// </summary> public void Redo() { if (_RedoStack.Count>0) { //Retira la ultima propiedad de Redo PropertyValue wPropertyValue = (PropertyValue)_RedoStack.Pop(); PropertyInfo wPropertyInfo = _ParentObjectType.GetProperty(wPropertyValue.PropertyName); #region Primero obtiene el valor existente y lo mete en la pila UNDO object wOldValue = wPropertyInfo.GetValue(_ParentObject,null); PropertyValue _PropertyValueUndo = new PropertyValue(wPropertyValue.PropertyName, wOldValue); _UndoStack.Push(_PropertyValueUndo); #endregion // apply the value that was popped off the redo stack wPropertyInfo.SetValue(_ParentObject, wPropertyValue.Value, null); } }
/// <summary> /// El objeto padre llamara este metodo par aalmacenar el valor de la propiedad /// antes de que esta sufra algun cambio.- /// </summary> /// <param name="propName">nombre de la propiedad</param> /// <param name="propVal">El valor anterior al cambio</param> public void Store(string propName, object propVal) { PropertyValue pVal = new PropertyValue(propName, propVal); //Inserto en la pila undo el par (name - value).- _UndoStack.Push(pVal); }
/// <summary> /// Retira la ultima propiedad de Redo y las pasa a Undo /// </summary> public void Redo() { if (_RedoStack.Count > 0) { //Retira la ultima propiedad de Redo List<PropertyValue> wPropertyValueRedoList = (List<PropertyValue>)_RedoStack.Pop(); List<PropertyValue> wPropertyValueUndoList = new List<PropertyValue>(); PropertyInfo wPropertyInfo; object wOldValue; PropertyValue wPropertyValueUndo; foreach (PropertyValue wPropertyValue in wPropertyValueRedoList) { wPropertyInfo = _ParentObjectType.GetProperty(wPropertyValue.PropertyName); #region Primero obtiene el valor existente y lo mete en la pila UNDO wOldValue = wPropertyInfo.GetValue(_ParentObject, null); wPropertyValueUndo = new PropertyValue(wPropertyValue.PropertyName, wOldValue); wPropertyValueUndoList.Add(wPropertyValueUndo); #endregion wPropertyInfo.SetValue(_ParentObject, wPropertyValue.Value, null); } _UndoStack.Push(wPropertyValueUndoList); } }