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
- TimeSpanParse.cs
- FlowLayoutPanel.cs
- COM2PictureConverter.cs
- MessageSmuggler.cs
- Translator.cs
- MessageQueue.cs
- WindowInteropHelper.cs
- ValueExpressions.cs
- NextPreviousPagerField.cs
- GuidTagList.cs
- ProjectionCamera.cs
- NotifyIcon.cs
- EntityContainer.cs
- LocalizationParserHooks.cs
- basemetadatamappingvisitor.cs
- LocatorPartList.cs
- TextBoxBase.cs
- MessageRpc.cs
- OfTypeExpression.cs
- PeerPresenceInfo.cs
- SqlDataReaderSmi.cs
- CodeNamespaceImport.cs
- MasterPageParser.cs
- TraceEventCache.cs
- DeleteIndexBinder.cs
- WhereQueryOperator.cs
- XAMLParseException.cs
- DataObject.cs
- DesignerSerializationVisibilityAttribute.cs
- OdbcConnectionHandle.cs
- LinkDescriptor.cs
- GraphicsContext.cs
- _FtpControlStream.cs
- ControlIdConverter.cs
- ToolStripPanelRenderEventArgs.cs
- LiteralControl.cs
- Token.cs
- RuleProcessor.cs
- Cell.cs
- UIElementIsland.cs
- HtmlEncodedRawTextWriter.cs
- formatstringdialog.cs
- DataServiceConfiguration.cs
- FunctionQuery.cs
- InputScopeConverter.cs
- GiveFeedbackEvent.cs
- Walker.cs
- TypeReference.cs
- StateBag.cs
- HTTPRemotingHandler.cs
- OpCopier.cs
- ToolStripRendererSwitcher.cs
- GraphicsPath.cs
- Material.cs
- DefaultExpression.cs
- StylusEventArgs.cs
- CookieParameter.cs
- MessageCredentialType.cs
- XmlAttributeAttribute.cs
- ServiceOperationUIEditor.cs
- CharacterHit.cs
- HMACSHA1.cs
- ArrayExtension.cs
- Label.cs
- Thread.cs
- QilPatternVisitor.cs
- SingleConverter.cs
- BindingCompleteEventArgs.cs
- StateBag.cs
- CustomErrorsSectionWrapper.cs
- ObjectListFieldCollection.cs
- ThicknessAnimationUsingKeyFrames.cs
- DataColumnPropertyDescriptor.cs
- LocalizabilityAttribute.cs
- GridViewSortEventArgs.cs
- TouchesCapturedWithinProperty.cs
- BufferedResponseStream.cs
- DataSourceListEditor.cs
- Int32.cs
- ErrorInfoXmlDocument.cs
- XmlChildEnumerator.cs
- UnionExpr.cs
- ConsoleCancelEventArgs.cs
- FixUpCollection.cs
- IndentTextWriter.cs
- HitTestParameters3D.cs
- XmlLinkedNode.cs
- UnmanagedMemoryStream.cs
- ResolveNameEventArgs.cs
- BaseComponentEditor.cs
- RegexInterpreter.cs
- mediaclock.cs
- TypeConverterMarkupExtension.cs
- processwaithandle.cs
- XmlReader.cs
- FileLevelControlBuilderAttribute.cs
- SimpleWorkerRequest.cs
- XsdDataContractImporter.cs
- RepeatButtonAutomationPeer.cs
- RuleSettingsCollection.cs