public Class GetSuperClass(ClassDiagramData data)
 {
     for (int index = 0; index < data.classes.Length; index++) {
         Class clazz = (Class)data.classes.GetValue (index);
         if (clazz.name == superClassName) {
             return clazz;
         }
     }
     return null;
 }
    void OnGUI()
    {
        GameObject gameObject = Selection.activeGameObject;
        if (!gameObject) {
            return;
        }

        ClassDiagramData classData = gameObject.GetComponent<ClassDiagramData> ();
        if (!classData) {
            return;
        }

        cuurentClassData = classData;

        int focusWindowId_old = focusWidowId;
        Class focusWindowClass_old = focusClass;

        if (mode == mode_draw) {
            if ((Event.current.button == 0) && (Event.current.type == EventType.MouseDown)) {
                focusWidowId = -1;
                focusClass = null;
            }
        }

        if (GUI.Button (new Rect (10, 35, 25, 18), "+")) {
            System.Collections.Generic.List<Class> classList = new System.Collections.Generic.List<Class> (classData.classes);
            Class newClass = new Class ();
            {
                string newName = newClass.name;
                int size = classData.classes.Length;
                if (0 < size) {
                    string nameTemp = newName;
                    int index = 1;
                    while (true) {
                        bool exist = false;
                        foreach (Class c in classList) {
                            if (c.name == nameTemp) {
                                exist = true;
                                break;
                            }
                        }
                        if (exist) {
                            nameTemp = newName + " " + index;
                            index ++;
                        } else {
                            newName = nameTemp;
                            break;
                        }

                    }

                }
                newClass.name = newName;
            }
            {
                Rect newRect = new Rect (newClass.rect);
                int size = classData.classes.Length;
                if (0 < size) {
                    while (true) {
                        bool exist = false;
                        foreach (Class c in classList) {
                            if (c.rect.x == newRect.x && c.rect.y == newRect.y) {
                                exist = true;
                                break;
                            }
                        }
                        if (exist) {
                            newRect.x += 20;
                            newRect.y += 20;
                        } else {
                            break;
                        }

                    }

                }
                newClass.rect = newRect;
            }

            classList.Add (newClass);
            cuurentClassData.classes = classList.ToArray ();
        }

        cuurentClassData.diagramName = GUI.TextField (new Rect (10, 10, 200, 20), cuurentClassData.diagramName);

        GUIStyle windowStyle = new GUIStyle (GUIStyle.none);
        BeginWindows ();
        for (int index = 0; index < cuurentClassData.classes.Length; index++) {
            Class clazz = (Class)cuurentClassData.classes.GetValue (index);
            clazz.rect = GUI.Window (index, clazz.rect, drawWindow, "", windowStyle);

            if (focusWidowId == index) {
                focusClass = clazz;
            }

            if (clazz.superClassName != null) {
                Class target = clazz.GetSuperClass (cuurentClassData);
                if (target != null) {
                    curveFromTo (clazz.rect, target.rect, new Color (0.3f, 0.7f, 0.4f), s);
                }
            }
        }
        EndWindows ();

        if (mode == mode_ref) {
            if (refModeTargetClass != null) {
                refModeClass.superClassName = refModeTargetClass.name;

                mode = mode_draw;
                refModeTargetClass = null;
            }
        }
    }
    public Class GetDestClass(ClassDiagramData data)
    {
        for (int index = 0; index < data.classes.Length; index++) {

        }
        return null;
    }