Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Model / EditingScope.cs / 1305376 / EditingScope.cs
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------
namespace System.Activities.Presentation.Model
{
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime;
[Fx.Tag.XamlVisible(false)]
public class EditingScope : ModelEditingScope
{
ModelTreeManager modelTreeManager;
EditingScope outerScope;
List changes;
List appliedChanges;
bool suppressUndo;
internal EditingScope(ModelTreeManager modelTreeManager, EditingScope outerScope)
{
this.modelTreeManager = modelTreeManager;
this.changes = new List();
this.outerScope = outerScope;
this.HasModelChanges = false;
}
private EditingScope()
{
}
public bool HasEffectiveChanges
{
get
{
return this.appliedChanges != null && this.appliedChanges.Count > 0;
}
}
internal bool HasModelChanges
{
get;
private set;
}
internal bool SuppressUndo
{
get
{
return this.suppressUndo;
}
set
{
Fx.Assert(!value || this.outerScope == null, "If we are suppressing undo, then we are not nested within another editingScope, otherwise suppress undo won't work.");
this.suppressUndo = value;
}
}
public List Changes
{
get
{
return changes;
}
}
protected override void OnComplete()
{
if (this.outerScope == null)
{
appliedChanges = new List();
int startIndex = 0;
// pump all changes, applying changes can add more changes to the end of the change list.
while (startIndex < this.Changes.Count)
{
// pickup the new changes
List changesToApply = this.Changes.GetRange(startIndex, this.Changes.Count - startIndex);
startIndex = this.Changes.Count;
foreach (Change change in changesToApply)
{
if (change != null && change.Apply())
{
appliedChanges.Add(change);
}
if (change is ModelChange)
{
this.HasModelChanges = true;
}
}
}
}
else
{
outerScope.Changes.AddRange(this.Changes);
}
this.modelTreeManager.OnEditingScopeCompleted(this);
}
protected override bool CanComplete()
{
return this.modelTreeManager.CanEditingScopeComplete(this);
}
protected override void OnRevert(bool finalizing)
{
if (this.appliedChanges != null)
{
List revertChanges = new List();
foreach (Change change in this.appliedChanges)
{
revertChanges.Add(change.GetInverse());
}
revertChanges.Reverse();
foreach (Change change in revertChanges)
{
change.Apply();
this.appliedChanges.RemoveAt(this.appliedChanges.Count - 1);
}
}
this.modelTreeManager.OnEditingScopeReverted(this);
}
protected override bool OnException(Exception e)
{
return false;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ConfigXmlSignificantWhitespace.cs
- StopStoryboard.cs
- LoginCancelEventArgs.cs
- Table.cs
- NullableConverter.cs
- FileEnumerator.cs
- TableColumn.cs
- CodeDirectoryCompiler.cs
- TextHintingModeValidation.cs
- ReachSerializer.cs
- MailBnfHelper.cs
- SqlConnection.cs
- Quad.cs
- _ProxyRegBlob.cs
- ExpandoObject.cs
- GridPatternIdentifiers.cs
- HtmlButton.cs
- OleDragDropHandler.cs
- Vector3DConverter.cs
- ExpressionValueEditor.cs
- sqlstateclientmanager.cs
- NativeMethods.cs
- ImageListUtils.cs
- TimelineGroup.cs
- DoubleAnimation.cs
- ErrorFormatterPage.cs
- SqlNotificationEventArgs.cs
- CodeDelegateInvokeExpression.cs
- TypeInitializationException.cs
- ResetableIterator.cs
- HashHelper.cs
- RegexRunner.cs
- OneOf.cs
- DetailsViewPagerRow.cs
- SafeMarshalContext.cs
- DynamicField.cs
- WebPartConnectVerb.cs
- Effect.cs
- KeyInterop.cs
- TableSectionStyle.cs
- SQLUtility.cs
- TextEditorMouse.cs
- TraceFilter.cs
- AbstractDataSvcMapFileLoader.cs
- ApplicationFileParser.cs
- XmlQualifiedName.cs
- TemplateGroupCollection.cs
- DataControlFieldHeaderCell.cs
- CountAggregationOperator.cs
- SortDescription.cs
- XDeferredAxisSource.cs
- ProxyWebPartManager.cs
- HttpProxyTransportBindingElement.cs
- ServiceReflector.cs
- ContainerParagraph.cs
- PassportAuthentication.cs
- WebPartCancelEventArgs.cs
- ButtonAutomationPeer.cs
- ActiveXHelper.cs
- XmlSchemaSubstitutionGroup.cs
- ObjectItemCachedAssemblyLoader.cs
- DictionaryKeyPropertyAttribute.cs
- ApplicationId.cs
- GenericIdentity.cs
- EntitySqlQueryState.cs
- ResourceContainer.cs
- SiteMapNode.cs
- XNodeNavigator.cs
- WindowsTreeView.cs
- SerialPort.cs
- APCustomTypeDescriptor.cs
- XmlProcessingInstruction.cs
- BufferAllocator.cs
- XmlSerializationReader.cs
- SizeF.cs
- DataGridColumn.cs
- DataListItem.cs
- CodeRegionDirective.cs
- InkCanvasFeedbackAdorner.cs
- COMException.cs
- TcpAppDomainProtocolHandler.cs
- ProxyWebPartManager.cs
- RootAction.cs
- AttributeInfo.cs
- SettingsProviderCollection.cs
- PseudoWebRequest.cs
- IndividualDeviceConfig.cs
- SoapAttributes.cs
- EmptyControlCollection.cs
- ProtectedConfiguration.cs
- DiscoveryDocumentLinksPattern.cs
- NullableIntMinMaxAggregationOperator.cs
- ColorTransform.cs
- SqlServices.cs
- UnsafeNativeMethodsPenimc.cs
- DetailsViewRow.cs
- DialogResultConverter.cs
- MappedMetaModel.cs
- BamlResourceSerializer.cs
- LinqDataSourceHelper.cs