public override void PerformReflection(ReflectionContext context) { WorkflowNode workflowNode = context.CurrentTreeNode as WorkflowNode; if (workflowNode == null) { throw new ApplicationException("Expected the parent node to be a workflow node."); } object workflowInstance = null; try { workflowInstance = workflowNode.WorkflowType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, null, CultureInfo.InvariantCulture); } catch (Exception exc) { MessageBox.Show("Could not create workflow type: " + exc.ToString()); return; } TreeNode activitiesNode = new TreeNode(); activitiesNode.Text = "Activities"; activitiesNode.ImageIndex = activitiesNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivitiesNodeImageName); workflowNode.Nodes.Add(activitiesNode); if (!(workflowInstance is CompositeActivity)) { TreeNode none = new TreeNode(); none.Text = "<Workflow is not a CompositeActivity>"; activitiesNode.Nodes.Add(none); } else { Queue <KeyValuePair <CompositeActivity, TreeNode> > toProcess = new Queue <KeyValuePair <CompositeActivity, TreeNode> >(); toProcess.Enqueue(new KeyValuePair <CompositeActivity, TreeNode>((CompositeActivity)workflowInstance, activitiesNode)); while (toProcess.Count > 0) { KeyValuePair <CompositeActivity, TreeNode> pair = toProcess.Dequeue(); CompositeActivity compositeActivity = pair.Key; TreeNode parent = pair.Value; foreach (Activity activity in compositeActivity.Activities) { ActivityNode activityNode = new ActivityNode(); activityNode.Activity = activity; activityNode.ImageIndex = activityNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivityNodeImageName); parent.Nodes.Add(activityNode); ReflectChildComponents(context.CreateClone(activityNode)); if (activity is CompositeActivity) { toProcess.Enqueue(new KeyValuePair <CompositeActivity, TreeNode>((CompositeActivity)activity, activityNode)); } } } } }
public override void PerformReflection(ReflectionContext context) { WorkflowNode workflowNode = context.CurrentTreeNode as WorkflowNode; if (workflowNode == null) { throw new ApplicationException("Expected the parent node to be a workflow node."); } object workflowInstance = null; try { workflowInstance = workflowNode.WorkflowType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, null, CultureInfo.InvariantCulture); } catch (Exception exc) { MessageBox.Show("Could not create workflow type: " + exc.ToString()); return; } TreeNode activitiesNode = new TreeNode(); activitiesNode.Text = "Activities"; activitiesNode.ImageIndex = activitiesNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivitiesNodeImageName); workflowNode.Nodes.Add(activitiesNode); if (!(workflowInstance is CompositeActivity)) { TreeNode none = new TreeNode(); none.Text = "<Workflow is not a CompositeActivity>"; activitiesNode.Nodes.Add(none); } else { Queue<KeyValuePair<CompositeActivity, TreeNode>> toProcess = new Queue<KeyValuePair<CompositeActivity, TreeNode>>(); toProcess.Enqueue(new KeyValuePair<CompositeActivity, TreeNode>((CompositeActivity)workflowInstance, activitiesNode)); while (toProcess.Count > 0) { KeyValuePair<CompositeActivity, TreeNode> pair = toProcess.Dequeue(); CompositeActivity compositeActivity = pair.Key; TreeNode parent = pair.Value; foreach (Activity activity in compositeActivity.Activities) { ActivityNode activityNode = new ActivityNode (); activityNode.Activity = activity; activityNode.ImageIndex = activityNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivityNodeImageName); parent.Nodes.Add(activityNode); ReflectChildComponents(context.CreateClone(activityNode)); if (activity is CompositeActivity) { toProcess.Enqueue(new KeyValuePair<CompositeActivity, TreeNode>((CompositeActivity)activity, activityNode)); } } } } }