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
- SetterBase.cs
- DateTimeValueSerializerContext.cs
- __TransparentProxy.cs
- DocumentEventArgs.cs
- ImageSource.cs
- SortQuery.cs
- Win32PrintDialog.cs
- MessageQueue.cs
- MasterPageCodeDomTreeGenerator.cs
- SocketAddress.cs
- WindowsAuthenticationEventArgs.cs
- DesignerTransaction.cs
- CustomAttributeFormatException.cs
- ExpressionBuilder.cs
- NotifyIcon.cs
- FigureHelper.cs
- ConnectionInterfaceCollection.cs
- _DisconnectOverlappedAsyncResult.cs
- BitmapEffectDrawing.cs
- UpdateTracker.cs
- Constants.cs
- DynamicAttribute.cs
- XsltInput.cs
- Geometry3D.cs
- WindowsNonControl.cs
- PermissionSetEnumerator.cs
- RawStylusActions.cs
- XmlnsDefinitionAttribute.cs
- FixedPageStructure.cs
- OpenTypeLayoutCache.cs
- SharedStatics.cs
- ITreeGenerator.cs
- TemplateBindingExtensionConverter.cs
- DictionaryEntry.cs
- Array.cs
- DeploymentSection.cs
- Interlocked.cs
- RoutedEventConverter.cs
- FragmentQueryProcessor.cs
- SingleObjectCollection.cs
- HtmlInputImage.cs
- SoapEnumAttribute.cs
- ClosableStream.cs
- ObservableCollection.cs
- Dictionary.cs
- PersonalizationStateInfoCollection.cs
- ResourcePermissionBaseEntry.cs
- PropertyGeneratedEventArgs.cs
- FilterQueryOptionExpression.cs
- Timeline.cs
- log.cs
- WindowsTab.cs
- ServiceDescriptionContext.cs
- sitestring.cs
- Deflater.cs
- TemplateContainer.cs
- AssemblyAssociatedContentFileAttribute.cs
- InvalidEnumArgumentException.cs
- CatalogPartCollection.cs
- GeneralTransform.cs
- MiniLockedBorderGlyph.cs
- ClientSponsor.cs
- ChameleonKey.cs
- PerformanceCounterManager.cs
- MetadataExporter.cs
- ControlUtil.cs
- AliasExpr.cs
- MappingSource.cs
- ModuleBuilder.cs
- DataRelationCollection.cs
- HostingPreferredMapPath.cs
- DetailsViewDeleteEventArgs.cs
- SqlUDTStorage.cs
- AccessDataSourceView.cs
- KeyConverter.cs
- QueueProcessor.cs
- FileDialog.cs
- DataRecord.cs
- ClientBuildManager.cs
- ImageDrawing.cs
- HebrewCalendar.cs
- MatrixUtil.cs
- KeyInstance.cs
- ChtmlTextWriter.cs
- ReadOnlyHierarchicalDataSource.cs
- SqlConnectionHelper.cs
- DataSpaceManager.cs
- Menu.cs
- ClientSettingsStore.cs
- PasswordDeriveBytes.cs
- lengthconverter.cs
- DataGridItem.cs
- AxisAngleRotation3D.cs
- Message.cs
- FixedSchema.cs
- PageSetupDialog.cs
- DataGridViewButtonCell.cs
- CssClassPropertyAttribute.cs
- WebPartActionVerb.cs
- GifBitmapDecoder.cs