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
- DataGridViewRowCollection.cs
- UrlPath.cs
- View.cs
- XmlDataSource.cs
- GeneratedView.cs
- METAHEADER.cs
- Overlapped.cs
- ToolTip.cs
- RegexWriter.cs
- ParagraphVisual.cs
- ValidationError.cs
- FieldMetadata.cs
- MimeTypeMapper.cs
- DataServiceQuery.cs
- entityreference_tresulttype.cs
- BezierSegment.cs
- RNGCryptoServiceProvider.cs
- ConfigPathUtility.cs
- shaperfactoryquerycachekey.cs
- AssertFilter.cs
- ListBox.cs
- Dispatcher.cs
- WebPartTransformer.cs
- ContentElement.cs
- WebPartConnectionsEventArgs.cs
- HttpModuleCollection.cs
- EventBuilder.cs
- UserThread.cs
- TextEncodedRawTextWriter.cs
- Stack.cs
- DataControlPagerLinkButton.cs
- WizardPanelChangingEventArgs.cs
- SerializationObjectManager.cs
- CompositeDataBoundControl.cs
- ClientFormsIdentity.cs
- DataServiceRequestException.cs
- SQLBinaryStorage.cs
- SimpleTypeResolver.cs
- FSWPathEditor.cs
- XamlDesignerSerializationManager.cs
- MetadataItemCollectionFactory.cs
- HtmlControl.cs
- LoginStatusDesigner.cs
- HttpRequestWrapper.cs
- GridSplitter.cs
- BookmarkEventArgs.cs
- ObfuscationAttribute.cs
- SearchExpression.cs
- SynchronizationHandlesCodeDomSerializer.cs
- GridSplitter.cs
- RelatedCurrencyManager.cs
- PrintDialog.cs
- StackOverflowException.cs
- TypeDescriptionProvider.cs
- RedistVersionInfo.cs
- SizeConverter.cs
- SqlCacheDependency.cs
- SourceInterpreter.cs
- WebPartHeaderCloseVerb.cs
- GlyphsSerializer.cs
- TypeSystem.cs
- XPathBinder.cs
- SQLDateTimeStorage.cs
- ZipIOCentralDirectoryFileHeader.cs
- LocalizationComments.cs
- SafeRightsManagementPubHandle.cs
- CodeGroup.cs
- CellQuery.cs
- OdbcError.cs
- RecordsAffectedEventArgs.cs
- HtmlTableCell.cs
- BoundPropertyEntry.cs
- IDataContractSurrogate.cs
- AuthenticationService.cs
- LinearGradientBrush.cs
- LocalValueEnumerator.cs
- NativeMethodsCLR.cs
- JournalEntry.cs
- DataGridView.cs
- SiteMapHierarchicalDataSourceView.cs
- _LocalDataStoreMgr.cs
- UndoManager.cs
- ETagAttribute.cs
- DependencyObjectCodeDomSerializer.cs
- SoapConverter.cs
- ScopelessEnumAttribute.cs
- QilParameter.cs
- BypassElementCollection.cs
- DataRelation.cs
- Constraint.cs
- ValidationErrorCollection.cs
- AspNetSynchronizationContext.cs
- LinqDataSourceContextData.cs
- XmlSchemaParticle.cs
- SourceChangedEventArgs.cs
- EmptyReadOnlyDictionaryInternal.cs
- HttpPostedFile.cs
- ThrowHelper.cs
- StateChangeEvent.cs
- CollectionConverter.cs