Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / System / Windows / Documents / TextTreeUndoUnit.cs / 1 / TextTreeUndoUnit.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Base class for all TextContainer undo units.
//
// History:
// 03/03/2004 : benwest - Created
//
//---------------------------------------------------------------------------
using System;
using MS.Internal;
using MS.Internal.Documents;
namespace System.Windows.Documents
{
// Base class for all TextContainer undo units.
internal abstract class TextTreeUndoUnit : IUndoUnit
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
// Create a new undo unit instance.
internal TextTreeUndoUnit(TextContainer tree, int symbolOffset)
{
_tree = tree;
_symbolOffset = symbolOffset;
_treeContentHashCode = _tree.GetContentHashCode();
}
#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 void Do()
{
_tree.BeginChange();
try
{
DoCore();
}
finally
{
_tree.EndChange();
}
}
// Worker for Do method, implemented by derived class.
public abstract void DoCore();
// Called by the undo manager. TextContainer undo units never merge.
public bool Merge(IUndoUnit unit)
{
Invariant.Assert(unit != null);
return false;
}
#endregion Public Methods
//------------------------------------------------------
//
// Protected Properties
//
//------------------------------------------------------
#region Protected Properties
// TextContainer associated with this undo unit.
protected TextContainer TextContainer
{
get { return _tree; }
}
// Offset in symbols of this undo unit within the TextContainer content.
protected int SymbolOffset
{
get { return _symbolOffset; }
}
#endregion Protected Properties
//-----------------------------------------------------
//
// Internal Methods
//
//------------------------------------------------------
#region Internal Methods
// Explicitly sets this undo unit's content hash code to match the
// current tree state. This happens automatically in the ctor, but
// some undo units (for delte operations) need to be initialized before
// the content is modified, in which case they call this method
// afterwards.
internal void SetTreeHashCode()
{
_treeContentHashCode = _tree.GetContentHashCode();
}
// Verifies the TextContainer state matches the original state when this undo
// unit was created. Because we use symbol offsets to track the
// position of the content to modify, errors in the undo code or reentrant
// document edits by random code could potentially
// corrupt data rather than raise an immediate exception.
//
// This method uses Invariant.Assert to trigger a FailFast in the case an error
// is detected, before we get a chance to corrupt data.
internal void VerifyTreeContentHashCode()
{
if (_tree.GetContentHashCode() != _treeContentHashCode)
{
// Data is irrecoverably corrupted, shut down!
Invariant.Assert(false, "Undo unit is out of [....] with TextContainer!");
}
}
// Converts a LocalValueEnumerator into an array of PropertyRecords.
// The array is safe to cache, LocalValueEnumerators are not.
internal static PropertyRecord[] LocalValueEnumeratorToArray(LocalValueEnumerator valuesEnumerator)
{
PropertyRecord[] records = new PropertyRecord[valuesEnumerator.Count];
int count = 0;
valuesEnumerator.Reset();
while (valuesEnumerator.MoveNext())
{
DependencyProperty dp = valuesEnumerator.Current.Property;
if (!dp.ReadOnly)
{
records[count].Property = dp;
records[count].Value = valuesEnumerator.Current.Value;
count++;
}
}
PropertyRecord[] trimmedResult;
if(valuesEnumerator.Count != count)
{
trimmedResult = new PropertyRecord[count];
for(int i=0; i
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Base class for all TextContainer undo units.
//
// History:
// 03/03/2004 : benwest - Created
//
//---------------------------------------------------------------------------
using System;
using MS.Internal;
using MS.Internal.Documents;
namespace System.Windows.Documents
{
// Base class for all TextContainer undo units.
internal abstract class TextTreeUndoUnit : IUndoUnit
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
// Create a new undo unit instance.
internal TextTreeUndoUnit(TextContainer tree, int symbolOffset)
{
_tree = tree;
_symbolOffset = symbolOffset;
_treeContentHashCode = _tree.GetContentHashCode();
}
#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 void Do()
{
_tree.BeginChange();
try
{
DoCore();
}
finally
{
_tree.EndChange();
}
}
// Worker for Do method, implemented by derived class.
public abstract void DoCore();
// Called by the undo manager. TextContainer undo units never merge.
public bool Merge(IUndoUnit unit)
{
Invariant.Assert(unit != null);
return false;
}
#endregion Public Methods
//------------------------------------------------------
//
// Protected Properties
//
//------------------------------------------------------
#region Protected Properties
// TextContainer associated with this undo unit.
protected TextContainer TextContainer
{
get { return _tree; }
}
// Offset in symbols of this undo unit within the TextContainer content.
protected int SymbolOffset
{
get { return _symbolOffset; }
}
#endregion Protected Properties
//-----------------------------------------------------
//
// Internal Methods
//
//------------------------------------------------------
#region Internal Methods
// Explicitly sets this undo unit's content hash code to match the
// current tree state. This happens automatically in the ctor, but
// some undo units (for delte operations) need to be initialized before
// the content is modified, in which case they call this method
// afterwards.
internal void SetTreeHashCode()
{
_treeContentHashCode = _tree.GetContentHashCode();
}
// Verifies the TextContainer state matches the original state when this undo
// unit was created. Because we use symbol offsets to track the
// position of the content to modify, errors in the undo code or reentrant
// document edits by random code could potentially
// corrupt data rather than raise an immediate exception.
//
// This method uses Invariant.Assert to trigger a FailFast in the case an error
// is detected, before we get a chance to corrupt data.
internal void VerifyTreeContentHashCode()
{
if (_tree.GetContentHashCode() != _treeContentHashCode)
{
// Data is irrecoverably corrupted, shut down!
Invariant.Assert(false, "Undo unit is out of [....] with TextContainer!");
}
}
// Converts a LocalValueEnumerator into an array of PropertyRecords.
// The array is safe to cache, LocalValueEnumerators are not.
internal static PropertyRecord[] LocalValueEnumeratorToArray(LocalValueEnumerator valuesEnumerator)
{
PropertyRecord[] records = new PropertyRecord[valuesEnumerator.Count];
int count = 0;
valuesEnumerator.Reset();
while (valuesEnumerator.MoveNext())
{
DependencyProperty dp = valuesEnumerator.Current.Property;
if (!dp.ReadOnly)
{
records[count].Property = dp;
records[count].Value = valuesEnumerator.Current.Value;
count++;
}
}
PropertyRecord[] trimmedResult;
if(valuesEnumerator.Count != count)
{
trimmedResult = new PropertyRecord[count];
for(int i=0; i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WhitespaceRuleLookup.cs
- TypeDescriptor.cs
- RequestResponse.cs
- FigureHelper.cs
- ImageDrawing.cs
- EntitySqlException.cs
- ButtonBaseAutomationPeer.cs
- ArrayElementGridEntry.cs
- ErrorHandlerModule.cs
- CreateParams.cs
- EdmFunctions.cs
- WindowsAltTab.cs
- Dynamic.cs
- Matrix3D.cs
- MetaData.cs
- HyperLink.cs
- ConstNode.cs
- SafeLocalAllocation.cs
- AliasGenerator.cs
- GcHandle.cs
- LocationUpdates.cs
- XmlEventCache.cs
- TriState.cs
- Soap11ServerProtocol.cs
- JavaScriptString.cs
- precedingquery.cs
- DocumentGridContextMenu.cs
- ToolStripSplitButton.cs
- SamlSerializer.cs
- ClientSettingsProvider.cs
- OracleTransaction.cs
- CLSCompliantAttribute.cs
- Catch.cs
- ReliableInputConnection.cs
- ColumnCollection.cs
- MasterPageBuildProvider.cs
- ConstraintCollection.cs
- VisualStyleRenderer.cs
- ErrorFormatterPage.cs
- GradientBrush.cs
- StylusPointPropertyInfoDefaults.cs
- Inline.cs
- DataStreamFromComStream.cs
- SettingsPropertyValueCollection.cs
- ParallelTimeline.cs
- OleDbPermission.cs
- SchemaImporterExtensionElement.cs
- UserNamePasswordServiceCredential.cs
- Application.cs
- DefaultClaimSet.cs
- ElementMarkupObject.cs
- ScrollBarAutomationPeer.cs
- WebEvents.cs
- ErrorWebPart.cs
- SafeFileMappingHandle.cs
- BooleanConverter.cs
- DragDeltaEventArgs.cs
- XmlSiteMapProvider.cs
- XmlFormatWriterGenerator.cs
- EditorZone.cs
- CommentEmitter.cs
- NotImplementedException.cs
- WebPartUserCapability.cs
- X509ChainElement.cs
- XmlSerializer.cs
- SettingsContext.cs
- Effect.cs
- DisposableCollectionWrapper.cs
- Timer.cs
- WindowsFormsSectionHandler.cs
- SimpleMailWebEventProvider.cs
- DockingAttribute.cs
- Dictionary.cs
- DataGridTableCollection.cs
- MultipartIdentifier.cs
- PropertyValueUIItem.cs
- GlobalId.cs
- RuleAttributes.cs
- Rectangle.cs
- DataGridViewRow.cs
- ScrollBar.cs
- CustomValidator.cs
- WebPartDisplayMode.cs
- ResourceCollectionInfo.cs
- CodeDirectiveCollection.cs
- EmbeddedObject.cs
- Base64Decoder.cs
- Calendar.cs
- DataConnectionHelper.cs
- BinaryFormatterWriter.cs
- DecimalStorage.cs
- DataColumnCollection.cs
- WindowsTooltip.cs
- securitymgrsite.cs
- HttpListenerRequestTraceRecord.cs
- WebResponse.cs
- ProtocolsSection.cs
- DirectoryNotFoundException.cs
- SqlInternalConnectionTds.cs
- Accessors.cs