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
- PreviousTrackingServiceAttribute.cs
- PseudoWebRequest.cs
- ISessionStateStore.cs
- ConfigurationConverterBase.cs
- DNS.cs
- SelectedGridItemChangedEvent.cs
- EntityTypeEmitter.cs
- KeysConverter.cs
- XPathNodeInfoAtom.cs
- AccessibilityApplicationManager.cs
- BitVector32.cs
- SqlDataRecord.cs
- CreateUserWizard.cs
- GridView.cs
- BulletDecorator.cs
- StructuredType.cs
- WinOEToolBoxItem.cs
- BasicBrowserDialog.cs
- SafeThemeHandle.cs
- MsmqReceiveHelper.cs
- AttachmentCollection.cs
- CodeGenerator.cs
- RemoteWebConfigurationHostServer.cs
- MetabaseSettings.cs
- DataViewManagerListItemTypeDescriptor.cs
- Ray3DHitTestResult.cs
- SqlFunctionAttribute.cs
- EntityProviderFactory.cs
- ContentIterators.cs
- ParentControlDesigner.cs
- InputScope.cs
- CompositeActivityDesigner.cs
- TakeOrSkipQueryOperator.cs
- Button.cs
- ReferenceSchema.cs
- ParentQuery.cs
- Accessors.cs
- RestrictedTransactionalPackage.cs
- cookiecollection.cs
- PropertyMap.cs
- OrderablePartitioner.cs
- TypeSystem.cs
- XmlDataDocument.cs
- WsdlHelpGeneratorElement.cs
- FixedElement.cs
- FixedTextSelectionProcessor.cs
- DirectoryObjectSecurity.cs
- TriggerBase.cs
- AutomationProperties.cs
- ErrorFormatterPage.cs
- XomlCompilerResults.cs
- FormViewRow.cs
- MinMaxParagraphWidth.cs
- LongSumAggregationOperator.cs
- XmlCountingReader.cs
- TransformDescriptor.cs
- XmlDataFileEditor.cs
- AuthenticatedStream.cs
- UrlParameterReader.cs
- DecoderFallback.cs
- InvalidCommandTreeException.cs
- XmlAttributeOverrides.cs
- XmlSchemaValidationException.cs
- ProgressBar.cs
- HitTestDrawingContextWalker.cs
- thaishape.cs
- SoapInteropTypes.cs
- DesigntimeLicenseContext.cs
- DesignerCommandAdapter.cs
- Typeface.cs
- ButtonColumn.cs
- XmlProcessingInstruction.cs
- HttpGetClientProtocol.cs
- WebPartZoneCollection.cs
- SQLDateTime.cs
- WebPartsPersonalization.cs
- precedingquery.cs
- Operator.cs
- TextRangeBase.cs
- ErrorFormatter.cs
- ApplicationProxyInternal.cs
- Membership.cs
- SchemaCollectionPreprocessor.cs
- ErrorStyle.cs
- MenuBase.cs
- ObjectCloneHelper.cs
- TargetInvocationException.cs
- BaseDataBoundControl.cs
- ObjectDataSourceWizardForm.cs
- XmlMapping.cs
- FocusWithinProperty.cs
- CompensationHandlingFilter.cs
- WindowsToolbarItemAsMenuItem.cs
- FontWeights.cs
- WebPartConnectVerb.cs
- TypeGeneratedEventArgs.cs
- HttpListenerPrefixCollection.cs
- GeneralTransform3DTo2DTo3D.cs
- RadioButtonList.cs
- GlyphElement.cs