Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Model / CollectionChange.cs / 1305376 / CollectionChange.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System.Runtime; class CollectionChange : ModelChange { public ModelItemCollection Collection { get; set; } public int Index { get; set; } public ModelItem Item { get; set; } public OperationType Operation { get; set; } public ModelTreeManager ModelTreeManager { get; set; } public override string Description { get { return this.Operation == OperationType.Insert ? SR.CollectionAddEditingScopeDescription : SR.CollectionRemoveEditingScopeDescription; } } public override bool Apply() { switch (this.Operation) { case OperationType.Insert: ApplyInsert(); break; case OperationType.Delete: ApplyDelete(); break; default: Fx.Assert("Operation should be Insert or Delete"); break; } return true; } private void ApplyDelete() { Fx.Assert(this.ModelTreeManager != null, "ModelTreeManager cannot be null."); Fx.Assert(this.Collection != null, "this.Collection cannot be null."); if (this.Index >= 0) { ((ModelItemCollectionImpl)this.Collection).RemoveAtCore(this.Index); } else { Fx.Assert(this.Index == -1, "-1 must be used to indicate Remove(item)"); this.Index = this.Collection.IndexOf(this.Item); ((ModelItemCollectionImpl)this.Collection).RemoveCore(this.Item); } // if no more this.Item exists in this.Collection, then this.Item should be released from the ModelTree. if (this.Collection.IndexOf(this.Item) == -1) { ((IModelTreeItem)this.Item).RemoveParent(this.Collection); this.ModelTreeManager.ReleaseModelItem(this.Item, this.Collection); } this.ModelTreeManager.NotifyCollectionRemove(this.Item); } private void ApplyInsert() { Fx.Assert(this.ModelTreeManager != null, "ModelTreeManager cannot be null."); Fx.Assert(this.Collection != null, "this.Collection cannot be null."); this.ModelTreeManager.ReAddModelItemToModelTree(this.Item); if (this.Index >= 0) { ((ModelItemCollectionImpl)this.Collection).InsertCore(this.Index, this.Item); } else { Fx.Assert(this.Index == -1, "-1 must be used to indicate Add(item)"); this.Index = this.Collection.Count; ((ModelItemCollectionImpl)this.Collection).AddCore(this.Item); } this.ModelTreeManager.NotifyCollectionInsert(this.Item); } public override Change GetInverse() { OperationType reverseOperation = this.Operation == OperationType.Insert ? OperationType.Delete : OperationType.Insert; return new CollectionChange() { Collection = this.Collection, Operation = reverseOperation, Item = this.Item, ModelTreeManager = this.ModelTreeManager, Index = this.Index }; } public enum OperationType { Insert, Delete } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System.Runtime; class CollectionChange : ModelChange { public ModelItemCollection Collection { get; set; } public int Index { get; set; } public ModelItem Item { get; set; } public OperationType Operation { get; set; } public ModelTreeManager ModelTreeManager { get; set; } public override string Description { get { return this.Operation == OperationType.Insert ? SR.CollectionAddEditingScopeDescription : SR.CollectionRemoveEditingScopeDescription; } } public override bool Apply() { switch (this.Operation) { case OperationType.Insert: ApplyInsert(); break; case OperationType.Delete: ApplyDelete(); break; default: Fx.Assert("Operation should be Insert or Delete"); break; } return true; } private void ApplyDelete() { Fx.Assert(this.ModelTreeManager != null, "ModelTreeManager cannot be null."); Fx.Assert(this.Collection != null, "this.Collection cannot be null."); if (this.Index >= 0) { ((ModelItemCollectionImpl)this.Collection).RemoveAtCore(this.Index); } else { Fx.Assert(this.Index == -1, "-1 must be used to indicate Remove(item)"); this.Index = this.Collection.IndexOf(this.Item); ((ModelItemCollectionImpl)this.Collection).RemoveCore(this.Item); } // if no more this.Item exists in this.Collection, then this.Item should be released from the ModelTree. if (this.Collection.IndexOf(this.Item) == -1) { ((IModelTreeItem)this.Item).RemoveParent(this.Collection); this.ModelTreeManager.ReleaseModelItem(this.Item, this.Collection); } this.ModelTreeManager.NotifyCollectionRemove(this.Item); } private void ApplyInsert() { Fx.Assert(this.ModelTreeManager != null, "ModelTreeManager cannot be null."); Fx.Assert(this.Collection != null, "this.Collection cannot be null."); this.ModelTreeManager.ReAddModelItemToModelTree(this.Item); if (this.Index >= 0) { ((ModelItemCollectionImpl)this.Collection).InsertCore(this.Index, this.Item); } else { Fx.Assert(this.Index == -1, "-1 must be used to indicate Add(item)"); this.Index = this.Collection.Count; ((ModelItemCollectionImpl)this.Collection).AddCore(this.Item); } this.ModelTreeManager.NotifyCollectionInsert(this.Item); } public override Change GetInverse() { OperationType reverseOperation = this.Operation == OperationType.Insert ? OperationType.Delete : OperationType.Insert; return new CollectionChange() { Collection = this.Collection, Operation = reverseOperation, Item = this.Item, ModelTreeManager = this.ModelTreeManager, Index = this.Index }; } public enum OperationType { Insert, Delete } } } // 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
- PaperSource.cs
- ConfigurationValidatorAttribute.cs
- SqlErrorCollection.cs
- _DigestClient.cs
- MDIControlStrip.cs
- SimpleMailWebEventProvider.cs
- ObjectDataSource.cs
- MyContact.cs
- PasswordPropertyTextAttribute.cs
- FileEnumerator.cs
- FloatAverageAggregationOperator.cs
- XmlQuerySequence.cs
- PlainXmlWriter.cs
- SoapTypeAttribute.cs
- HandlerBase.cs
- UpdatePanelTriggerCollection.cs
- DeferredElementTreeState.cs
- HandleExceptionArgs.cs
- SplineKeyFrames.cs
- NegotiationTokenProvider.cs
- ConfigurationConverterBase.cs
- Literal.cs
- MetaModel.cs
- PackageDigitalSignatureManager.cs
- TextEffectResolver.cs
- XMLSchema.cs
- SerializationSectionGroup.cs
- RestHandlerFactory.cs
- ListView.cs
- URIFormatException.cs
- PageParser.cs
- SplineQuaternionKeyFrame.cs
- ADMembershipProvider.cs
- CollectionType.cs
- ProcessModelInfo.cs
- ConnectionPointCookie.cs
- LocalsItemDescription.cs
- SessionStateItemCollection.cs
- SoapExtensionReflector.cs
- AssemblyInfo.cs
- LabelDesigner.cs
- FileDialog_Vista.cs
- DataGridViewCellValueEventArgs.cs
- PackWebRequestFactory.cs
- ClickablePoint.cs
- Parameter.cs
- TypeBuilderInstantiation.cs
- PeerToPeerException.cs
- ConfigurationStrings.cs
- CodeSpit.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- EventArgs.cs
- PerformanceCounterPermissionAttribute.cs
- ValidationPropertyAttribute.cs
- StrokeSerializer.cs
- Lasso.cs
- Decoder.cs
- SqlAggregateChecker.cs
- SoapExtensionTypeElement.cs
- StrokeNodeOperations.cs
- CacheAxisQuery.cs
- DynamicMethod.cs
- Trace.cs
- XmlSchemaAny.cs
- COM2Properties.cs
- HttpVersion.cs
- ControlAdapter.cs
- ArgumentException.cs
- QuaternionConverter.cs
- SoapReflectionImporter.cs
- XmlText.cs
- EmptyEnumerable.cs
- TableLayoutPanelCellPosition.cs
- CodeExpressionRuleDeclaration.cs
- PageCodeDomTreeGenerator.cs
- DPCustomTypeDescriptor.cs
- BaseTemplateParser.cs
- BufferedWebEventProvider.cs
- ReflectionPermission.cs
- ValidationHelpers.cs
- AccessViolationException.cs
- DataRecordInternal.cs
- LogEntrySerialization.cs
- LifetimeManager.cs
- UInt64Storage.cs
- IdentityReference.cs
- DataBindEngine.cs
- TraceSwitch.cs
- PackagingUtilities.cs
- SettingsProperty.cs
- RenderTargetBitmap.cs
- IndexerNameAttribute.cs
- ObjectDataSourceDisposingEventArgs.cs
- SourceElementsCollection.cs
- SerialStream.cs
- Thread.cs
- AppDomainAttributes.cs
- HtmlInputReset.cs
- SafeMILHandleMemoryPressure.cs
- RecordManager.cs