Пример #1
0
        protected void UpdateVariable(VariableDetails varInfo)
        {
            if (variablesListView.ContainsKey(varInfo.ToString()))
            {
                TreeTableNode node = variablesListView[varInfo.ToString()];
                node.Tag = varInfo;

                if (!varInfo.Valid)
                {
                    node.Items.Clear();

                    // Only remove the variable if it's not a root watch expression
                    if (varInfo.WatchID > 0 && varInfo.Path.Length == 0)
                    {
                        node.ForeColor        = SystemColors.InactiveCaptionText;
                        node.SubItems[1].Text = QuoteValueString(varInfo.Value);
                        node.SubItems[2].Text = varInfo.Value.Type.ToString();
                    }
                    else
                    {
                        node.Parent.Items.Remove(node);
                    }
                }
                else
                {
                    node.Expandable = varInfo.HasEntries || (varInfo.HasMetadata && ShowMetadata);
                    node.Expanded   = varInfo.Expanded;

                    string value = QuoteValueString(varInfo.Value);

                    if (!varInfo.Expanded)
                    {
                        node.Items.Clear();
                    }

                    if (varInfo.Value.Type == LuaValueType.NONE)
                    {
                        node.Items.Clear();

                        node.ForeColor = SystemColors.InactiveCaptionText;
                    }
                    else if (node.SubItems[1].Text != value || node.SubItems[2].Text != varInfo.Value.Type.ToString())
                    {
                        node.ForeColor        = Color.Red;
                        node.SubItems[1].Text = value;
                        node.SubItems[2].Text = varInfo.Value.Type.ToString();
                    }
                    else
                    {
                        node.ForeColor = variablesListView.ForeColor;
                    }
                }
                node.Visible = IsVariableVisible(varInfo);
            }
            else if (varInfo.Valid && (varInfo.WatchID == 0 || mDebugger.FindWatch(varInfo.WatchID) != null))
            {
                TreeTableNode parent = FindClosestAncestor(varInfo);
                TreeTableNode node   = AddVariable(varInfo);
                parent.Items.Insert(node, mNodeComparer);
                node.Visible = IsVariableVisible(varInfo);
            }
        }