Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / ChangeBlockUndoRecord.cs / 1 / ChangeBlockUndoRecord.cs
//----------------------------------------------------------------------------
//
// File: ChangeBlockUndoRecord.cs
//
// Description: Undo wrapper for any edit on or through a TextRange or
// TextContainer.
//
//---------------------------------------------------------------------------
using System;
using System.Windows;
using MS.Internal;
using MS.Internal.Documents;
namespace System.Windows.Documents
{
// Undo wrapper for any edit on or through a TextRange or TextContainer.
internal class ChangeBlockUndoRecord
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
// Constructor, called when a change block is opening.
internal ChangeBlockUndoRecord(ITextContainer textContainer, string actionDescription)
{
if (textContainer.UndoManager != null)
{
_undoManager = textContainer.UndoManager;
if (_undoManager.IsEnabled)
{
// Don't bother opening an undo unit if the owning control is
// still being initialized (ie, programmatic load by parser).
if (textContainer.TextView != null)
{
// Don't bother opening a new undo unit if we're already nested
// inside another.
if (_undoManager.OpenedUnit == null)
{
if (textContainer.TextSelection != null)
{
_parentUndoUnit = new TextParentUndoUnit(textContainer.TextSelection);
}
else
{
_parentUndoUnit = new ParentUndoUnit(actionDescription);
}
_undoManager.Open(_parentUndoUnit);
}
}
else
{
// If the owning control isn't initialized (parser is still running),
// don't add anything to the undo record. Instead, clear it.
_undoManager.Clear();
}
}
}
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
// Called when a change block is closing.
internal void OnEndChange()
{
// Commit our undo unit.
if (_parentUndoUnit != null)
{
IParentUndoUnit openedUnit;
if (_parentUndoUnit.Container is UndoManager)
{
openedUnit = ((UndoManager)_parentUndoUnit.Container).OpenedUnit;
}
else
{
openedUnit = ((IParentUndoUnit)_parentUndoUnit.Container).OpenedUnit;
}
// UIElementPropertyUndoUnit can clear the undo stack if a change is made to a databound property
if (openedUnit == _parentUndoUnit)
{
if (_parentUndoUnit is TextParentUndoUnit)
{
((TextParentUndoUnit)_parentUndoUnit).RecordRedoSelectionState();
}
Invariant.Assert(_undoManager != null);
_undoManager.Close(_parentUndoUnit, (_parentUndoUnit.LastUnit != null) ? UndoCloseAction.Commit : UndoCloseAction.Discard);
}
}
}
#endregion Internal Methods
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
private readonly UndoManager _undoManager;
private readonly IParentUndoUnit _parentUndoUnit;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// File: ChangeBlockUndoRecord.cs
//
// Description: Undo wrapper for any edit on or through a TextRange or
// TextContainer.
//
//---------------------------------------------------------------------------
using System;
using System.Windows;
using MS.Internal;
using MS.Internal.Documents;
namespace System.Windows.Documents
{
// Undo wrapper for any edit on or through a TextRange or TextContainer.
internal class ChangeBlockUndoRecord
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
// Constructor, called when a change block is opening.
internal ChangeBlockUndoRecord(ITextContainer textContainer, string actionDescription)
{
if (textContainer.UndoManager != null)
{
_undoManager = textContainer.UndoManager;
if (_undoManager.IsEnabled)
{
// Don't bother opening an undo unit if the owning control is
// still being initialized (ie, programmatic load by parser).
if (textContainer.TextView != null)
{
// Don't bother opening a new undo unit if we're already nested
// inside another.
if (_undoManager.OpenedUnit == null)
{
if (textContainer.TextSelection != null)
{
_parentUndoUnit = new TextParentUndoUnit(textContainer.TextSelection);
}
else
{
_parentUndoUnit = new ParentUndoUnit(actionDescription);
}
_undoManager.Open(_parentUndoUnit);
}
}
else
{
// If the owning control isn't initialized (parser is still running),
// don't add anything to the undo record. Instead, clear it.
_undoManager.Clear();
}
}
}
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
// Called when a change block is closing.
internal void OnEndChange()
{
// Commit our undo unit.
if (_parentUndoUnit != null)
{
IParentUndoUnit openedUnit;
if (_parentUndoUnit.Container is UndoManager)
{
openedUnit = ((UndoManager)_parentUndoUnit.Container).OpenedUnit;
}
else
{
openedUnit = ((IParentUndoUnit)_parentUndoUnit.Container).OpenedUnit;
}
// UIElementPropertyUndoUnit can clear the undo stack if a change is made to a databound property
if (openedUnit == _parentUndoUnit)
{
if (_parentUndoUnit is TextParentUndoUnit)
{
((TextParentUndoUnit)_parentUndoUnit).RecordRedoSelectionState();
}
Invariant.Assert(_undoManager != null);
_undoManager.Close(_parentUndoUnit, (_parentUndoUnit.LastUnit != null) ? UndoCloseAction.Commit : UndoCloseAction.Discard);
}
}
}
#endregion Internal Methods
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
private readonly UndoManager _undoManager;
private readonly IParentUndoUnit _parentUndoUnit;
#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
- SchemaElementLookUpTable.cs
- NotifyIcon.cs
- OdbcUtils.cs
- XPathNavigatorKeyComparer.cs
- odbcmetadatacollectionnames.cs
- ListBoxItem.cs
- StringFreezingAttribute.cs
- StackSpiller.cs
- _NtlmClient.cs
- NetworkAddressChange.cs
- TitleStyle.cs
- OracleFactory.cs
- AjaxFrameworkAssemblyAttribute.cs
- QilXmlWriter.cs
- ContractReference.cs
- ToolStripSplitStackLayout.cs
- Menu.cs
- FunctionDefinition.cs
- WeakReferenceEnumerator.cs
- LogExtent.cs
- QueryExpr.cs
- ActivityBindForm.Designer.cs
- OpCellTreeNode.cs
- ComplexObject.cs
- xsdvalidator.cs
- SynchronousChannel.cs
- GenerateTemporaryTargetAssembly.cs
- WindowVisualStateTracker.cs
- ApplicationContext.cs
- UIElement.cs
- MessageSmuggler.cs
- DataObjectCopyingEventArgs.cs
- XmlSchemaSubstitutionGroup.cs
- BitSet.cs
- ObjectTag.cs
- HttpCacheParams.cs
- DropSource.cs
- NumericUpDownAccelerationCollection.cs
- SqlUserDefinedAggregateAttribute.cs
- RequestQueryProcessor.cs
- ControlAdapter.cs
- DataGridViewImageColumn.cs
- SqlDependency.cs
- X509UI.cs
- Size3D.cs
- TrackingMemoryStreamFactory.cs
- ServiceAppDomainAssociationProvider.cs
- hresults.cs
- FileUtil.cs
- MobileUserControlDesigner.cs
- Ports.cs
- MorphHelpers.cs
- HostingPreferredMapPath.cs
- EntityCommand.cs
- HttpCapabilitiesEvaluator.cs
- InternalRelationshipCollection.cs
- StorageFunctionMapping.cs
- HttpResponseInternalWrapper.cs
- EdmType.cs
- ScriptModule.cs
- Array.cs
- XmlReflectionMember.cs
- PrimaryKeyTypeConverter.cs
- StaticExtension.cs
- SiteMapDataSource.cs
- FixUpCollection.cs
- PageThemeParser.cs
- ClientTarget.cs
- ColumnCollection.cs
- BindingMAnagerBase.cs
- CodeConstructor.cs
- SecurityRuntime.cs
- EraserBehavior.cs
- ConfigXmlSignificantWhitespace.cs
- SQLDateTimeStorage.cs
- DiagnosticsConfigurationHandler.cs
- DependencyPropertyKind.cs
- wmiprovider.cs
- DataGridViewImageColumn.cs
- Vars.cs
- PropertyValueUIItem.cs
- WizardStepBase.cs
- DataSetMappper.cs
- WindowsAuthenticationModule.cs
- AssociationEndMember.cs
- ServiceSettingsResponseInfo.cs
- QueryMath.cs
- WebHeaderCollection.cs
- CodeNamespaceCollection.cs
- WorkflowServiceNamespace.cs
- FileSystemInfo.cs
- CodeVariableReferenceExpression.cs
- ThrowHelper.cs
- GB18030Encoding.cs
- ReadContentAsBinaryHelper.cs
- input.cs
- VisualTreeUtils.cs
- GeometryGroup.cs
- DesignerCategoryAttribute.cs
- Clause.cs