private void DrawGizmo(Rect rect)
        {
            if (GUI.Button(rect, GUIContent.none, EditorStyles.label))
            {
                HierarchyProEditorReflection.ShowIconSelectorForObject(this.gameObject, rect);
            }

            Texture2D icon = HierarchyProEditorReflection.GetIcon(this.gameObject);

            if (icon != null)
            {
                Rect iconRect = rect.GetCenteredIconRect(icon);
                try
                {
                    if (icon.name.StartsWith("sv_icon_dot"))
                    {
                        string woGizmo = icon.name.Substring(0, icon.name.Length - 12);
                        int    dotType = int.Parse(woGizmo.Substring(11));
                        if (dotType <= 7)
                        {
                            iconRect = rect.GetCenteredIconRect(icon, 8, 8);
                        }
                        else
                        {
                            iconRect = rect.GetCenteredIconRect(icon, 12, 12);
                        }
                    }
                    else if (icon.name.StartsWith("sv_label_"))
                    {
                        iconRect = rect.GetCenteredIconRect(icon, 14, 6);
                    }
                }
                catch
                {
                    // ignored
                }
                GUI.DrawTexture(iconRect, icon);
            }
        }
        private static void Load()
        {
            HierarchyProPreferences.Load();

            HierarchyProEditorCache.Initialize();
            HierarchyProEditorReflection.Load();
            HierarchyProEditorIcons.Load();
            HierarchyProEditorColors.Load();
            HierarchyProEditorStyles.Load();

            HierarchyProGroupLibrary.FindInstance();

            EditorApplication.update -= HierarchyProEditorLoader.Update;
            EditorApplication.hierarchyWindowChanged   -= HierarchyProEditorLoader.WindowChanged;
            EditorApplication.hierarchyWindowItemOnGUI -= HierarchyProEditorLoader.ItemOnGUI;
            Undo.undoRedoPerformed -= HierarchyProEditorLoader.UndoRedoPerformed;

            EditorApplication.update += HierarchyProEditorLoader.Update;
            EditorApplication.hierarchyWindowChanged   += HierarchyProEditorLoader.WindowChanged;
            EditorApplication.hierarchyWindowItemOnGUI += HierarchyProEditorLoader.ItemOnGUI;
            Undo.undoRedoPerformed += HierarchyProEditorLoader.UndoRedoPerformed;
        }