Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / View / WorkflowViewService.cs / 1305376 / WorkflowViewService.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.View { using System.Activities.Presentation; using System.Activities.Presentation.Internal.PropertyEditing; using System.Activities.Presentation.Model; using System.Activities.Presentation.Services; using System.Activities.XamlIntegration; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Runtime; using System.ServiceModel.Activities; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Collections.Generic; [Fx.Tag.XamlVisible(false)] public class WorkflowViewService : ViewService { EditingContext context; static DictionaryDelayedRegistrations = new Dictionary (); internal static void AddDelayedDesignerRegistration(string typeName, Action registration) { DelayedRegistrations[typeName] = registration; } static void InvokeDelayedRegistration(string typeName) { Action registration = null; if (DelayedRegistrations.TryGetValue(typeName, out registration)) { DelayedRegistrations.Remove(typeName); registration(); } } public WorkflowViewService(EditingContext context) { Fx.Assert(context != null, "The passed in EditingContext is null"); this.context = context; } internal event ViewChangedEventHandler ViewChanged; [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification="Catch all exceptions to prevent crash and always return the error view of the designer with the error message")] [SuppressMessage("Reliability", "Reliability108:IsFatalRule", Justification = "Catch all exceptions to prevent crash and always return the error view of the designer with the error message")] public WorkflowViewElement GetViewElement(ModelItem modelItem) { WorkflowViewElement viewElement = null; string errorString = string.Empty; if (modelItem == null) { return null; } try { // try to make one from the type specified in Designer attribute. // reuse existing views that are not currently parented if (modelItem.View != null && ((WorkflowViewElement)modelItem.View).Parent == null) { viewElement = (WorkflowViewElement)modelItem.View; } else { viewElement = CreateViewElement(modelItem); } // now we successfully got a viewElement, lets initialize it with ModelItem; if (viewElement != null) { viewElement.Context = this.context; viewElement.ModelItem = modelItem; ((IModelTreeItem)modelItem).SetCurrentView(viewElement); viewElement.DataContext = viewElement; // Generate an event that we created a new view element. This could be used by // the Debugger Service to insert a breakpoint on the view element. if (this.ViewChanged != null) { this.ViewChanged(this, new ViewChangedEventArgs(viewElement)); } } } // never crash here // always report error to the customer. catch (Exception e) { errorString = e.ToString(); } if (viewElement == null || !(string.IsNullOrEmpty(errorString))) { viewElement = GenerateErrorElement(modelItem, errorString); } return viewElement; } internal static void ShowErrorInViewElement(WorkflowViewElement errorElement, string windowText, string toolTipText) { Grid errorGrid = new Grid(); errorGrid.Background = Brushes.Red; errorGrid.Margin = new Thickness(20.0); TextBlock text = new TextBlock(); text.Text = windowText; text.Foreground = SystemColors.WindowBrush; errorGrid.Children.Add(text); errorGrid.ToolTip = toolTipText; errorElement.Content = errorGrid; } private WorkflowViewElement GenerateErrorElement(ModelItem modelItem, string errorString) { WorkflowViewElement errorElement = new WorkflowViewElement(); string errorText = string.Format(CultureInfo.CurrentCulture, SR.CouldNotGenerateView, modelItem.ItemType.Name); ShowErrorInViewElement(errorElement, errorText, errorString); errorElement.Context = this.context; errorElement.ModelItem = modelItem; ((IModelTreeItem)modelItem).SetCurrentView(errorElement); errorElement.DataContext = errorElement; return errorElement; } DesignerAttribute GetDesignerAttribute(Type type) { DesignerAttribute designerAttribute = null; //do not return designers for IValueSerializableExpression (i.e. VisualBasicValue or VisualBasicReference if (!typeof(IValueSerializableExpression).IsAssignableFrom(type)) { designerAttribute = GetAttribute (type); } return designerAttribute; } internal static T GetAttribute (Type type) where T : Attribute { T attribute = ExtensibilityAccessor.GetAttribute (type); if (attribute == null && type.IsGenericType) { attribute = ExtensibilityAccessor.GetAttribute (type.GetGenericTypeDefinition()); } return attribute; } //Returns the designer type based on the DesignerAttribute associated with the passed in type. internal Type GetDesignerType(Type type) { return GetDesignerType(type, false); } internal Type GetDesignerType(Type type, bool throwOnFailure) { Type designerType = null; // Run delayed metadataregistrations before trying to get an attribute. InvokeDelayedRegistration(type.FullName); // Try to identify a designer using the DesignerAttribute, either on the type or from MetaDataStore DesignerAttribute designerAttribute = GetDesignerAttribute(type); if (designerAttribute != null && !String.IsNullOrEmpty(designerAttribute.DesignerTypeName)) { designerType = Type.GetType(designerAttribute.DesignerTypeName, throwOnFailure); //if we have generic activity, check if there is a designer defined at type definition i.e. Assign , //rather then using a defualt one (which happens to be ActivityDesigner) if (type.IsGenericType && Type.Equals(designerType, typeof(ActivityDesigner))) { Type genericType = type.GetGenericTypeDefinition(); DesignerAttribute genericDesignerAttribute = TypeDescriptor.GetAttributes(genericType)[typeof(DesignerAttribute)] as DesignerAttribute; designerType = (null == genericDesignerAttribute ? designerType : Type.GetType(genericDesignerAttribute.DesignerTypeName, throwOnFailure)); } } return designerType; } protected WorkflowViewElement CreateViewElement(ModelItem modelItem) { Fx.Assert(modelItem != null, "The passed in ModelItem is null"); WorkflowViewElement viewElement = null; Type designerType = GetDesignerType(modelItem.ItemType, true); if(designerType != null && typeof(WorkflowViewElement).IsAssignableFrom(designerType)) { viewElement = (WorkflowViewElement)Activator.CreateInstance(designerType); } return viewElement; } public override ModelItem GetModel(DependencyObject view) { if (view == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("view")); } if (view is WorkflowViewElement) { return ((WorkflowViewElement)view).ModelItem; } Fx.Assert("we should know if somebody is trying to get model item from thing other than WorkflowViewElement"); return null; } public override DependencyObject GetView(ModelItem model) { return GetViewElement(model); } internal bool ShouldAppearOnBreadCrumb(ModelItem modelItem, bool checkIfCanBeMadeRoot) { bool shouldAppearOnBreadCrumb = false; if (modelItem != null) { Type designerType = this.GetDesignerType(modelItem.ItemType); if (null != designerType) { if (checkIfCanBeMadeRoot) { ActivityDesignerOptionsAttribute options = WorkflowViewService.GetAttribute (modelItem.ItemType); shouldAppearOnBreadCrumb = (typeof(WorkflowViewElement).IsAssignableFrom(designerType) && typeof(ActivityDesigner) != designerType && typeof(WorkflowService) != designerType && (options == null || options.AllowDrillIn)); } else { shouldAppearOnBreadCrumb = typeof(WorkflowViewElement).IsAssignableFrom(designerType); } } } return shouldAppearOnBreadCrumb; } internal delegate void ViewChangedEventHandler(object sender, ViewChangedEventArgs eventArgs); internal class ViewChangedEventArgs : EventArgs { WorkflowViewElement addedElement; public ViewChangedEventArgs(WorkflowViewElement addedElement) { this.addedElement = addedElement; } public WorkflowViewElement AddedElement { get { return this.addedElement; } } } } } // 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
- VarInfo.cs
- Win32Exception.cs
- SqlDuplicator.cs
- LambdaCompiler.Address.cs
- SelectedDatesCollection.cs
- SamlAuthorizationDecisionStatement.cs
- TileBrush.cs
- InkCanvas.cs
- HttpCapabilitiesEvaluator.cs
- TreeSet.cs
- XmlSchemaCompilationSettings.cs
- DataGridBeginningEditEventArgs.cs
- UIElementParagraph.cs
- HttpHandlersSection.cs
- BaseAsyncResult.cs
- QuaternionKeyFrameCollection.cs
- DistributedTransactionPermission.cs
- HiddenField.cs
- TemplateInstanceAttribute.cs
- IISMapPath.cs
- CollectionAdapters.cs
- DataGridHelper.cs
- ResourceBinder.cs
- CorePropertiesFilter.cs
- FolderBrowserDialog.cs
- DbMetaDataCollectionNames.cs
- Events.cs
- MessageDesigner.cs
- ScriptControlManager.cs
- XpsPackagingPolicy.cs
- PasswordTextNavigator.cs
- ProgressiveCrcCalculatingStream.cs
- XmlDataLoader.cs
- ElementAction.cs
- TextElementCollectionHelper.cs
- infer.cs
- MSAAWinEventWrap.cs
- SystemIPInterfaceProperties.cs
- CLRBindingWorker.cs
- DockPatternIdentifiers.cs
- PhysicalOps.cs
- TypeLoadException.cs
- GenericFlowSwitchHelper.cs
- PersonalizablePropertyEntry.cs
- Facet.cs
- SqlProviderServices.cs
- ChannelServices.cs
- EntityClassGenerator.cs
- AuthenticationConfig.cs
- ThemeableAttribute.cs
- TrackingStringDictionary.cs
- GenericIdentity.cs
- Camera.cs
- SqlLiftIndependentRowExpressions.cs
- ImageKeyConverter.cs
- SessionStateContainer.cs
- ToolStripItemClickedEventArgs.cs
- SpecialNameAttribute.cs
- PathSegment.cs
- RoutedEventHandlerInfo.cs
- OrderByBuilder.cs
- GroupBoxRenderer.cs
- ButtonBaseAutomationPeer.cs
- regiisutil.cs
- PaperSize.cs
- UnicastIPAddressInformationCollection.cs
- MulticastOption.cs
- WindowsListViewGroupSubsetLink.cs
- FileUtil.cs
- BasicViewGenerator.cs
- ConstructorExpr.cs
- ProfileSettings.cs
- StreamBodyWriter.cs
- EventRecordWrittenEventArgs.cs
- Geometry.cs
- MetroSerializationManager.cs
- PrintControllerWithStatusDialog.cs
- StrongNameMembershipCondition.cs
- ModelFactory.cs
- COAUTHINFO.cs
- DoubleConverter.cs
- HtmlTitle.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- ToolStripPanel.cs
- GradientStop.cs
- ToolStripItemCollection.cs
- SelectionListDesigner.cs
- RegisteredHiddenField.cs
- TextPointer.cs
- basecomparevalidator.cs
- VerticalAlignConverter.cs
- KeyTime.cs
- DiagnosticsConfiguration.cs
- GridSplitterAutomationPeer.cs
- TableCellCollection.cs
- CheckBoxList.cs
- PeerResolverMode.cs
- AttributeEmitter.cs
- HMACMD5.cs
- DoubleLinkListEnumerator.cs