//==============================================================================
    public override bool OnGUI(IAudioEffectPlugin plugin)
    {
        PluginGUIInstance guiInstance = getGUIInstanceForPlugin(ref plugin);

        if (!guiInstance.hasEditor)
        {
            return(true);
        }

        float[] arr;
        plugin.GetFloatBuffer("Size", out arr, 6);

        Rect r = GUILayoutUtility.GetRect(arr[0], arr[1],
                                          new GUILayoutOption[] { GUILayout.MinWidth(arr[2]), GUILayout.MinHeight(arr[3]),
                                                                  GUILayout.MaxWidth(arr[4]), GUILayout.MaxHeight(arr[5]) });

        int       controlID        = GUIUtility.GetControlID(FocusType.Passive);
        Event     currentEvent     = Event.current;
        EventType currentEventType = currentEvent.GetTypeForControl(controlID);

        if (currentEventType == EventType.Repaint)
        {
            guiInstance.repaint(r);
        }
        else if (currentEvent.isMouse)
        {
            guiInstance.handleMouseEvent(currentEventType);
        }
        else if (currentEvent.isKey)
        {
            guiInstance.handleKeyEvent(currentEventType);
        }

        return(false);
    }
    private PluginGUIInstance getGUIInstanceForPlugin(ref IAudioEffectPlugin plugin)
    {
        float[] idArray;
        plugin.GetFloatBuffer("ID", out idArray, 1);

        int id = (int)idArray[0];

        for (int i = 0; i < guis.Count; ++i)
        {
            if (guis[i].instanceID == id)
            {
                return(guis[i]);
            }
        }

        PluginGUIInstance newInstance = new PluginGUIInstance(ref plugin, id);

        guis.Add(newInstance);

        return(guis[guis.Count - 1]);
    }