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
- PropertyPathWorker.cs
- X509IssuerSerialKeyIdentifierClause.cs
- StorageMappingItemLoader.cs
- AsymmetricKeyExchangeDeformatter.cs
- WebPartConnectionCollection.cs
- Section.cs
- FixedElement.cs
- TextBounds.cs
- SharedConnectionInfo.cs
- BinaryConverter.cs
- DataRecordInternal.cs
- MaskedTextBoxTextEditor.cs
- VirtualizedItemProviderWrapper.cs
- LocationChangedEventArgs.cs
- StylusPointProperties.cs
- FrameAutomationPeer.cs
- Lease.cs
- XmlUtf8RawTextWriter.cs
- SQLDecimal.cs
- DesignTimeParseData.cs
- Property.cs
- _emptywebproxy.cs
- Size3D.cs
- DirectoryGroupQuery.cs
- Math.cs
- returneventsaver.cs
- _ConnectOverlappedAsyncResult.cs
- DataGridViewButtonCell.cs
- TailCallAnalyzer.cs
- DbConvert.cs
- StoragePropertyMapping.cs
- CanonicalFontFamilyReference.cs
- Camera.cs
- WebBrowserUriTypeConverter.cs
- CancellableEnumerable.cs
- CodeExpressionCollection.cs
- DataFormats.cs
- DataControlReferenceCollection.cs
- CheckoutException.cs
- XPathAncestorIterator.cs
- _SslStream.cs
- MatrixValueSerializer.cs
- MenuAutoFormat.cs
- XmlReflectionMember.cs
- ClaimSet.cs
- DesignerDataColumn.cs
- SchemaNamespaceManager.cs
- XmlUtil.cs
- XmlHierarchicalEnumerable.cs
- BlockCollection.cs
- IFlowDocumentViewer.cs
- SelectionRange.cs
- StandardOleMarshalObject.cs
- CompositeKey.cs
- HtmlElement.cs
- RemotingAttributes.cs
- PipelineModuleStepContainer.cs
- CorrelationService.cs
- DependencyPropertyAttribute.cs
- XMLUtil.cs
- InvalidOleVariantTypeException.cs
- PenContext.cs
- Fx.cs
- Executor.cs
- ObjectStateManagerMetadata.cs
- NonVisualControlAttribute.cs
- ObjectSpanRewriter.cs
- ValueChangedEventManager.cs
- SoapAttributeOverrides.cs
- Attributes.cs
- DateTimeOffsetConverter.cs
- ResourceType.cs
- ScrollBar.cs
- ZipIOLocalFileHeader.cs
- HttpDigestClientCredential.cs
- Misc.cs
- DataContext.cs
- ExpressionDumper.cs
- FileLogRecordEnumerator.cs
- RenderOptions.cs
- MissingManifestResourceException.cs
- PathGeometry.cs
- GACIdentityPermission.cs
- ItemDragEvent.cs
- MultipleCopiesCollection.cs
- ProcessModelSection.cs
- While.cs
- SmiConnection.cs
- SetStoryboardSpeedRatio.cs
- ListViewItemEventArgs.cs
- TrustSection.cs
- NamedElement.cs
- XmlSchemaComplexType.cs
- DefaultTraceListener.cs
- FrameworkContextData.cs
- UnsafeCollabNativeMethods.cs
- X509Utils.cs
- FormViewInsertedEventArgs.cs
- GroupBox.cs
- XmlUtf8RawTextWriter.cs