Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- InstallerTypeAttribute.cs
- IntSecurity.cs
- TransformPattern.cs
- cookiecontainer.cs
- AsymmetricAlgorithm.cs
- ThemeableAttribute.cs
- GridItemCollection.cs
- WeakRefEnumerator.cs
- DocumentEventArgs.cs
- TemplateControl.cs
- FixedTextView.cs
- WinInetCache.cs
- TextCompositionEventArgs.cs
- SqlTriggerContext.cs
- LogStream.cs
- Size3D.cs
- OleDbCommandBuilder.cs
- TransformDescriptor.cs
- ClientData.cs
- WebServiceReceive.cs
- ErrorLog.cs
- VirtualDirectoryMappingCollection.cs
- DbProviderServices.cs
- Transactions.cs
- NumericUpDown.cs
- SqlMethodTransformer.cs
- PeerUnsafeNativeCryptMethods.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- ArrangedElement.cs
- ServicePointManager.cs
- SkinIDTypeConverter.cs
- XmlAnyElementAttribute.cs
- WebPageTraceListener.cs
- DateTimeConstantAttribute.cs
- ControlIdConverter.cs
- TabletDeviceInfo.cs
- SqlServer2KCompatibilityCheck.cs
- MouseButtonEventArgs.cs
- FlowStep.cs
- InputBinder.cs
- DataControlReference.cs
- XmlDigitalSignatureProcessor.cs
- NavigationProperty.cs
- SqlNamer.cs
- PermissionAttributes.cs
- Confirm.cs
- ByeOperationCD1AsyncResult.cs
- TextSchema.cs
- InteropBitmapSource.cs
- Journaling.cs
- PrimitiveDataContract.cs
- IIS7UserPrincipal.cs
- _SpnDictionary.cs
- CharUnicodeInfo.cs
- SqlFunctionAttribute.cs
- Sentence.cs
- Point4DValueSerializer.cs
- FrameworkContentElement.cs
- CalendarDay.cs
- WeakRefEnumerator.cs
- XmlSchemaGroup.cs
- PrimitiveSchema.cs
- ExternalCalls.cs
- SevenBitStream.cs
- SQLGuidStorage.cs
- Overlapped.cs
- DataGridViewCheckBoxColumn.cs
- XmlIncludeAttribute.cs
- SqlDataSourceView.cs
- _NegoState.cs
- DateTimeOffsetConverter.cs
- Misc.cs
- XPathEmptyIterator.cs
- Wizard.cs
- MetadataHelper.cs
- CodeSubDirectoriesCollection.cs
- SHA1CryptoServiceProvider.cs
- RootProfilePropertySettingsCollection.cs
- PermissionSet.cs
- RepeatButtonAutomationPeer.cs
- validation.cs
- ObjectDataSourceStatusEventArgs.cs
- ListBoxChrome.cs
- AppDomainShutdownMonitor.cs
- SqlMethodTransformer.cs
- FileUtil.cs
- Delegate.cs
- PageSettings.cs
- DecimalSumAggregationOperator.cs
- TypeConverterValueSerializer.cs
- _RequestLifetimeSetter.cs
- Point3DCollection.cs
- TripleDESCryptoServiceProvider.cs
- ExpressionHelper.cs
- DrawingContextDrawingContextWalker.cs
- FacetDescription.cs
- PreviewPageInfo.cs
- ManagedIStream.cs
- CacheRequest.cs
- WebPartConnectionsEventArgs.cs