File: InvokeMethodActivityDesigner.cs

package info (click to toggle)
mono 6.12.0.199%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 1,296,836 kB
  • sloc: cs: 11,181,803; xml: 2,850,076; ansic: 699,709; cpp: 123,344; perl: 59,361; javascript: 30,841; asm: 21,853; makefile: 20,405; sh: 15,009; python: 4,839; pascal: 925; sql: 859; sed: 16; php: 1
file content (106 lines) | stat: -rw-r--r-- 4,468 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
namespace System.Workflow.Activities
{
    using System;
    using System.Text;
    using System.Reflection;
    using System.Collections;
    using System.CodeDom;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Workflow.ComponentModel;
    using System.Workflow.ComponentModel.Design;
    using System.Workflow.ComponentModel.Compiler;
    using System.Workflow.Activities.Common;

    #region Class CallExternalMethodActivityDesigner
    [ActivityDesignerTheme(typeof(InvokeMethodDesignerTheme))]
    internal class CallExternalMethodActivityDesigner : ActivityDesigner
    {
        protected override void PreFilterProperties(IDictionary properties)
        {
            base.PreFilterProperties(properties);

            CallExternalMethodActivity invokeMethod = Activity as CallExternalMethodActivity;

            object corrRefProperty = properties["CorrelationToken"];
            AddRemoveCorrelationToken(invokeMethod.InterfaceType, properties, corrRefProperty);

            Type type = invokeMethod.InterfaceType;
            if (type == null)
                return;

            AddRemoveCorrelationToken(type, properties, corrRefProperty);

            invokeMethod.GetParameterPropertyDescriptors(properties);
        }

        private void AddRemoveCorrelationToken(Type interfaceType, IDictionary properties, object corrRefProperty)
        {
            if (interfaceType != null)
            {
                object[] corrProvAttribs = interfaceType.GetCustomAttributes(typeof(CorrelationProviderAttribute), false);
                object[] corrParamAttribs = interfaceType.GetCustomAttributes(typeof(CorrelationParameterAttribute), false);
                if (corrProvAttribs.Length != 0 || corrParamAttribs.Length != 0)
                {
                    if (!properties.Contains("CorrelationToken"))
                        properties.Add("CorrelationToken", corrRefProperty);
                    return;
                }
            }
            if (properties.Contains("CorrelationToken"))
                properties.Remove("CorrelationToken");
        }

        protected override void OnActivityChanged(ActivityChangedEventArgs e)
        {
            base.OnActivityChanged(e);

            if (e.Member != null)
            {
                if (e.Member.Name == "InterfaceType")
                {
                    if (Activity.Site != null)
                    {
                        Type interfaceType = e.NewValue as Type;
                        if (interfaceType != null)
                            new ExternalDataExchangeInterfaceTypeFilterProvider(Activity.Site).CanFilterType(interfaceType, true);

                        CallExternalMethodActivity invokeActivity = e.Activity as CallExternalMethodActivity;
                        PropertyDescriptorUtils.SetPropertyValue(Activity.Site, TypeDescriptor.GetProperties(Activity)["MethodName"], Activity, String.Empty);

                        IExtendedUIService extUIService = (IExtendedUIService)Activity.Site.GetService(typeof(IExtendedUIService));
                        if (extUIService == null)
                            throw new Exception(SR.GetString(SR.General_MissingService, typeof(IExtendedUIService).FullName));
                    }
                }

                if ((e.Member.Name == "MethodName")
                    && e.Activity is CallExternalMethodActivity)
                    (e.Activity as CallExternalMethodActivity).ParameterBindings.Clear();

                if (e.Member.Name == "InterfaceType" || e.Member.Name == "MethodName" || e.Member.Name == "CorrelationToken")
                    TypeDescriptor.Refresh(e.Activity);
            }
        }

    }
    #endregion

    #region InvokeMethodDesignerTheme
    internal sealed class InvokeMethodDesignerTheme : ActivityDesignerTheme
    {
        public InvokeMethodDesignerTheme(WorkflowTheme theme)
            : base(theme)
        {
            this.ForeColor = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
            this.BorderColor = Color.FromArgb(0xFF, 0x73, 0x79, 0xA5);
            this.BorderStyle = DashStyle.Solid;
            this.BackColorStart = Color.FromArgb(0xFF, 0xDF, 0xE8, 0xFF);
            this.BackColorEnd = Color.FromArgb(0xFF, 0x95, 0xB3, 0xFF);
            this.BackgroundStyle = LinearGradientMode.Horizontal;
        }
    }
    #endregion
}