private void OnWalkerFoundActivity(Walker walker, WalkerEventArgs eventArgs)
        {
            TActivity foundActivity = eventArgs.CurrentActivity as TActivity;

            if (foundActivity != null)
            {
                if (this.matchMaker((TActivity)owner.Activity, foundActivity))
                {
                    matchingActivityDesigner.Add(GetDesigner(eventArgs.CurrentActivity));
                }
            }
        }
示例#2
0
        public void Walk(Activity seedActivity, bool walkChildren)
        {
            Queue queue = new Queue();

            queue.Enqueue(seedActivity);
            while (queue.Count > 0)
            {
                Activity activity = queue.Dequeue() as Activity;

                if (FoundActivity != null)
                {
                    WalkerEventArgs args = new WalkerEventArgs(activity);
                    FoundActivity(this, args);
                    if (args.Action == WalkerAction.Abort)
                        return;
                    if (args.Action == WalkerAction.Skip)
                        continue;
                }

                if (FoundProperty != null)
                {
                    if (!WalkProperties(activity))
                        return;
                }

                if (walkChildren && activity is CompositeActivity)
                {
                    if (useEnabledActivities)
                    {
                        foreach (Activity activity2 in Helpers.GetAllEnabledActivities((CompositeActivity)activity))
                            queue.Enqueue(activity2);
                    }
                    else
                    {
                        foreach (Activity activity2 in ((CompositeActivity)activity).Activities)
                            queue.Enqueue(activity2);
                    }
                }
            }
        }
示例#3
0
        public bool WalkProperties(Activity activity, object obj)
        {
            Activity currentActivity = obj as Activity;

            PropertyInfo[] props = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in props)
            {
                // !!Work around: no indexer property walking
                if (prop.GetIndexParameters() != null && prop.GetIndexParameters().Length > 0)
                    continue;

                DesignerSerializationVisibility visibility = GetSerializationVisibility(prop);
                if (visibility == DesignerSerializationVisibility.Hidden)
                    continue;

                //Try to see if we have dynamic property associated with the object on the same object
                //if so then we should compare if the dynamic property values match with the property type
                //if not we bail out
                object propValue = null;
                DependencyProperty dependencyProperty = DependencyProperty.FromName(prop.Name, obj.GetType());
                if (dependencyProperty != null && currentActivity != null)
                {
                    if (currentActivity.IsBindingSet(dependencyProperty))
                        propValue = currentActivity.GetBinding(dependencyProperty);
                    else
                        propValue = currentActivity.GetValue(dependencyProperty);
                }
                else
                {
                    try
                    {
                        propValue = prop.CanRead ? prop.GetValue(obj, null) : null;
                    }
                    catch
                    {
                        // Eat exceptions that occur while invoking the getter.
                    }
                }

                if (FoundProperty != null)
                {
                    WalkerEventArgs args = new WalkerEventArgs(activity, propValue, prop, obj);
                    FoundProperty(this, args);
                    if (args.Action == WalkerAction.Skip)
                        continue;
                    else if (args.Action == WalkerAction.Abort)
                        return false;
                }

                if (propValue is IList)
                {
                    //We do not need to reflect on the properties of the list
                    foreach (object childObj in (IList)propValue)
                    {
                        if (FoundProperty != null)
                        {
                            WalkerEventArgs args = new WalkerEventArgs(activity, childObj, null, propValue);
                            FoundProperty(this, args);
                            if (args.Action == WalkerAction.Skip)
                                continue;
                            else if (args.Action == WalkerAction.Abort)
                                return false;
                        }
                        if (childObj != null && IsBrowsableType(childObj.GetType()))
                        {
                            if (!WalkProperties(activity, childObj))
                                return false;
                        }
                    }
                }
                else if (propValue != null && IsBrowsableType(propValue.GetType()))
                {
                    if (!WalkProperties(activity, propValue))
                        return false;
                }
            }
            return true;
        }
示例#4
0
 private void Walker_DirectoryChanged(object sender, WalkerEventArgs e)
 {
     LoadDirectory(e.OldPath != e.NewPath);
 }