Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / VisualBasicSettingsHandler.cs / 1305376 / VisualBasicSettingsHandler.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation { using System.ComponentModel; using Microsoft.VisualBasic.Activities; using System.Activities.Debugger; using System.Activities.Presentation.Model; using System.Runtime; using System.Linq; //the class does several things: //1. make sure a special property "Imports" (implemented using VisualBasicSettings attached properties) is added to the root object before it's loaded into ModelTree //2. make sure the "root workflow" of the root object always have the same VisualBasicSettings static class VisualBasicSettingsHandler { static public void PreviewLoadRoot(object sender, WorkflowDesigner.PreviewLoadEventArgs args) { VisualBasicSettings settings = VisualBasic.GetSettings(args.Instance); if (settings == null) { settings = new VisualBasicSettings(); VisualBasic.SetSettings(args.Instance, settings); } IDebuggableWorkflowTree root = args.Instance as IDebuggableWorkflowTree; if (root != null) { Activity rootActivity = root.GetWorkflowRoot(); if (rootActivity != null) { VisualBasic.SetSettings(rootActivity, settings); } args.Context.Services.Subscribe(manager => manager.Root.PropertyChanged += new PropertyChangedEventHandler(OnRootPropertyChanged)); } TypeDescriptor.AddProvider(new RootModelTypeDescriptionProvider(args.Instance), args.Instance); } static void OnRootPropertyChanged(object sender, PropertyChangedEventArgs e) { ModelItem rootModel = sender as ModelItem; Fx.Assert(rootModel != null, "sender item could not be null"); ModelProperty changedProperty = rootModel.Properties[e.PropertyName]; if (changedProperty == null) { return; } object changedPropertyValue = changedProperty.ComputedValue; if (changedPropertyValue == null) { return; } IDebuggableWorkflowTree root = rootModel.GetCurrentValue() as IDebuggableWorkflowTree; Fx.Assert(root != null, "root must be a IDebuggableWorkflowTree"); if (root.GetWorkflowRoot() == changedPropertyValue) { VisualBasicSettings settings = VisualBasic.GetSettings(root); VisualBasic.SetSettings(changedPropertyValue, settings); } } } class RootModelTypeDescriptionProvider : TypeDescriptionProvider { public RootModelTypeDescriptionProvider(object instance) : base(TypeDescriptor.GetProvider(instance)) { } public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor defaultDescriptor = base.GetTypeDescriptor(objectType, instance); return new RootModelTypeDescriptor(defaultDescriptor, instance); } } class RootModelTypeDescriptor : CustomTypeDescriptor { object root; NamespaceListPropertyDescriptor importDescriptor; public RootModelTypeDescriptor(ICustomTypeDescriptor parent, object root) : base(parent) { this.root = root; } PropertyDescriptor ImportDescriptor { get { if (this.importDescriptor == null) { this.importDescriptor = new NamespaceListPropertyDescriptor(this.root); } return this.importDescriptor; } } public override PropertyDescriptorCollection GetProperties() { return GetProperties(null); } public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { return new PropertyDescriptorCollection(base.GetProperties(attributes).Cast () .Union(new PropertyDescriptor[] { this.ImportDescriptor }).ToArray()); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation { using System.ComponentModel; using Microsoft.VisualBasic.Activities; using System.Activities.Debugger; using System.Activities.Presentation.Model; using System.Runtime; using System.Linq; //the class does several things: //1. make sure a special property "Imports" (implemented using VisualBasicSettings attached properties) is added to the root object before it's loaded into ModelTree //2. make sure the "root workflow" of the root object always have the same VisualBasicSettings static class VisualBasicSettingsHandler { static public void PreviewLoadRoot(object sender, WorkflowDesigner.PreviewLoadEventArgs args) { VisualBasicSettings settings = VisualBasic.GetSettings(args.Instance); if (settings == null) { settings = new VisualBasicSettings(); VisualBasic.SetSettings(args.Instance, settings); } IDebuggableWorkflowTree root = args.Instance as IDebuggableWorkflowTree; if (root != null) { Activity rootActivity = root.GetWorkflowRoot(); if (rootActivity != null) { VisualBasic.SetSettings(rootActivity, settings); } args.Context.Services.Subscribe (manager => manager.Root.PropertyChanged += new PropertyChangedEventHandler(OnRootPropertyChanged)); } TypeDescriptor.AddProvider(new RootModelTypeDescriptionProvider(args.Instance), args.Instance); } static void OnRootPropertyChanged(object sender, PropertyChangedEventArgs e) { ModelItem rootModel = sender as ModelItem; Fx.Assert(rootModel != null, "sender item could not be null"); ModelProperty changedProperty = rootModel.Properties[e.PropertyName]; if (changedProperty == null) { return; } object changedPropertyValue = changedProperty.ComputedValue; if (changedPropertyValue == null) { return; } IDebuggableWorkflowTree root = rootModel.GetCurrentValue() as IDebuggableWorkflowTree; Fx.Assert(root != null, "root must be a IDebuggableWorkflowTree"); if (root.GetWorkflowRoot() == changedPropertyValue) { VisualBasicSettings settings = VisualBasic.GetSettings(root); VisualBasic.SetSettings(changedPropertyValue, settings); } } } class RootModelTypeDescriptionProvider : TypeDescriptionProvider { public RootModelTypeDescriptionProvider(object instance) : base(TypeDescriptor.GetProvider(instance)) { } public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor defaultDescriptor = base.GetTypeDescriptor(objectType, instance); return new RootModelTypeDescriptor(defaultDescriptor, instance); } } class RootModelTypeDescriptor : CustomTypeDescriptor { object root; NamespaceListPropertyDescriptor importDescriptor; public RootModelTypeDescriptor(ICustomTypeDescriptor parent, object root) : base(parent) { this.root = root; } PropertyDescriptor ImportDescriptor { get { if (this.importDescriptor == null) { this.importDescriptor = new NamespaceListPropertyDescriptor(this.root); } return this.importDescriptor; } } public override PropertyDescriptorCollection GetProperties() { return GetProperties(null); } public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { return new PropertyDescriptorCollection(base.GetProperties(attributes).Cast () .Union(new PropertyDescriptor[] { this.ImportDescriptor }).ToArray()); } } } // 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
- SerializerWriterEventHandlers.cs
- PathFigureCollectionValueSerializer.cs
- HtmlPanelAdapter.cs
- InstanceData.cs
- ElementMarkupObject.cs
- StaticResourceExtension.cs
- SerTrace.cs
- HtmlInputText.cs
- ControlCollection.cs
- EUCJPEncoding.cs
- TextChange.cs
- WebExceptionStatus.cs
- MembershipSection.cs
- FragmentQuery.cs
- SqlConnectionPoolGroupProviderInfo.cs
- AttachInfo.cs
- OSEnvironmentHelper.cs
- ConfigXmlText.cs
- MsmqException.cs
- SoapSchemaExporter.cs
- ListViewDataItem.cs
- StrokeDescriptor.cs
- UnmanagedHandle.cs
- ConstructorBuilder.cs
- WsdlBuildProvider.cs
- _ScatterGatherBuffers.cs
- StatusBar.cs
- DayRenderEvent.cs
- Button.cs
- RecognizedAudio.cs
- SystemColors.cs
- MatrixTransform.cs
- ColumnClickEvent.cs
- RoleGroup.cs
- WsdlBuildProvider.cs
- returneventsaver.cs
- BaseDataList.cs
- ServiceModelInstallComponent.cs
- NavigatingCancelEventArgs.cs
- PartialCachingAttribute.cs
- GenericIdentity.cs
- ImageMetadata.cs
- OpCodes.cs
- AdornerHitTestResult.cs
- BooleanProjectedSlot.cs
- SystemUdpStatistics.cs
- _NestedSingleAsyncResult.cs
- TableLayoutPanelCodeDomSerializer.cs
- DataSourceHelper.cs
- RectangleGeometry.cs
- AutomationPatternInfo.cs
- TableItemPattern.cs
- SqlXmlStorage.cs
- PassportIdentity.cs
- COAUTHIDENTITY.cs
- WebConfigurationManager.cs
- MaskedTextBoxDesignerActionList.cs
- AccessDataSourceView.cs
- VectorCollection.cs
- CalendarDay.cs
- FormatterServices.cs
- DeferredTextReference.cs
- CharAnimationUsingKeyFrames.cs
- __TransparentProxy.cs
- ColumnPropertiesGroup.cs
- EFDataModelProvider.cs
- HistoryEventArgs.cs
- XhtmlBasicPanelAdapter.cs
- X509RecipientCertificateClientElement.cs
- WindowsSecurityToken.cs
- LinkLabel.cs
- AdPostCacheSubstitution.cs
- FixedPageStructure.cs
- DataTable.cs
- GeneralTransform3D.cs
- TextRunCache.cs
- PhoneCallDesigner.cs
- ipaddressinformationcollection.cs
- DocumentOrderQuery.cs
- DictionaryBase.cs
- SchemaDeclBase.cs
- OneWayChannelFactory.cs
- KeyValueSerializer.cs
- BuildProvider.cs
- XmlSignificantWhitespace.cs
- Utils.cs
- ConfigurationPropertyCollection.cs
- ProfileSettingsCollection.cs
- HwndMouseInputProvider.cs
- EdmToObjectNamespaceMap.cs
- ThreadAttributes.cs
- GenericTextProperties.cs
- Help.cs
- QuaternionRotation3D.cs
- TogglePattern.cs
- FileLoadException.cs
- XmlBinaryReader.cs
- IMembershipProvider.cs
- Rect.cs
- CalculatedColumn.cs