static AttributeInspectorForm()
        {
            /* read the schema from our application directory */
            /* NOTE: we use XPathDocument instead of XmlDocument since it is faster in the read-only case */
            XPathNavigator schema = new XPathDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "attributes.xml")).CreateNavigator();

            /* scan attribute schema for graph components */
            _graphProperties = GetComponentProperties(schema, "graph");
            _nodeProperties = GetComponentProperties(schema, "node");
            _edgeProperties = GetComponentProperties(schema, "edge");

            // NOTE: this has to run AFTER we set up the graph, node & edge properties so the external property tabs can read them in
            _instance = new AttributeInspectorForm();
        }
        static AttributeInspectorForm()
        {
            /* read the schema from our application directory */
            /* NOTE: we use XPathDocument instead of XmlDocument since it is faster in the read-only case */
            XPathNavigator schema = new XPathDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "attributes.xml")).CreateNavigator();

            /* scan attribute schema for graph components */
            _graphProperties = GetComponentProperties(schema, "graph");
            _nodeProperties  = GetComponentProperties(schema, "node");
            _edgeProperties  = GetComponentProperties(schema, "edge");

            // NOTE: this has to run AFTER we set up the graph, node & edge properties so the external property tabs can read them in
            _instance = new AttributeInspectorForm();
        }
 protected override void OnFormClosing(FormClosingEventArgs e)
 {
     if (e.CloseReason == CloseReason.UserClosing)
     {
     /* instead of closing, we hide ourselves */
     Hide();
     e.Cancel = true;
     }
     else
         _instance = null;
 }