Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- KeyValueInternalCollection.cs
- KeyValueConfigurationCollection.cs
- TextAnchor.cs
- DecimalAnimationBase.cs
- CodeTypeReference.cs
- Directory.cs
- EffectiveValueEntry.cs
- SqlDataSource.cs
- TranslateTransform3D.cs
- PointConverter.cs
- ValueOfAction.cs
- DocumentCollection.cs
- Filter.cs
- BorderSidesEditor.cs
- FieldValue.cs
- FixedSOMPageConstructor.cs
- GlobalizationSection.cs
- PackWebResponse.cs
- WebServiceClientProxyGenerator.cs
- JsonUriDataContract.cs
- ConstraintManager.cs
- RawStylusInputCustomData.cs
- Attribute.cs
- ZipIOExtraField.cs
- GifBitmapDecoder.cs
- Query.cs
- DataService.cs
- DoubleAnimationUsingPath.cs
- AutomationIdentifierGuids.cs
- InvalidDataContractException.cs
- SettingsPropertyNotFoundException.cs
- StateItem.cs
- ManifestResourceInfo.cs
- FormViewModeEventArgs.cs
- UITypeEditor.cs
- ToolZone.cs
- ADConnectionHelper.cs
- ValueExpressions.cs
- InertiaExpansionBehavior.cs
- XmlCustomFormatter.cs
- SpeechSeg.cs
- DataGridRelationshipRow.cs
- UIAgentRequest.cs
- RightsManagementInformation.cs
- QilPatternFactory.cs
- BatchWriter.cs
- DBCommandBuilder.cs
- EntityDataSourceDataSelection.cs
- TagPrefixInfo.cs
- InheritablePropertyChangeInfo.cs
- XmlTypeAttribute.cs
- ZipIOExtraFieldPaddingElement.cs
- HtmlInputControl.cs
- TextTreeRootNode.cs
- IDQuery.cs
- GeometryCollection.cs
- SoapInteropTypes.cs
- VariantWrapper.cs
- GridView.cs
- ScriptingAuthenticationServiceSection.cs
- FormattedText.cs
- Stack.cs
- XmlNodeList.cs
- GridViewDeletedEventArgs.cs
- Debug.cs
- CssClassPropertyAttribute.cs
- CompilerGlobalScopeAttribute.cs
- ExtendedPropertyDescriptor.cs
- PolyLineSegment.cs
- TextDpi.cs
- Symbol.cs
- CachedFontFace.cs
- XmlSchemaChoice.cs
- ZipIOLocalFileBlock.cs
- StyleSheetDesigner.cs
- ToolStripOverflowButton.cs
- RightNameExpirationInfoPair.cs
- ValidatingCollection.cs
- MaterialGroup.cs
- WsdlImporter.cs
- MatrixTransform3D.cs
- WebPartExportVerb.cs
- CodeCompileUnit.cs
- DynamicILGenerator.cs
- UpDownBase.cs
- ResolvedKeyFrameEntry.cs
- XmlStrings.cs
- XmlSchemaSimpleContentRestriction.cs
- PropertyMetadata.cs
- DependencyPropertyDescriptor.cs
- IntSecurity.cs
- StylusButton.cs
- EdmProperty.cs
- MenuItemStyleCollectionEditor.cs
- WebBrowserBase.cs
- Run.cs
- ByteAnimationBase.cs
- StateMachine.cs
- EncodingInfo.cs
- InternalCache.cs