Update Reference Sources to .NET Framework 4.6.1
[mono.git] / mcs / class / referencesource / System.Activities.Core.Presentation / System / ServiceModel / Activities / Presentation / InitializeCorrelationDesigner.xaml.cs
1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //----------------------------------------------------------------
4
5 namespace System.ServiceModel.Activities.Presentation
6 {
7     using System;
8     using System.Activities.Core.Presentation.Themes;
9     using System.Activities.Presentation;
10     using System.Activities.Presentation.Metadata;
11     using System.Activities.Presentation.Converters;
12     using System.Activities.Presentation.Model;
13     using System.Activities.Presentation.PropertyEditing;
14     using System.Activities.Presentation.View;
15     using System.ComponentModel;
16     using System.Diagnostics.CodeAnalysis;
17     using System.Runtime;
18     using System.Windows;
19     using System.Collections.ObjectModel;
20
21     partial class InitializeCorrelationDesigner 
22     {
23         public const string CorrelationPropertyName = "Correlation";
24         public const string CorrelationDataPropertyName = "CorrelationData";
25
26         public InitializeCorrelationDesigner()
27         {
28             InitializeComponent();            
29         }
30
31         [SuppressMessage(FxCop.Category.Performance, FxCop.Rule.InitializeReferenceTypeStaticFieldsInline,
32             Justification = "PropertyValueEditors association needs to be done in the static constructor.")]
33         static InitializeCorrelationDesigner()
34         {
35             Type type = typeof(InitializeCorrelation);
36             AttributeTableBuilder builder = new AttributeTableBuilder();
37
38             builder.AddCustomAttributes(type, type.GetProperty("Correlation"),
39                 new DescriptionAttribute(StringResourceDictionary.Instance.GetString("messagingCorrelatesWithHint")));
40
41             builder.AddCustomAttributes(type, type.GetProperty("CorrelationData"),
42                 PropertyValueEditor.CreateEditorAttribute(typeof(CorrelationDataValueEditor)),
43                 new DescriptionAttribute(StringResourceDictionary.Instance.GetString("messagingCorrelationDataHint")));
44
45             builder.AddCustomAttributes(type, "CorrelationData", BrowsableAttribute.Yes);
46             MetadataStore.AddAttributeTable(builder.CreateTable());
47         }
48
49         void OnEditCorrelationData(object sender, RoutedEventArgs e)
50         {
51             var dlg = new CorrelationDataValueEditor();
52             dlg.ShowDialog(this.ModelItem, this.ModelItem.GetEditingContext());
53             this.UpdateButton();
54         }
55
56         protected override void OnReadOnlyChanged(bool isReadOnly)
57         {
58             this.btnCorrelationData.IsEnabled = !isReadOnly;
59             base.OnReadOnlyChanged(isReadOnly);
60         }
61
62         protected override void OnModelItemChanged(object newItem)
63         {
64             base.OnModelItemChanged(newItem);
65             this.UpdateButton();
66         }
67
68         void UpdateButton()
69         {
70             this.btnCorrelationData.Content =
71                 this.ModelItem.Properties[CorrelationDataPropertyName].IsSet ? this.FindResource("viewTitle") : this.FindResource("defineTitle");
72         }
73
74         internal sealed class CorrelationDataValueEditor : DialogPropertyValueEditor
75         {
76             public CorrelationDataValueEditor()
77             {
78                 this.InlineEditorTemplate = EditorCategoryTemplateDictionary.Instance.GetCategoryTemplate("CorrelationDataValueEditor_InlineTemplate");
79             }
80
81             public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource)
82             {
83                 ModelPropertyEntryToOwnerActivityConverter propertyEntryConverter = new ModelPropertyEntryToOwnerActivityConverter();
84
85                 ModelItem modelItem = (ModelItem)propertyEntryConverter.Convert(propertyValue.ParentProperty, typeof(ModelItem), false, null);
86                 EditingContext context = modelItem.GetEditingContext();
87
88                 this.ShowDialog(modelItem, context);
89             }
90
91             public void ShowDialog(ModelItem modelItem, EditingContext context)
92             {
93                 Fx.Assert(modelItem != null, "Activity model item shouldn't be null!");
94                 Fx.Assert(context != null, "EditingContext shouldn't be null!");
95                 
96                 new EditorWindow(modelItem, modelItem.Properties[CorrelationPropertyName].Value, this.GetCorrelationDataWrapperCollection(modelItem), context).ShowOkCancel();
97             }
98
99             ObservableCollection<CorrelationDataWrapper> GetCorrelationDataWrapperCollection(ModelItem modelItem)
100             {
101                 ObservableCollection<CorrelationDataWrapper> wrapperCollection = null;
102                 if (modelItem.ItemType == typeof(InitializeCorrelation))
103                 {
104                     wrapperCollection = new ObservableCollection<CorrelationDataWrapper>();
105                     foreach (ModelItem entry in modelItem.Properties[CorrelationDataPropertyName].Dictionary.Properties["ItemsCollection"].Collection)
106                     { 
107                         wrapperCollection.Add(new CorrelationDataWrapper((string)entry.Properties["Key"].ComputedValue, entry.Properties["Value"].Value));
108                     }
109                 }
110                 return wrapperCollection;
111             }
112
113             sealed class EditorWindow : WorkflowElementDialog
114             {
115                 public EditorWindow(ModelItem activity, ModelItem correlationHandler, ObservableCollection<CorrelationDataWrapper> correlationData, EditingContext context)
116                 {
117                     this.ModelItem = activity;
118                     this.Context = context;
119                     this.Owner = activity.View;
120                     this.MinHeight = 250;
121                     this.MinWidth = 450;
122                     this.EnableMaximizeButton = false;
123                     this.EnableMinimizeButton = false;
124                     this.WindowResizeMode = ResizeMode.CanResize;
125                     this.WindowSizeToContent = SizeToContent.Manual;
126                     var content = new CorrelationDataDesigner() 
127                     { 
128                         Activity = activity,
129                         CorrelationHandle = correlationHandler,
130                         CorrelationInitializeData = correlationData
131                     };
132                     this.Title = (string)content.Resources["controlTitle"];
133                     this.Content = content;
134                     this.HelpKeyword = HelpKeywords.InitializeCorrelationDialog;
135                 }
136
137                 protected override void OnWorkflowElementDialogClosed(bool? dialogResult)
138                 {
139                     if ((dialogResult.HasValue) && (dialogResult.Value))
140                     {
141                         (this.Content as CorrelationDataDesigner).CommitEdit();
142                     }
143                 }
144             }
145         }
146     }
147 }