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
- PixelShader.cs
- SourceChangedEventArgs.cs
- XmlSignatureManifest.cs
- DatatypeImplementation.cs
- HtmlInputFile.cs
- DiagnosticTraceSource.cs
- ProfileParameter.cs
- TemplateControlBuildProvider.cs
- MultiSelectRootGridEntry.cs
- MimeBasePart.cs
- EventLog.cs
- TypeExtensionSerializer.cs
- BaseCollection.cs
- RectAnimationUsingKeyFrames.cs
- dataprotectionpermission.cs
- AmbiguousMatchException.cs
- Axis.cs
- SqlCharStream.cs
- PageCatalogPart.cs
- UserPreferenceChangingEventArgs.cs
- WebPartZoneCollection.cs
- TransactionContextValidator.cs
- QueryExtender.cs
- DropSource.cs
- SequentialUshortCollection.cs
- versioninfo.cs
- ParameterCollection.cs
- AuthenticatedStream.cs
- UrlPath.cs
- BidirectionalDictionary.cs
- SpellerInterop.cs
- HttpStreamMessage.cs
- OdbcPermission.cs
- WebEventCodes.cs
- DependencyPropertyValueSerializer.cs
- DiscriminatorMap.cs
- WindowsListViewScroll.cs
- Solver.cs
- AttachedPropertyDescriptor.cs
- SecurityException.cs
- Menu.cs
- TextOutput.cs
- _Events.cs
- XamlInt32CollectionSerializer.cs
- TextDecorationCollection.cs
- PriorityBinding.cs
- RepeaterItem.cs
- InternalConfigSettingsFactory.cs
- BindingBase.cs
- ConversionValidationRule.cs
- TransformerConfigurationWizardBase.cs
- CharacterString.cs
- SystemBrushes.cs
- XmlDataImplementation.cs
- ObjectStorage.cs
- XmlIncludeAttribute.cs
- WrappingXamlSchemaContext.cs
- FilterableData.cs
- Debug.cs
- ToolStripRenderer.cs
- DataGridViewDataErrorEventArgs.cs
- XmlObjectSerializerReadContext.cs
- DesignerInterfaces.cs
- mactripleDES.cs
- EventInfo.cs
- ApplicationSecurityManager.cs
- WebPartDisplayModeCancelEventArgs.cs
- uribuilder.cs
- EncoderParameter.cs
- MembershipValidatePasswordEventArgs.cs
- ProfileModule.cs
- SoapElementAttribute.cs
- CollectionBuilder.cs
- HttpVersion.cs
- RootAction.cs
- XmlNavigatorStack.cs
- StoryFragments.cs
- ModelTreeManager.cs
- DBConcurrencyException.cs
- ConnectionStringsExpressionBuilder.cs
- coordinator.cs
- ExecutionTracker.cs
- Preprocessor.cs
- InternalReceiveMessage.cs
- OdbcEnvironmentHandle.cs
- MimeBasePart.cs
- XmlSchemaAny.cs
- CultureTableRecord.cs
- HtmlElementErrorEventArgs.cs
- DescendantOverDescendantQuery.cs
- ChtmlSelectionListAdapter.cs
- XhtmlTextWriter.cs
- Int32KeyFrameCollection.cs
- PopupEventArgs.cs
- SqlCacheDependencyDatabaseCollection.cs
- HttpCapabilitiesSectionHandler.cs
- HitTestResult.cs
- PropertyMetadata.cs
- Latin1Encoding.cs
- SqlReferenceCollection.cs