public override void Undo(DCSoft.CSharpWriter.Undo.XUndoEventArgs args) { if (_OldStyleIndex.Count > 0) { if (this.ParagraphStyle) { this.Document.EditorSetParagraphStyle(_OldStyleIndex, false); } else { this.Document.EditorSetElementStyle(_OldStyleIndex, false); } } }
/// <summary> /// 撤销操作 /// </summary> public override void Undo(DCSoft.CSharpWriter.Undo.XUndoEventArgs args) { if (myProperty != null && objObjectInstance != null) { myProperty.SetValue(objObjectInstance, objOldValue, null); if (objObjectInstance is DomElement) { DomElement element = (DomElement)objObjectInstance; element.SizeInvalid = true; this.OwnerList.RefreshElements.Add(element); } if (objObjectInstance is DomDocument) { if (myProperty.Name == "PageSettings") { this.OwnerList.NeedRefreshDocument = true; } } } }
/// <summary> /// 重复操作 /// </summary> public override void Redo(DCSoft.CSharpWriter.Undo.XUndoEventArgs args) { if (myContainer != null) { DomContentElement ce = myContainer.ContentElement; //args.Parameters["ContentElement"] = ce; if (_OldElements != null && _NewElements == null) { // 光删除,重复操作就是重复删除数据 int index = ce.PrivateContent.IndexOf(_OldElements.FirstContentElement); foreach (DomElement element in _OldElements) { DomElement e2 = GetContentElement(element); if (e2 != null) { if (e2.OwnerLine != null) { e2.OwnerLine.InvalidateState = true; } } element.OwnerLine = null; myContainer.Elements.Remove(element); myContainer.OwnerDocument.HighlightManager.Remove(element); } myContainer.UpdateContentVersion(); this.OwnerList.AddContentRefreshInfo(ce, index); } else if (_OldElements == null && _NewElements != null) { // 光插入,重复操作就是重复插入数据 myContainer.Elements.InsertRange(intIndex, _NewElements); foreach (DomElement element in _NewElements) { DomElement e2 = GetContentElement(element); if (e2 != null && e2.OwnerLine != null) { e2.OwnerLine.InvalidateState = true; } element.OwnerLine = null; }//foreach myContainer.UpdateContentVersion(); AddRefreshElements( _NewElements.FirstContentElement, _NewElements.LastContentElement); } else if (_OldElements != null && _NewElements != null) { // 替换,撤销操作就是删除旧数据并插入新数据 int index = ce.PrivateContent.IndexOf(_OldElements.FirstContentElement); foreach (DomElement element in _OldElements) { DomElement e2 = GetContentElement(element); if (e2 != null && e2.OwnerLine != null) { e2.OwnerLine.InvalidateState = true; } element.OwnerLine = null; myContainer.Elements.Remove(element); myContainer.OwnerDocument.HighlightManager.Remove(element); } this.OwnerList.AddContentRefreshInfo(ce, index); myContainer.Elements.InsertRange(intIndex, _NewElements); foreach (DomElement element in _NewElements) { if (element.OwnerLine != null) { element.OwnerLine.InvalidateState = true; element.OwnerLine = null; } } myContainer.UpdateContentVersion(); ce.UpdateContentElements(true); AddRefreshElements( _NewElements.FirstContentElement, _NewElements.LastContentElement); } if (this.OwnerList.ContentChangedContainer.Contains(myContainer) == false) { this.OwnerList.ContentChangedContainer.Add(myContainer); } } }
/// <summary> /// 撤销操作 /// </summary> public override void Undo(DCSoft.CSharpWriter.Undo.XUndoEventArgs args) { if (myContainer != null) { DomContentElement ce = myContainer.ContentElement; args.Parameters["ContentElement"] = ce; if (_OldElements != null && _NewElements == null) { // 光删除,撤销操作就是恢复数据 myContainer.Elements.InsertRange(intIndex, _OldElements); foreach (DomElement element in _OldElements) { DomElement e2 = GetContentElement(element); if (e2 != null && e2.OwnerLine != null) { e2.OwnerLine.InvalidateState = true; } element.OwnerLine = null; element.Parent = myContainer; } myContainer.UpdateContentVersion(); AddRefreshElements( _OldElements.FirstContentElement, _OldElements.LastContentElement); } else if (_OldElements == null && _NewElements != null) { // 光插入,撤销操作就是删除数据 int index = ce.PrivateContent.IndexOf(_NewElements.FirstContentElement); int startIndex = index; foreach (DomElement element in _NewElements) { startIndex = Math.Min(startIndex, element.FirstContentElement.ViewIndex); myContainer.Elements.Remove(element); myContainer.OwnerDocument.HighlightManager.Remove(element); DomElement fce = GetContentElement(element.FirstContentElement); DomElement ece = GetContentElement(element.LastContentElement); ce.SetLinesInvalidateState( fce == null ? null : fce.OwnerLine, ece == null ? null : ece.OwnerLine); if (element.OwnerLine != null) { element.OwnerLine.InvalidateState = true; element.OwnerLine = null; } } myContainer.UpdateContentVersion(); this.OwnerList.AddContentRefreshInfo(ce, startIndex); } else if (_OldElements != null && _NewElements != null) { // 替换,撤销操作就是删除新数据并恢复旧数据 int index = ce.PrivateContent.IndexOf(_NewElements.FirstContentElement); int startIndex = index; foreach (DomElement element in _NewElements) { startIndex = Math.Min(startIndex, element.FirstContentElement.ViewIndex); myContainer.Elements.Remove(element); myContainer.OwnerDocument.HighlightManager.Remove(element); DomElement fce = GetContentElement(element.FirstContentElement); DomElement ece = GetContentElement(element.LastContentElement); ce.SetLinesInvalidateState( fce == null ? null : fce.OwnerLine, ece == null ? null : ece.OwnerLine); //ce.SetLinesInvalidateState( // element.FirstContentElement.OwnerLine, // element.LastContentElement.OwnerLine); element.OwnerLine = null; } this.OwnerList.AddContentRefreshInfo(ce, startIndex); myContainer.Elements.InsertRange(intIndex, _OldElements); foreach (DomElement element in _OldElements) { if (element.OwnerLine != null) { element.OwnerLine.InvalidateState = true; element.OwnerLine = null; } element.Parent = myContainer; } myContainer.UpdateContentVersion(); this.OwnerList.RefreshElements.Add( GetContentElement( _OldElements.FirstContentElement)); this.OwnerList.RefreshElements.Add( GetContentElement( _OldElements.LastContentElement)); } if (this.OwnerList.ContentChangedContainer.Contains(myContainer) == false) { this.OwnerList.ContentChangedContainer.Add(myContainer); } } }
public override void Redo(DCSoft.CSharpWriter.Undo.XUndoEventArgs args) { _Control.EditorSetDefaultFont(_NewFont, _NewColor, true); }
public override void Undo(DCSoft.CSharpWriter.Undo.XUndoEventArgs args) { if (_ListInstance == null) { throw new ArgumentNullException("ListInstance"); } switch (this.Action) { case XTextUndoModifyListAction.Insert: { if (this._Index >= 0 && this._Index < _ListInstance.Count) { _ListInstance.RemoveAt(this._Index); } else { _ListInstance.Remove(this._NewValue); } } break; case XTextUndoModifyListAction.Remove: _ListInstance.Insert(_Index, _OldValue); break; case XTextUndoModifyListAction.Change: if (_Index >= 0 && _Index < _ListInstance.Count) { _ListInstance[_Index] = _OldValue; } break; case XTextUndoModifyListAction.InsertRange: { if (_NewValue is IEnumerable) { int index = this._Index; foreach (object obj in (IEnumerable)_NewValue) { _ListInstance.RemoveAt(index); } } } break; case XTextUndoModifyListAction.RemoveRange: { if (_OldValue is IEnumerable) { int index = this._Index; foreach (object obj in (IEnumerable)_OldValue) { _ListInstance.Insert(index, obj); index++; } } } break; case XTextUndoModifyListAction.ChangeRange: { if (_OldValue is IEnumerable) { int index = this._Index; foreach (object obj in (IEnumerable)_OldValue) { _ListInstance[index] = obj; index++; } } } break; }//switch if (AfterUndo != null) { AfterUndo(this, EventArgs.Empty); } }//Undo