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
- MultipartContentParser.cs
- ProxyHwnd.cs
- HandlerMappingMemo.cs
- FixedDocument.cs
- ValueUnavailableException.cs
- XamlToRtfParser.cs
- COM2PropertyDescriptor.cs
- DynamicDataRouteHandler.cs
- DesignTimeParseData.cs
- ScriptServiceAttribute.cs
- NonVisualControlAttribute.cs
- FamilyMap.cs
- Converter.cs
- SqlCaseSimplifier.cs
- HwndSourceParameters.cs
- DbConnectionStringCommon.cs
- BooleanKeyFrameCollection.cs
- MarkupWriter.cs
- RenderDataDrawingContext.cs
- SchemaMapping.cs
- ScriptResourceInfo.cs
- AddInProcess.cs
- SoapRpcServiceAttribute.cs
- SplayTreeNode.cs
- GlyphCache.cs
- Enumerable.cs
- LinqDataSourceEditData.cs
- PermissionListSet.cs
- WindowsIdentity.cs
- StringHelper.cs
- FixUpCollection.cs
- JavascriptCallbackBehaviorAttribute.cs
- Compiler.cs
- WindowCollection.cs
- DesignerView.xaml.cs
- DbConnectionPoolIdentity.cs
- ChildChangedEventArgs.cs
- ReferencedCollectionType.cs
- RegexFCD.cs
- OleCmdHelper.cs
- Roles.cs
- ManipulationDevice.cs
- Page.cs
- NestedContainer.cs
- GridItemPatternIdentifiers.cs
- HtmlControlPersistable.cs
- MsdtcWrapper.cs
- XmlQualifiedName.cs
- HttpListenerElement.cs
- GridViewSelectEventArgs.cs
- PointUtil.cs
- ConfigurationStrings.cs
- IdentityManager.cs
- DataMisalignedException.cs
- RootProfilePropertySettingsCollection.cs
- MultiBinding.cs
- PreProcessInputEventArgs.cs
- DocumentApplication.cs
- PrintController.cs
- DelegatedStream.cs
- ToolStripSettings.cs
- ContextInformation.cs
- hresults.cs
- Bitmap.cs
- SwitchLevelAttribute.cs
- ModelTreeEnumerator.cs
- FormViewDeleteEventArgs.cs
- ChannelPool.cs
- AdjustableArrowCap.cs
- ImageIndexConverter.cs
- InvalidPropValue.cs
- dsa.cs
- CodeTypeConstructor.cs
- WebConfigurationFileMap.cs
- ArgIterator.cs
- LineGeometry.cs
- WorkflowPersistenceService.cs
- Stroke.cs
- InitializerFacet.cs
- ListParagraph.cs
- Task.cs
- BaseComponentEditor.cs
- WindowsStatic.cs
- FileUtil.cs
- Array.cs
- Hex.cs
- BooleanExpr.cs
- FixedElement.cs
- ButtonChrome.cs
- FlowDocumentPage.cs
- shaper.cs
- ComContractElement.cs
- ChildDocumentBlock.cs
- SchemaObjectWriter.cs
- XmlTextReader.cs
- DependencyProperty.cs
- UpdateRecord.cs
- Signature.cs
- SqlLiftWhereClauses.cs
- LinqDataSourceDisposeEventArgs.cs