private void HandleStateStatusChange(object sender, StateStatusChangeEventArgs e)
        {
            Node N;

            MethodInvoker action = delegate
            {
                DrawProtocolStates();
                switch (e.StateStatus)
                {
                case State.Statuses.Started:
                    N = graph.FindNode(ProtocolProvider.GetStateDesplayName(e.CurrentState));
                    N.Attr.FillColor = Microsoft.Msagl.Drawing.Color.MediumSeaGreen;
                    break;

                case State.Statuses.FatalError:
                    N = graph.FindNode(ProtocolProvider.GetStateDesplayName(e.CurrentState));
                    N.Attr.FillColor = Microsoft.Msagl.Drawing.Color.Red;
                    break;

                case State.Statuses.RuntimeError:
                    N = graph.FindNode(ProtocolProvider.GetStateDesplayName(e.CurrentState));
                    N.Attr.FillColor = Microsoft.Msagl.Drawing.Color.Yellow;
                    break;
                    //TODO:Add all Statuses
                }

                ProtocolStatesViewer.Refresh();
            };

            ProtocolStatesViewer.BeginInvoke(action);

            string Title = string.Format("{0}:{1}\n{2}", ProtocolProvider.GetStateDesplayName(e.CurrentState), e.StateStatus, e.Message);

            Log.LogEntery(new LoggingEntery("OctoTipPlus Appilcation", "ProtocolUserControl", Title, LoggingEntery.EnteryTypes.Debug));
        }
        void ProtocolStatesViewerSelectionChanged(object sender, EventArgs e)
        {
            object selectedObject = ProtocolStatesViewer.SelectedObject;

            if (selectedObject != null)
            {
                if (selectedObject is Edge)
                {
                    Edge SelectedEdge = selectedObject as Edge;
                }
                else if (selectedObject is Node)
                {
                    Node   SelectedNode         = selectedObject as Node;
                    string DescriptionAttribute = ProtocolProvider.GetStateDescription(ProtocolProvider.GetStatePlugInByDesplayName(SelectedNode.Id, UserControlProtocolType));
                    ProtocolStatesViewer.SetToolTip(new ToolTip(), DescriptionAttribute);
                }
            }

            //here you can use e.Attr.Id to get back to your data
            //this.gViewer.SetToolTip(toolTip1, String.Format("node {0}", (selectedObject as Node).Attr.Id));
            ProtocolStatesViewer.Invalidate();
        }