public override void Redo(XUndoEventArgs args) { switch (_PropertyName) { case "DefaultStyle": _Document.EditorSetDefaultStyle((DocumentContentStyle)_NewValue, false); break; } }
protected void Undo(object sender, WriterCommandEventArgs args) { if (args.Mode == WriterCommandEventMode.QueryState) { args.Enabled = false; if (args.Document != null) { args.Enabled = args.DocumentControler.EditorControlReadonly == false && args.Document.UndoList != null && args.Document.UndoList.CanUndo; } } else if (args.Mode == WriterCommandEventMode.Invoke) { XUndoEventArgs e = new XUndoEventArgs(); args.Document.UndoList.Undo(e); args.RefreshLevel = UIStateRefreshLevel.All; } }
/// <summary> /// 执行重复操作 /// </summary> public virtual void Redo(XUndoEventArgs args) { }
public override void Redo(XUndoEventArgs args) { _Element.StyleIndex = _NewStyleIndex; this.OwnerList.RefreshElements.Add(_Element); }
private void Execute(XUndoEventArgs args, bool undo) { myDocument.UndoList.RefreshElements.Clear(); myDocument.UndoList._ContentRefreshInfos.Clear(); myDocument.UndoList.ContentChangedContainer.Clear(); myDocument.UndoList.NeedRefreshDocument = false; if (undo) { base.Undo(args); } else { base.Redo(args); } if (myDocument.UndoList.NeedRefreshDocument) { // 需要刷新整个文档。 if (this.Document.EditorControl != null) { this.Document.EditorControl.RefreshDocument(); return; } } // 指定了要刷新的元素 DomElementList RedrawElements = new DomElementList(); Dictionary <DomContentElement, int> startIndexs = new Dictionary <DomContentElement, int>(); if (this.Document.UndoList._ContentRefreshInfos.Count > 0) { // 直接获得要刷新排版的位置信息 DomDocumentContentElement dce2 = null; foreach (DomContentElement ce in this.Document.UndoList._ContentRefreshInfos.Keys) { dce2 = ce.DocumentContentElement; ce.UpdateContentElements(false); startIndexs[ce] = this.Document.UndoList._ContentRefreshInfos[ce]; } dce2.UpdateContentElements(false); }//if if (this.Document.UndoList.RefreshElements.Count > 0) { // 获得要刷新排版的位置信息 foreach (DomElement element in this.Document.UndoList.RefreshElements) { DomContentElement ce = element.ContentElement; if (startIndexs.ContainsKey(ce)) { int index = ce.PrivateContent.IndexOf(element); if (index >= 0 && index < startIndexs[ce]) { for (int iCount = startIndexs[ce]; iCount >= index; iCount--) { DomElement element2 = ce.PrivateContent[iCount]; if (element2.OwnerLine != null) { // 声明文本行无效 element2.OwnerLine.InvalidateState = true; } } startIndexs[ce] = index; } } else { ce.UpdateContentElements(true); int index = ce.PrivateContent.IndexOf(element.FirstContentElement); if (index >= 0) { startIndexs[ce] = index; } } }//foreach using (System.Drawing.Graphics g = this.Document.CreateGraphics()) { foreach (DomElement element in this.Document.UndoList.RefreshElements) { DomContentElement ce = element.ContentElement; int index2 = ce.PrivateContent.IndexOf(element.FirstContentElement); if (index2 >= 0) { //element.SizeInvalid = true; if (element.SizeInvalid || element.ViewInvalid) { RedrawElements.Add(element); } if (element.SizeInvalid) { this.Document.Render.RefreshSize(element, g); } //if (StartIndex == int.MinValue || StartIndex > index2) //{ // StartIndex = index2; //} //if (EndIndex == -1 || EndIndex < index2) //{ // EndIndex = index2; //} } //if } //foreach } //using } //if DomDocumentContentElement dce = this.Document.Body; foreach (DomContentElement ce in startIndexs.Keys) { dce = ce.DocumentContentElement; //ce.UpdateContentElements(); int index = startIndexs[ce]; if (index > 0) { //index--; } ce.RefreshPrivateContent(index, -1, true); }//foreach if (this.Document.PageRefreshed == false) { this.Document.RefreshPages(); if (this.Document.EditorControl != null) { this.Document.EditorControl.UpdatePages(); this.Document.EditorControl.Invalidate(); } } dce.Content.AutoClearSelection = true; dce.Content.LineEndFlag = false; if (undo) { dce.SetSelection(intOldSelectionStart, 0); } else { dce.SetSelection(intNewSelectionStart, 0); } //myDocument.Content.MoveSelectStart( intOldSelectionStart ); foreach (DomElement element in RedrawElements) { element.ViewInvalid = true; element.InvalidateView(); } if (this.Document.UndoList.ContentChangedContainer.Count > 0) { // 触发文档内容修改事件 foreach (DomContainerElement container in this.Document.UndoList.ContentChangedContainer) { // 触发文档事件 ContentChangedEventArgs args2 = new ContentChangedEventArgs(); args2.UndoRedoCause = true; args2.Document = this.Document; args2.Element = container; container.RaiseBubbleOnContentChanged(args2); } this.Document.HighlightManager.UpdateHighlightInfos(); this.Document.OnDocumentContentChanged(); } if (this.Document.EditorControl != null) { this.Document.EditorControl.UpdateTextCaret(); this.Document.EditorControl.Update(); } }
public override void Redo(XUndoEventArgs args) { Execute(args, false); }
public override void Undo(XUndoEventArgs args) { Execute(args, true); }