1 //------------------------------------------------------------ 2 // Copyright (c) Microsoft Corporation. All rights reserved. 3 //------------------------------------------------------------ 4 5 namespace System.Workflow.Activities.Design 6 { 7 using System; 8 using System.Collections.Generic; 9 using System.Text; 10 using System.Drawing.Design; 11 using System.ComponentModel; 12 using System.ComponentModel.Design; 13 using System.Windows.Forms.Design; 14 using System.Workflow.ComponentModel; 15 using System.Workflow.ComponentModel.Design; 16 using System.Diagnostics; 17 using System.ServiceModel; 18 using System.Windows.Forms; 19 20 internal class ServiceOperationUIEditor : UITypeEditor 21 { 22 TryPickOperation(IServiceProvider serviceProvider, Activity activity, OperationInfoBase currentOperation, out OperationInfoBase selectedOperation)23 public static bool TryPickOperation(IServiceProvider serviceProvider, Activity activity, OperationInfoBase currentOperation, out OperationInfoBase selectedOperation) 24 { 25 selectedOperation = null; 26 bool isReceiveActivity = activity is ReceiveActivity; 27 try 28 { 29 using (OperationPickerDialog operationPicker = new OperationPickerDialog(serviceProvider, isReceiveActivity)) 30 { 31 Walker activityTreeWalker = new Walker(); 32 Type allowedActivityType = null; 33 34 if (isReceiveActivity) 35 { 36 allowedActivityType = typeof(ReceiveActivity); 37 } 38 else 39 { 40 allowedActivityType = typeof(SendActivity); 41 } 42 43 activityTreeWalker.FoundActivity += delegate(Walker walker, WalkerEventArgs eventArgs) 44 { 45 Activity foundActivity = eventArgs.CurrentActivity; 46 if (!(allowedActivityType.IsAssignableFrom(foundActivity.GetType()))) 47 { 48 return; 49 } 50 51 if (!foundActivity.Enabled) 52 { 53 return; 54 } 55 56 if (foundActivity is ReceiveActivity) 57 { 58 ReceiveActivity reciveActivity = foundActivity as ReceiveActivity; 59 if (reciveActivity.ServiceOperationInfo != null) 60 { 61 operationPicker.AddServiceOperation(reciveActivity.ServiceOperationInfo, reciveActivity); 62 } 63 } 64 if (foundActivity is SendActivity) 65 { 66 SendActivity sendActivity = foundActivity as SendActivity; 67 if (sendActivity.ServiceOperationInfo != null) 68 { 69 operationPicker.AddServiceOperation(sendActivity.ServiceOperationInfo, sendActivity); 70 } 71 } 72 }; 73 activityTreeWalker.Walk(activity.RootActivity); 74 OperationInfoBase currentServiceOperationInfo = currentOperation as OperationInfoBase; 75 if (currentServiceOperationInfo != null) 76 { 77 operationPicker.SelectedOperation = currentServiceOperationInfo; 78 } 79 DialogResult dialogResult = operationPicker.ShowDialog(); 80 if ((operationPicker.SelectedOperation != null) && (dialogResult == DialogResult.OK) && !operationPicker.SelectedOperation.Equals(currentServiceOperationInfo)) 81 { 82 selectedOperation = operationPicker.SelectedOperation.Clone(); 83 return true; 84 } 85 } 86 } 87 catch (Exception e) 88 { 89 DesignerHelpers.ShowMessage(serviceProvider, e.Message, DR.GetString(DR.WorkflowDesignerTitle), MessageBoxButtons.OK, 90 MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 91 throw; 92 } 93 94 return false; 95 } EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)96 public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 97 { 98 if (context == null) 99 { 100 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); 101 } 102 if (provider == null) 103 { 104 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("provider"); 105 } 106 107 OperationInfoBase pickedServiceOperation = null; 108 if (TryPickOperation(provider, (Activity) context.Instance, (OperationInfoBase) value, out pickedServiceOperation)) 109 { 110 return pickedServiceOperation; 111 } 112 else 113 { 114 return base.EditValue(context, provider, value); 115 } 116 117 } 118 119 GetEditStyle(ITypeDescriptorContext context)120 public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 121 { 122 return UITypeEditorEditStyle.Modal; 123 } 124 } 125 } 126