private void Core_ProxyAdded(Core sender, IEnumerable <ICOMObject> ownerPath, ICOMObject comObject)
        {
            Action method = delegate
            {
                try
                {
                    TreeNode node = FindPath(ownerPath);
                    if (null != node)
                    {
                        TreeNode newNode = node.Nodes.Add(ComObjectName(comObject));
                        newNode.Tag = comObject.GetHashCode();
                        if (ViewOptions.HighlightNewNodes)
                        {
                            newNode.BackColor = Color.LightGreen;
                            HighlightNodes.Add(newNode, DateTime.Now);
                        }
                        if (ViewOptions.AutoExpandNodes)
                        {
                            HierarchicalGrid.ExpandAll();
                        }
                    }
                }
                catch (Exception exception)
                {
                    ShowOverlayError(exception);
                }
            };

            TryBeginInvoke(method);
        }
        private void ShowDataSource(object dataSource)
        {
            if (dataSource is TrayMenuMonitorItem.Options)
            {
                EnumeratorGrid.Visible   = false;
                SingleGrid.Visible       = false;
                HierarchicalGrid.Visible = false;
                OptionsGrid.Visible      = true;
            }
            else if (dataSource is IEnumerable <ICOMObject> )
            {
                EnumeratorGrid.Visible   = false;
                SingleGrid.Visible       = false;
                HierarchicalGrid.Visible = true;
                OptionsGrid.Visible      = false;

                IEnumerable <ICOMObject> comObjects = dataSource as IEnumerable <ICOMObject>;
                HierarchicalGrid.Nodes.Clear();

                foreach (ICOMObject comObject in comObjects)
                {
                    TreeNode node = HierarchicalGrid.Nodes.Add(ComObjectName(comObject));
                    node.Tag = comObject.GetHashCode();
                    ICOMObject[] childs     = comObject.ChildObjects.ToArray();
                    TreeNode[]   childNodes = new TreeNode[childs.Length];
                    for (int i = 0; i < childs.Length; i++)
                    {
                        ICOMObject subObj = childs[i];
                        childNodes[i]     = new TreeNode(ComObjectName(subObj));
                        childNodes[i].Tag = subObj.GetHashCode();
                        EnumerateProxies(childNodes[i], subObj.ChildObjects.ToArray());
                    }

                    if (childNodes.Length > 0)
                    {
                        node.Nodes.AddRange(childNodes);
                    }
                }

                if (ViewOptions.AutoExpandNodes)
                {
                    HierarchicalGrid.ExpandAll();
                }
            }
            else if (dataSource is IEnumerable)
            {
                EnumeratorGrid.Visible    = true;
                SingleGrid.Visible        = false;
                HierarchicalGrid.Visible  = false;
                OptionsGrid.Visible       = false;
                EnumeratorGrid.DataSource = dataSource;

                switch (EnumeratorGrid.Columns.Count)
                {
                case 1:
                    EnumeratorGrid.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;
                    EnumeratorGrid.Columns[0].Width        = EnumeratorGrid.Width - 32;
                    break;

                case 2:
                    EnumeratorGrid.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;
                    EnumeratorGrid.Columns[0].Width        = (EnumeratorGrid.Width / 2) - 16;
                    EnumeratorGrid.Columns[1].Width        = (EnumeratorGrid.Width / 2) - 16;
                    break;

                case 3:
                    EnumeratorGrid.Columns[0].Width   = FirstColumnOptimumWidht();
                    EnumeratorGrid.Columns[1].Visible = ViewOptions.ShowConsoleTimeColumn;
                    EnumeratorGrid.Columns[2].Visible = ViewOptions.ShowConsoleKindColumn;
                    if (!EnumeratorGrid.Columns[1].Visible || !EnumeratorGrid.Columns[2].Visible)
                    {
                        EnumeratorGrid.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                    }
                    else
                    {
                        EnumeratorGrid.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;
                    }
                    break;

                case 0:
                    break;

                default:
                    break;
                }
            }
            else
            {
                SingleGrid.SelectedObject = dataSource;
                EnumeratorGrid.Visible    = false;
                SingleGrid.Visible        = true;
                HierarchicalGrid.Visible  = false;
                OptionsGrid.Visible       = false;
            }
        }