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
- InstanceBehavior.cs
- DatagridviewDisplayedBandsData.cs
- ParameterModifier.cs
- BitmapEffectGeneralTransform.cs
- NotSupportedException.cs
- EventPropertyMap.cs
- DataRow.cs
- HWStack.cs
- DataGridViewCellLinkedList.cs
- WinCategoryAttribute.cs
- TreeNodeCollection.cs
- ScaleTransform3D.cs
- SerializableAttribute.cs
- SimpleWebHandlerParser.cs
- TerminateDesigner.cs
- DetailsViewUpdatedEventArgs.cs
- TcpStreams.cs
- HTTPNotFoundHandler.cs
- FontFaceLayoutInfo.cs
- CreateUserWizardStep.cs
- UserValidatedEventArgs.cs
- NotifyParentPropertyAttribute.cs
- DesignTimeDataBinding.cs
- IdentifierService.cs
- KeyValueConfigurationElement.cs
- JsonFormatReaderGenerator.cs
- SoapCodeExporter.cs
- DbConnectionStringCommon.cs
- ClickablePoint.cs
- StatusBarDrawItemEvent.cs
- WindowClosedEventArgs.cs
- DataGridBeginningEditEventArgs.cs
- EventProviderWriter.cs
- RightsManagementInformation.cs
- MultiView.cs
- QueryContinueDragEventArgs.cs
- TextBoxAutomationPeer.cs
- _ConnectStream.cs
- SpeakProgressEventArgs.cs
- TextServicesProperty.cs
- ValidationError.cs
- SHA256Managed.cs
- URLString.cs
- ComboBox.cs
- XmlElementAttributes.cs
- M3DUtil.cs
- TextEditorTyping.cs
- EditingCoordinator.cs
- FixedSOMPage.cs
- HealthMonitoringSectionHelper.cs
- ServicesSection.cs
- ProcessHostFactoryHelper.cs
- TextServicesCompartment.cs
- SystemResourceKey.cs
- TraversalRequest.cs
- HttpModuleCollection.cs
- ResourceDefaultValueAttribute.cs
- GroupBox.cs
- SQLSingleStorage.cs
- AttachmentCollection.cs
- MergePropertyDescriptor.cs
- ScriptReference.cs
- QueryExpr.cs
- HyperLink.cs
- ExtractedStateEntry.cs
- XmlQualifiedName.cs
- TraceRecord.cs
- LoginDesignerUtil.cs
- TableStyle.cs
- DynamicFilterExpression.cs
- CompModSwitches.cs
- LicenseManager.cs
- HttpModuleAction.cs
- ProcessModelInfo.cs
- LinqDataSourceStatusEventArgs.cs
- SrgsToken.cs
- BufferModeSettings.cs
- ServiceHostingEnvironment.cs
- TextDecorationCollectionConverter.cs
- TextParagraphCache.cs
- Helper.cs
- NamedElement.cs
- GeneralTransformCollection.cs
- EncoderParameter.cs
- SmiEventSink_DeferedProcessing.cs
- TreeViewEvent.cs
- ClientSection.cs
- SystemResourceHost.cs
- BackgroundFormatInfo.cs
- CaretElement.cs
- ServiceDebugBehavior.cs
- contentDescriptor.cs
- DBSqlParser.cs
- AnnotationComponentManager.cs
- EncryptedData.cs
- WebControlAdapter.cs
- PageParser.cs
- SizeConverter.cs
- SafeSystemMetrics.cs
- LinkClickEvent.cs