//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------- namespace System.Activities.Presentation { using System; using System.Activities.Presentation.Documents; using System.Activities.Presentation.Hosting; using System.Activities.Presentation.Internal.PropertyEditing.Resources; using System.Activities.Presentation.Model; using System.Activities.Presentation.Validation; using System.Activities.Presentation.View; using System.ComponentModel; using System.Runtime; using System.Runtime.Versioning; using System.Windows; public partial class WorkflowDesigner { static internal FrameworkName GetTargetFramework(EditingContext context) { if (context != null) { DesignerConfigurationService designerConfigurationService = context.Services.GetService(); if (designerConfigurationService != null) { return designerConfigurationService.TargetFrameworkName; } } return DesignerConfigurationService.DefaultTargetFrameworkName; } string GetLocalAssemblyName() { AssemblyContextControlItem assemblyItem = this.Context.Items.GetValue(); return assemblyItem != null && assemblyItem.LocalAssemblyName != null ? assemblyItem.LocalAssemblyName.Name : null; } ViewManager GetViewManager(ModelItem modelItem) { Fx.Assert(modelItem != null, "modelItem cannot be null"); ViewManager viewManager = null; // First we look for a ViewManagerAttribute. for example a ServiceContractRoot tag, could use // use its own view manager if it wanted to . ViewManagerAttribute viewManagerAttribute = TypeDescriptor.GetAttributes(modelItem.ItemType)[typeof(ViewManagerAttribute)] as ViewManagerAttribute; if (viewManagerAttribute != null && viewManagerAttribute.ViewManagerType != null) { viewManager = (ViewManager)Activator.CreateInstance(viewManagerAttribute.ViewManagerType); } // If no viewmanager attribute is found we default to the workflowviewmanager if (viewManager == null) { viewManager = new WorkflowViewManager(); } viewManager.Initialize(this.context); return viewManager; } object GetRootInstance() { return this.modelTreeManager.Root.GetCurrentValue(); } void InitializePropertyInspectorCommandHandling() { } void InitializePropertyInspectorResources() { this.propertyInspector.Resources.MergedDictionaries.Add(PropertyInspectorResources.GetResources()); } //This is to notify VS that the WF Designer is in Modal state (eg. when a modal dialog is shown). void ComponentDispatcher_EnterThreadModal(object sender, EventArgs e) { IModalService modalService = Context.Services.GetService(); if (modalService != null) { modalService.SetModalState(true); } } void ComponentDispatcher_LeaveThreadModal(object sender, EventArgs e) { IModalService modalService = Context.Services.GetService(); if (modalService != null) { modalService.SetModalState(false); } } void OnUndoCompleted(object sender, UndoUnitEventArgs e) { // If an action had caused the errorview to be shown, and undo was executed after that // try to put back the viewmanagerview back as the rootview of the designer. // may be the undo might help recover from the problem. if (!this.view.Children.Contains((UIElement)this.viewManager.View)) { this.view.Children.Clear(); this.view.Children.Add((UIElement)this.viewManager.View); if (this.outlineView != null) { this.outlineView.Children.Clear(); this.AddOutlineView(); } // Clear out the error condition ErrorItem errorItem = this.context.Items.GetValue(); errorItem.Message = null; errorItem.Details = null; } } void OnViewStateChanged(object sender, ViewStateChangedEventArgs e) { NotifyModelChanged(); } void OnEditingScopeCompleted(object sender, EditingScopeEventArgs e) { if (e.EditingScope.HasEffectiveChanges) { NotifyModelChanged(); // The undo unit of an ImmediateEditingScope is added into undo engine in ImmediateEditingScope.Complete // so we only handle non ImmediateEditingScope here if (!this.modelTreeManager.RedoUndoInProgress && !(e.EditingScope is ImmediateEditingScope) && undoEngine != null && !e.EditingScope.SuppressUndo) { undoEngine.AddUndoUnit(new EditingScopeUndoUnit(this.Context, this.modelTreeManager, e.EditingScope)); } } } void NotifyModelChanged() // Notify text is going to changed { IDocumentPersistenceService documentPersistenceService = this.Context.Services.GetService(); if (documentPersistenceService != null) { documentPersistenceService.OnModelChanged(this.modelTreeManager.Root.GetCurrentValue()); } else { this.isModelChanged = true; if (this.ModelChanged != null) { this.ModelChanged.Invoke(this, null); } } } void OnReadonlyStateChanged(ReadOnlyState state) { if (null != this.propertyInspector) { this.propertyInspector.IsReadOnly = state.IsReadOnly; } } } }