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)); } } }
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); } } } }
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; }
private void Walker_DirectoryChanged(object sender, WalkerEventArgs e) { LoadDirectory(e.OldPath != e.NewPath); }