예제 #1
0
        //------------------------------------------------------
        //
        //  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);
     }
 }
예제 #3
0
 // 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]));
             }
         }
     }
 }
예제 #5
0
        //------------------------------------------------------
        //
        //  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);
            }
        }
예제 #6
0
        // 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);
        }
예제 #9
0
        // 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);
        }
예제 #10
0
        // 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);
 }