Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- AsyncCompletedEventArgs.cs
- XmlSchemaImporter.cs
- InputMethodStateTypeInfo.cs
- Int32CAMarshaler.cs
- PackageProperties.cs
- MobileListItemCollection.cs
- XmlProcessingInstruction.cs
- DebuggerAttributes.cs
- DocumentGrid.cs
- ParallelDesigner.xaml.cs
- ThreadStartException.cs
- StyleBamlTreeBuilder.cs
- XmlDictionaryWriter.cs
- SecurityUtils.cs
- SmiEventSink_Default.cs
- StringPropertyBuilder.cs
- ISAPIApplicationHost.cs
- PopupEventArgs.cs
- HoistedLocals.cs
- HtmlLink.cs
- Span.cs
- DataGridViewRowPrePaintEventArgs.cs
- HtmlMeta.cs
- BindingElementExtensionElement.cs
- CompModSwitches.cs
- PropertyDescriptors.cs
- Visitor.cs
- QuaternionRotation3D.cs
- DisplayMemberTemplateSelector.cs
- FormClosingEvent.cs
- WebPartDisplayModeCollection.cs
- PaintEvent.cs
- RequestCachePolicy.cs
- LogLogRecordHeader.cs
- TypeInfo.cs
- AVElementHelper.cs
- DetailsViewRow.cs
- TdsParameterSetter.cs
- OracleEncoding.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- MenuAdapter.cs
- CollectionViewProxy.cs
- Zone.cs
- UriScheme.cs
- compensatingcollection.cs
- SettingsSavedEventArgs.cs
- SqlBuilder.cs
- Dictionary.cs
- CachedRequestParams.cs
- SqlLiftWhereClauses.cs
- DataRecord.cs
- GZipStream.cs
- SspiWrapper.cs
- X509ClientCertificateAuthenticationElement.cs
- FreezableOperations.cs
- ColorAnimation.cs
- _MultipleConnectAsync.cs
- EntityStoreSchemaGenerator.cs
- BinarySerializer.cs
- MSAAWinEventWrap.cs
- CodeExporter.cs
- odbcmetadatacolumnnames.cs
- DataBoundControlHelper.cs
- SoapParser.cs
- PropertyBuilder.cs
- SafeRightsManagementSessionHandle.cs
- ResourceExpressionBuilder.cs
- FormViewPageEventArgs.cs
- AssertHelper.cs
- ContentType.cs
- LinearKeyFrames.cs
- ActivityTypeDesigner.xaml.cs
- DelegatingMessage.cs
- SoapSchemaExporter.cs
- X500Name.cs
- CheckBoxPopupAdapter.cs
- CreateUserErrorEventArgs.cs
- ArrayEditor.cs
- Stacktrace.cs
- RemoteWebConfigurationHostStream.cs
- ColumnHeaderConverter.cs
- SqlDataSource.cs
- UnregisterInfo.cs
- WebZone.cs
- DataGridViewComboBoxEditingControl.cs
- DispatcherSynchronizationContext.cs
- shaper.cs
- AliasedExpr.cs
- BamlTreeMap.cs
- X509Utils.cs
- LinkLabel.cs
- PrintController.cs
- SmiEventSink_DeferedProcessing.cs
- TypedRowGenerator.cs
- ReadOnlyDictionary.cs
- ContractComponent.cs
- GroupDescription.cs
- WebPartConnectionsEventArgs.cs
- CodeIterationStatement.cs
- MobileComponentEditorPage.cs