//------------------------------------------------------ // // Public Methods // //------------------------------------------------------ #region Public Methods // Called by the undo manager. Restores tree state to its condition // when the unit was created. Assumes the tree state matches conditions // just after the unit was created. public override void DoCore() { TextPointer start; TextPointer end; TextElement element; VerifyTreeContentHashCode(); start = new TextPointer(this.TextContainer, this.SymbolOffset, LogicalDirection.Forward); end = new TextPointer(this.TextContainer, this.SymbolOffset + _symbolCount - 2, LogicalDirection.Forward); // Insert a new element. element = (TextElement)Activator.CreateInstance(_type); element.Reposition(start, end); // Restore local resources element.Resources = _resources; // Move end into the scope of the new element. end.MoveToNextContextPosition(LogicalDirection.Backward); // Then restore local property values. // Shouldn't we call this with deferLoad=true and call EndDeferLoad after all parameters set? this.TextContainer.SetValues(end, ArrayToLocalValueEnumerator(_localValues)); if (element is Table) { TextTreeDeleteContentUndoUnit.RestoreColumns((Table)element, _columns); } }
// Token: 0x0600860B RID: 34315 RVA: 0x0024B8B8 File Offset: 0x00249AB8 internal override void Do(TextPointer navigator) { base.Do(navigator); if (this._columns != null) { TextPointer textPointer = new TextPointer(navigator.TextContainer.Start, this._cpTable, LogicalDirection.Forward); Table table = (Table)textPointer.Parent; TextTreeDeleteContentUndoUnit.RestoreColumns(table, this._columns); } }
// Token: 0x06003D16 RID: 15638 RVA: 0x0011BC18 File Offset: 0x00119E18 internal TextTreeExtractElementUndoUnit(TextContainer tree, TextTreeTextElementNode elementNode) : base(tree, elementNode.GetSymbolOffset(tree.Generation)) { this._symbolCount = elementNode.SymbolCount; this._type = elementNode.TextElement.GetType(); this._localValues = TextTreeUndoUnit.GetPropertyRecordArray(elementNode.TextElement); this._resources = elementNode.TextElement.Resources; if (elementNode.TextElement is Table) { this._columns = TextTreeDeleteContentUndoUnit.SaveColumns((Table)elementNode.TextElement); } }
// Token: 0x06003D10 RID: 15632 RVA: 0x0011B9B4 File Offset: 0x00119BB4 internal static void RestoreColumns(Table table, TableColumn[] savedColumns) { if (savedColumns != null) { for (int i = 0; i < savedColumns.Length; i++) { if (table.Columns.Count <= i) { table.Columns.Add(TextTreeDeleteContentUndoUnit.CopyColumn(savedColumns[i])); } } } }
//------------------------------------------------------ // // Constructors // //------------------------------------------------------ #region Constructors // Creates a new undo unit instance. internal TextTreeExtractElementUndoUnit(TextContainer tree, TextTreeTextElementNode elementNode) : base(tree, elementNode.GetSymbolOffset(tree.Generation)) { _symbolCount = elementNode.SymbolCount; _type = elementNode.TextElement.GetType(); _localValues = GetPropertyRecordArray(elementNode.TextElement); _resources = elementNode.TextElement.Resources; // Table requires additional work for storing its Columns collection if (elementNode.TextElement is Table) { _columns = TextTreeDeleteContentUndoUnit.SaveColumns((Table)elementNode.TextElement); } }
// Token: 0x06003D17 RID: 15639 RVA: 0x0011BC9C File Offset: 0x00119E9C public override void DoCore() { base.VerifyTreeContentHashCode(); TextPointer start = new TextPointer(base.TextContainer, base.SymbolOffset, LogicalDirection.Forward); TextPointer textPointer = new TextPointer(base.TextContainer, base.SymbolOffset + this._symbolCount - 2, LogicalDirection.Forward); TextElement textElement = (TextElement)Activator.CreateInstance(this._type); textElement.Reposition(start, textPointer); textElement.Resources = this._resources; textPointer.MoveToNextContextPosition(LogicalDirection.Backward); base.TextContainer.SetValues(textPointer, TextTreeUndoUnit.ArrayToLocalValueEnumerator(this._localValues)); if (textElement is Table) { TextTreeDeleteContentUndoUnit.RestoreColumns((Table)textElement, this._columns); } }
// Token: 0x06003D0F RID: 15631 RVA: 0x0011B958 File Offset: 0x00119B58 internal static TableColumn[] SaveColumns(Table table) { TableColumn[] array; if (table.Columns.Count > 0) { array = new TableColumn[table.Columns.Count]; for (int i = 0; i < table.Columns.Count; i++) { array[i] = TextTreeDeleteContentUndoUnit.CopyColumn(table.Columns[i]); } } else { array = null; } return(array); }
// Token: 0x06003E2C RID: 15916 RVA: 0x0011D638 File Offset: 0x0011B838 internal static TextTreeDeleteContentUndoUnit CreateDeleteContentUndoUnit(TextContainer tree, TextPointer start, TextPointer end) { if (start.CompareTo(end) == 0) { return(null); } UndoManager orClearUndoManager = TextTreeUndo.GetOrClearUndoManager(tree); if (orClearUndoManager == null) { return(null); } TextTreeDeleteContentUndoUnit textTreeDeleteContentUndoUnit = new TextTreeDeleteContentUndoUnit(tree, start, end); orClearUndoManager.Add(textTreeDeleteContentUndoUnit); return(textTreeDeleteContentUndoUnit); }
// Adds a DeleteContentUndoUnit to the open parent undo unit, if any. // Called by TextContainer.DeleteContent. internal static TextTreeDeleteContentUndoUnit CreateDeleteContentUndoUnit(TextContainer tree, TextPointer start, TextPointer end) { UndoManager undoManager; TextTreeDeleteContentUndoUnit undoUnit; if (start.CompareTo(end) == 0) { return(null); } undoManager = GetOrClearUndoManager(tree); if (undoManager == null) { return(null); } undoUnit = new TextTreeDeleteContentUndoUnit(tree, start, end); undoManager.Add(undoUnit); return(undoUnit); }
// Adds a DeleteContentUndoUnit to the open parent undo unit, if any. // Called by TextContainer.DeleteContent. internal static TextTreeDeleteContentUndoUnit CreateDeleteContentUndoUnit(TextContainer tree, TextPointer start, TextPointer end) { UndoManager undoManager; TextTreeDeleteContentUndoUnit undoUnit; if (start.CompareTo(end) == 0) return null; undoManager = GetOrClearUndoManager(tree); if (undoManager == null) return null; undoUnit = new TextTreeDeleteContentUndoUnit(tree, start, end); undoManager.Add(undoUnit); return undoUnit; }
// Token: 0x0600860A RID: 34314 RVA: 0x0024B877 File Offset: 0x00249A77 internal TableElementContentContainer(Table table, PropertyRecord[] localValues, TextTreeDeleteContentUndoUnit.ContentContainer childContainer) : base(table.GetType(), localValues, table.Resources, childContainer) { this._cpTable = table.TextContainer.Start.GetOffsetToPosition(table.ContentStart); this._columns = TextTreeDeleteContentUndoUnit.SaveColumns(table); }