Ejemplo n.º 1
0
 private void DoTraceChanged(Object sender, TraceChangedInfo args)
 {
     //treeViewTraces.Nodes.Clear();
     //treeViewTraces.Nodes.Add(new TreeNode());
     //ShowTrace(debugEntity.TopRAD, treeViewTraces.Nodes[0]);
     if (args.Type == TraceChangedType.NewPanel)
     {
         TreeNode newPanelNode = new TreeNode();
         newPanelNode.Text = args.NewPanel.PanelInfo.PanelName;
         newPanelNode.Tag  = args.NewPanel;
         currentRADNode.Nodes.Add(newPanelNode);
         currentPanelNode            = newPanelNode;
         treeViewTraces.SelectedNode = newPanelNode;
     }
     else if (args.Type == TraceChangedType.NewRADCall)
     {
         TreeNode newRADNode = new TreeNode();
         newRADNode.Text = args.NewRad.RADName;
         newRADNode.Tag  = args.NewRad;
         currentRADNode.Nodes.Add(newRADNode);
         currentRADNode = newRADNode;
         treeViewTraces.SelectedNode = newRADNode;
     }
     else
     {
         currentRADNode = currentRADNode.Parent;
     }
 }
        private void DoTraceChanged(Object sender, TraceChangedInfo args)
        {
            if (args.Type == TraceChangedType.NewPanel)
            {
                TreeNode newPanelNode = new TreeNode();
                newPanelNode.Text        = args.NewPanel.PanelInfo.PanelName;
                args.NewPanel.PreContext = GetContext(args.NewPanel.RADName, args.NewPanel.PanelInfo.PanelName);
                if (args.OldPanel != null)
                {
                    args.OldPanel.PostContext = GetContext(args.OldPanel.RADName, args.OldPanel.PanelInfo.PanelName);
                }
                Invoke(new UpdateUI(delegate()
                {
                    newPanelNode.Tag = args.NewPanel;
                    currentRADNode.Nodes.Add(newPanelNode);
                    currentPanelNode            = newPanelNode;
                    treeViewTraces.SelectedNode = newPanelNode;
                }));
            }
            else if (args.Type == TraceChangedType.NewRADCall)
            {
                //To Avoid the first RAD call.
                if (args.NewRad.RADName != currentRADNode.Text)
                {
                    Invoke(new UpdateUI(delegate()
                    {
                        TreeNode newRADNode = new TreeNode();
                        newRADNode.Text     = args.NewRad.RADName;

                        newRADNode.Tag = args.NewRad;
                        currentRADNode.Nodes.Add(newRADNode);
                        currentRADNode = newRADNode;
                        treeViewTraces.SelectedNode = newRADNode;
                    }));
                }
            }
            else if (args.Type == TraceChangedType.RADCallReturn)
            {
                //if (args.OldPanel != null)
                //{
                //    args.OldPanel.PostContext = GetContext(args.OldPanel.RADName, args.OldPanel.PanelInfo.PanelName);
                //}
                currentRADNode = currentRADNode.Parent;
            }
            else
            {
                //Nothing to do.
            }
            //if (needHoldSMClient && checkboxAutoStep.Checked)
            //{
            //    GotoNextPanel();
            //}
        }
        public void AddTrace(Execute excuteObject)
        {
            ClientRequest clientRequest = excuteObject.ClientRequestEntity;

            if (clientRequest != null)
            {
                for (int i = clientRequest.Messages.Messages.Count - 1; i >= 0; i--)
                //for (int i = 0; i < clientRequest.Messages.Messages.Count ; i++)
                {
                    MessageItem messageItem  = clientRequest.Messages.Messages[i];
                    string      debugMessage = messageItem.Text.Trim();

                    //rad call.
                    if (radCallReg.IsMatch(debugMessage))
                    {
                        TraceChangedInfo changedInfo = new TraceChangedInfo();
                        changedInfo.OldRad   = currentRAD;
                        changedInfo.OldPanel = currentTrance as DebugTracePanel;

                        Match           radMatch       = radCallReg.Match(debugMessage);
                        GroupCollection groups         = radMatch.Groups;
                        string          threadId       = groups[1].Value;
                        string          currentRADName = groups[2].Value;
                        if (!followingReturn)
                        {
                            DebugTraceRADCall newRadCall = new DebugTraceRADCall();
                            newRadCall.Parent  = currentRAD;
                            newRadCall.RADName = currentRADName;

                            currentRAD.Traces.Add(newRadCall);
                            currentRAD = newRadCall;
                            radStack.Push(currentRADName);

                            currentTrance        = null;
                            changedInfo.NewRad   = currentRAD;
                            changedInfo.NewPanel = null;
                            changedInfo.Type     = TraceChangedType.NewRADCall;
                            if (OnTraceChanged != null)
                            {
                                OnTraceChanged(this, changedInfo);
                            }
                        }
                        else
                        {
                            //Check if current value is the same as the parent rad
                            if (currentRAD.RADName != currentRADName)
                            {
                                do
                                {
                                    radStack.Pop();
                                    currentRAD = currentRAD.Parent as DebugTraceRADCall;
                                }while (currentRADName != currentRAD.RADName);
                                //throw new Exception("RAD stack mismatched...");
                            }
                        }


                        followingReturn = false;
                        //nothing to do
                    }
                    else if (returnReg.IsMatch(debugMessage))
                    {
                        followingReturn = true;
                        TraceChangedInfo changedInfo = new TraceChangedInfo();
                        changedInfo.OldRad   = currentRAD;
                        changedInfo.OldPanel = currentTrance as DebugTracePanel;

                        radStack.Pop();
                        currentRAD = currentRAD.Parent as DebugTraceRADCall;

                        currentTrance        = null;
                        changedInfo.NewRad   = currentRAD;
                        changedInfo.NewPanel = null;
                        changedInfo.Type     = TraceChangedType.RADCallReturn;

                        if (OnTraceChanged != null)
                        {
                            OnTraceChanged(this, changedInfo);
                        }
                    }
                    else if (panelReg.IsMatch(debugMessage))
                    {
                        followingReturn = false;
                        TraceChangedInfo changedInfo = new TraceChangedInfo();
                        changedInfo.OldRad   = currentRAD;
                        changedInfo.OldPanel = currentTrance as DebugTracePanel;


                        Match           radMatch         = panelReg.Match(debugMessage);
                        GroupCollection groups           = radMatch.Groups;
                        string          threadId         = groups[1].Value;
                        string          currentPanelName = groups[2].Value;

                        RADPanel panel = new RADPanel();
                        panel.RADName   = currentRAD.RADName;
                        panel.PanelName = currentPanelName;

                        DebugTracePanel tracePanel = new DebugTracePanel();
                        tracePanel.PanelInfo = panel;
                        tracePanel.Parent    = currentRAD;
                        currentRAD.Traces.Add(tracePanel);
                        currentTrance = tracePanel;

                        changedInfo.NewRad   = currentRAD;
                        changedInfo.NewPanel = currentTrance as DebugTracePanel;
                        changedInfo.Type     = TraceChangedType.NewPanel;
                        if (OnTraceChanged != null)
                        {
                            OnTraceChanged(this, changedInfo);
                        }
                    }
                    else
                    {
                        //followingReturn = false;
                    }
                    //radStack.Push(messageItem);
                }
            }
        }