File: System\ServiceModel\Activities\Presentation\CorrelatesOnValueEditor.cs
Project: ndp\cdf\src\NetFx40\Tools\System.Activities.Core.Presentation\System.Activities.Core.Presentation.csproj (System.Activities.Core.Presentation)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.ServiceModel.Activities.Presentation
{
    using System.Activities.Core.Presentation.Themes;
    using System.Activities.Presentation;
    using System.Activities.Presentation.Converters;
    using System.Activities.Presentation.Model;
    using System.Activities.Presentation.PropertyEditing;
    using System.Activities.Presentation.View;
    using System.Windows;
    using System.Runtime;
    using System.Windows.Controls;
 
    sealed class CorrelatesOnValueEditor : DialogPropertyValueEditor
    {
        public CorrelatesOnValueEditor()
        {
            this.InlineEditorTemplate = EditorCategoryTemplateDictionary.Instance.GetCategoryTemplate("CorrelatesOnDesigner_InlineTemplate");
        }
 
        public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource)
        {
            ModelPropertyEntryToOwnerActivityConverter propertyEntryConverter = new ModelPropertyEntryToOwnerActivityConverter();
 
            ModelItem modelItem = (ModelItem)propertyEntryConverter.Convert(propertyValue.ParentProperty, typeof(ModelItem), false, null);
            EditingContext context = modelItem.GetEditingContext();
 
            this.ShowDialog(modelItem, context);
        }
 
        public void ShowDialog(ModelItem activity, EditingContext context)
        {
            Fx.Assert(activity != null, "Activity model item shouldn't be null!");
            Fx.Assert(context != null, "EditingContext shouldn't be null!");
 
 
            string bookmarkTitle = (string)this.InlineEditorTemplate.Resources["bookmarkTitle"];
 
            UndoEngine undoEngine = context.Services.GetService<UndoEngine>();
            Fx.Assert(null != undoEngine, "UndoEngine should be available");
 
            using (EditingScope scope = context.Services.GetRequiredService<ModelTreeManager>().CreateEditingScope(bookmarkTitle, true))
            {
                if ((new EditorWindow(activity, context)).ShowOkCancel())
                {
                    scope.Complete();
                }
            }
        }
 
        sealed class EditorWindow : WorkflowElementDialog
        {
            public EditorWindow(ModelItem activity, EditingContext context)
            {
                this.ModelItem = activity;
                this.Context = context;
                this.Owner = activity.View;
                this.EnableMaximizeButton = false;
                this.EnableMinimizeButton = false;
                this.MinHeight = 250;
                this.MinWidth = 450;
                this.WindowResizeMode = ResizeMode.CanResize;
                this.WindowSizeToContent = SizeToContent.Manual;
                var template = EditorCategoryTemplateDictionary.Instance.GetCategoryTemplate("CorrelatesOnDesigner_DialogTemplate");
 
                var presenter = new ContentPresenter()
                {
                    Content = activity,
                    ContentTemplate = template
                };
                this.Title = (string)template.Resources["controlTitle"];
                this.Content = presenter;
                this.HelpKeyword = HelpKeywords.CorrelatesOnDefinitionDialog;
            }
 
            protected override void OnWorkflowElementDialogClosed(bool? dialogResult)
            {
                if (dialogResult.HasValue && dialogResult.Value)
                {
                    var correlatesOnProperty = this.ModelItem.Properties["CorrelatesOn"];
 
                    if (correlatesOnProperty.IsSet && 0 == correlatesOnProperty.Dictionary.Count)
                    {
                        correlatesOnProperty.ClearValue();
                    }
                }
            }
        }
    }
}