Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / System / Windows / Documents / TextTreeExtractElementUndoUnit.cs / 1 / TextTreeExtractElementUndoUnit.cs
//----------------------------------------------------------------------------
//
// File: TextTreeExtractElementUndoUnit.cs
//
// Description: Undo unit for TextContainer.ExtractElement calls.
//
// History:
// 03/03/2004 : benwest - Created
//
//---------------------------------------------------------------------------
using System;
using MS.Internal;
namespace System.Windows.Documents
{
// Undo unit for TextContainer.ExtractElement calls.
internal class TextTreeExtractElementUndoUnit : TextTreeUndoUnit
{
//-----------------------------------------------------
//
// 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 = LocalValueEnumeratorToArray(elementNode.TextElement.GetLocalValueEnumerator());
_resources = elementNode.TextElement.Resources;
// Table requires additional work for storing its Columns collection
if (elementNode.TextElement is Table)
{
_columns = TextTreeDeleteContentUndoUnit.SaveColumns((Table)elementNode.TextElement);
}
}
#endregion Constructors
//------------------------------------------------------
//
// 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.
//
this.TextContainer.SetValues(end, ArrayToLocalValueEnumerator(_localValues));
if (element is Table)
{
TextTreeDeleteContentUndoUnit.RestoreColumns((Table)element, _columns);
}
}
#endregion Public Methods
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
// Count of symbols covered by the extracted TextElement, including its 2 edges.
private readonly int _symbolCount;
// Type of the extracted TextElement.
private readonly Type _type;
// Collection of all local property values set on the extracted TextElement.
private readonly PropertyRecord []_localValues;
// Resources defined locally on the TextElement
private readonly ResourceDictionary _resources;
// TableColumns collection
private readonly TableColumn[] _columns;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// File: TextTreeExtractElementUndoUnit.cs
//
// Description: Undo unit for TextContainer.ExtractElement calls.
//
// History:
// 03/03/2004 : benwest - Created
//
//---------------------------------------------------------------------------
using System;
using MS.Internal;
namespace System.Windows.Documents
{
// Undo unit for TextContainer.ExtractElement calls.
internal class TextTreeExtractElementUndoUnit : TextTreeUndoUnit
{
//-----------------------------------------------------
//
// 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 = LocalValueEnumeratorToArray(elementNode.TextElement.GetLocalValueEnumerator());
_resources = elementNode.TextElement.Resources;
// Table requires additional work for storing its Columns collection
if (elementNode.TextElement is Table)
{
_columns = TextTreeDeleteContentUndoUnit.SaveColumns((Table)elementNode.TextElement);
}
}
#endregion Constructors
//------------------------------------------------------
//
// 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.
//
this.TextContainer.SetValues(end, ArrayToLocalValueEnumerator(_localValues));
if (element is Table)
{
TextTreeDeleteContentUndoUnit.RestoreColumns((Table)element, _columns);
}
}
#endregion Public Methods
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
// Count of symbols covered by the extracted TextElement, including its 2 edges.
private readonly int _symbolCount;
// Type of the extracted TextElement.
private readonly Type _type;
// Collection of all local property values set on the extracted TextElement.
private readonly PropertyRecord []_localValues;
// Resources defined locally on the TextElement
private readonly ResourceDictionary _resources;
// TableColumns collection
private readonly TableColumn[] _columns;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Directory.cs
- SqlAliaser.cs
- ManagementExtension.cs
- DocumentReferenceCollection.cs
- NativeMethods.cs
- WeakReference.cs
- AccessDataSourceDesigner.cs
- BroadcastEventHelper.cs
- ClusterSafeNativeMethods.cs
- FileRecordSequenceHelper.cs
- GPRECT.cs
- DBDataPermission.cs
- DataColumnCollection.cs
- ThousandthOfEmRealPoints.cs
- loginstatus.cs
- VarInfo.cs
- C14NUtil.cs
- BeginEvent.cs
- NameValueConfigurationCollection.cs
- Html32TextWriter.cs
- ProtocolsSection.cs
- RTLAwareMessageBox.cs
- CriticalExceptions.cs
- LinearGradientBrush.cs
- ToolStripItemClickedEventArgs.cs
- DataGridViewTopRowAccessibleObject.cs
- SQLRoleProvider.cs
- ArrayHelper.cs
- SystemUnicastIPAddressInformation.cs
- CommentEmitter.cs
- EntityConnectionStringBuilderItem.cs
- ToggleButtonAutomationPeer.cs
- RadioButton.cs
- EntityModelBuildProvider.cs
- ReliabilityContractAttribute.cs
- WebPartHelpVerb.cs
- SafeViewOfFileHandle.cs
- IpcChannelHelper.cs
- ImageButton.cs
- ForEachAction.cs
- PropertyCondition.cs
- TextRangeEditTables.cs
- sqlstateclientmanager.cs
- OleDbError.cs
- NameTable.cs
- Point.cs
- ProxyFragment.cs
- WebScriptMetadataInstanceContextProvider.cs
- SortQuery.cs
- DebuggerAttributes.cs
- ExceptionRoutedEventArgs.cs
- CommentEmitter.cs
- XmlRootAttribute.cs
- HitTestResult.cs
- IItemContainerGenerator.cs
- SystemIcmpV6Statistics.cs
- TimeoutException.cs
- WmpBitmapEncoder.cs
- _ContextAwareResult.cs
- RegexCharClass.cs
- ConfigurationValues.cs
- ByteStorage.cs
- RuleRef.cs
- DrawingCollection.cs
- GridView.cs
- DBSchemaTable.cs
- ParallelTimeline.cs
- WindowsEditBox.cs
- EnumCodeDomSerializer.cs
- Vector3DCollectionConverter.cs
- XmlWriterSettings.cs
- RootBrowserWindowProxy.cs
- XmlCollation.cs
- HttpCookie.cs
- DebuggerAttributes.cs
- DataGridViewCellEventArgs.cs
- DataGridTextBoxColumn.cs
- GridEntry.cs
- ElementHost.cs
- QilXmlWriter.cs
- CodeGeneratorAttribute.cs
- httpserverutility.cs
- X509SecurityTokenParameters.cs
- XPathNavigatorReader.cs
- ImportCatalogPart.cs
- XmlSchemaNotation.cs
- ElasticEase.cs
- DataBoundControl.cs
- SystemIPGlobalProperties.cs
- ControlCachePolicy.cs
- GCHandleCookieTable.cs
- DomainUpDown.cs
- Pen.cs
- XmlWriterSettings.cs
- HostProtectionException.cs
- StreamGeometry.cs
- ContainerControl.cs
- WebPartEditVerb.cs
- TablePatternIdentifiers.cs
- WaitHandleCannotBeOpenedException.cs