1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //----------------------------------------------------------------
5 namespace System.ServiceModel.Activities.Presentation
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;
19 using System.Collections.ObjectModel;
21 partial class InitializeCorrelationDesigner
23 public const string CorrelationPropertyName = "Correlation";
24 public const string CorrelationDataPropertyName = "CorrelationData";
26 public InitializeCorrelationDesigner()
28 InitializeComponent();
31 [SuppressMessage(FxCop.Category.Performance, FxCop.Rule.InitializeReferenceTypeStaticFieldsInline,
32 Justification = "PropertyValueEditors association needs to be done in the static constructor.")]
33 static InitializeCorrelationDesigner()
35 Type type = typeof(InitializeCorrelation);
36 AttributeTableBuilder builder = new AttributeTableBuilder();
38 builder.AddCustomAttributes(type, type.GetProperty("Correlation"),
39 new DescriptionAttribute(StringResourceDictionary.Instance.GetString("messagingCorrelatesWithHint")));
41 builder.AddCustomAttributes(type, type.GetProperty("CorrelationData"),
42 PropertyValueEditor.CreateEditorAttribute(typeof(CorrelationDataValueEditor)),
43 new DescriptionAttribute(StringResourceDictionary.Instance.GetString("messagingCorrelationDataHint")));
45 builder.AddCustomAttributes(type, "CorrelationData", BrowsableAttribute.Yes);
46 MetadataStore.AddAttributeTable(builder.CreateTable());
49 void OnEditCorrelationData(object sender, RoutedEventArgs e)
51 var dlg = new CorrelationDataValueEditor();
52 dlg.ShowDialog(this.ModelItem, this.ModelItem.GetEditingContext());
56 protected override void OnReadOnlyChanged(bool isReadOnly)
58 this.btnCorrelationData.IsEnabled = !isReadOnly;
59 base.OnReadOnlyChanged(isReadOnly);
62 protected override void OnModelItemChanged(object newItem)
64 base.OnModelItemChanged(newItem);
70 this.btnCorrelationData.Content =
71 this.ModelItem.Properties[CorrelationDataPropertyName].IsSet ? this.FindResource("viewTitle") : this.FindResource("defineTitle");
74 internal sealed class CorrelationDataValueEditor : DialogPropertyValueEditor
76 public CorrelationDataValueEditor()
78 this.InlineEditorTemplate = EditorCategoryTemplateDictionary.Instance.GetCategoryTemplate("CorrelationDataValueEditor_InlineTemplate");
81 public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource)
83 ModelPropertyEntryToOwnerActivityConverter propertyEntryConverter = new ModelPropertyEntryToOwnerActivityConverter();
85 ModelItem modelItem = (ModelItem)propertyEntryConverter.Convert(propertyValue.ParentProperty, typeof(ModelItem), false, null);
86 EditingContext context = modelItem.GetEditingContext();
88 this.ShowDialog(modelItem, context);
91 public void ShowDialog(ModelItem modelItem, EditingContext context)
93 Fx.Assert(modelItem != null, "Activity model item shouldn't be null!");
94 Fx.Assert(context != null, "EditingContext shouldn't be null!");
96 new EditorWindow(modelItem, modelItem.Properties[CorrelationPropertyName].Value, this.GetCorrelationDataWrapperCollection(modelItem), context).ShowOkCancel();
99 ObservableCollection<CorrelationDataWrapper> GetCorrelationDataWrapperCollection(ModelItem modelItem)
101 ObservableCollection<CorrelationDataWrapper> wrapperCollection = null;
102 if (modelItem.ItemType == typeof(InitializeCorrelation))
104 wrapperCollection = new ObservableCollection<CorrelationDataWrapper>();
105 foreach (ModelItem entry in modelItem.Properties[CorrelationDataPropertyName].Dictionary.Properties["ItemsCollection"].Collection)
107 wrapperCollection.Add(new CorrelationDataWrapper((string)entry.Properties["Key"].ComputedValue, entry.Properties["Value"].Value));
110 return wrapperCollection;
113 sealed class EditorWindow : WorkflowElementDialog
115 public EditorWindow(ModelItem activity, ModelItem correlationHandler, ObservableCollection<CorrelationDataWrapper> correlationData, EditingContext context)
117 this.ModelItem = activity;
118 this.Context = context;
119 this.Owner = activity.View;
120 this.MinHeight = 250;
122 this.EnableMaximizeButton = false;
123 this.EnableMinimizeButton = false;
124 this.WindowResizeMode = ResizeMode.CanResize;
125 this.WindowSizeToContent = SizeToContent.Manual;
126 var content = new CorrelationDataDesigner()
129 CorrelationHandle = correlationHandler,
130 CorrelationInitializeData = correlationData
132 this.Title = (string)content.Resources["controlTitle"];
133 this.Content = content;
134 this.HelpKeyword = HelpKeywords.InitializeCorrelationDialog;
137 protected override void OnWorkflowElementDialogClosed(bool? dialogResult)
139 if ((dialogResult.HasValue) && (dialogResult.Value))
141 (this.Content as CorrelationDataDesigner).CommitEdit();