//-------------------------------------------------------------------------------------------------------
// VST Plug-Ins SDK
// Version 2.4       $Date: 2006/01/12 09:05:31 $
//
// Category     : VST 2.x Classes
// Filename     : aeffeditor.h
// Created by   : Steinberg Media Technologies
// Description  : Editor Class for VST Plug-Ins
//
// © 2006, Steinberg Media Technologies, All Rights Reserved
//-------------------------------------------------------------------------------------------------------

#ifndef __aeffeditor__
#define __aeffeditor__

#include "audioeffectx.h"

//-------------------------------------------------------------------------------------------------------
/** VST Effect Editor class. */
//-------------------------------------------------------------------------------------------------------
class AEffEditor
{
public:
//-------------------------------------------------------------------------------------------------------
    AEffEditor (AudioEffect* effect = 0)    ///< Editor class constructor. Requires pointer to associated effect instance.
    : effect (effect)
    , systemWindow (0)
    {}

    virtual ~AEffEditor () ///< Editor class destructor.
    {}

    virtual AudioEffect* getEffect ()   { return effect; }                  ///< Returns associated effect instance
    virtual bool getRect (ERect** rect) { *rect = 0; return false; }        ///< Query editor size as #ERect
    virtual bool open (void* ptr)       { systemWindow = ptr; return 0; }   ///< Open editor, pointer to parent windows is platform-dependent (HWND on Windows, WindowRef on Mac).
    virtual void close ()               { systemWindow = 0; }               ///< Close editor (detach from parent window)
    virtual bool isOpen ()              { return systemWindow != 0; }       ///< Returns true if editor is currently open
    virtual void idle ()                {}                                  ///< Idle call supplied by Host application

#if TARGET_API_MAC_CARBON
    virtual void DECLARE_VST_DEPRECATED (draw) (ERect* rect) {}
    virtual VstInt32 DECLARE_VST_DEPRECATED (mouse) (VstInt32 x, VstInt32 y) { return 0; }
    virtual VstInt32 DECLARE_VST_DEPRECATED (key) (VstInt32 keyCode) { return 0; }
    virtual void DECLARE_VST_DEPRECATED (top) () {}
    virtual void DECLARE_VST_DEPRECATED (sleep) () {}
#endif

#if VST_2_1_EXTENSIONS
    virtual bool onKeyDown (VstKeyCode& keyCode)    { return false; }       ///< Receive key down event. Return true only if key was really used!
    virtual bool onKeyUp (VstKeyCode& keyCode)      { return false; }       ///< Receive key up event. Return true only if key was really used!
    virtual bool onWheel (float distance)           { return false; }       ///< Handle mouse wheel event, distance is positive or negative to indicate wheel direction.
    virtual bool setKnobMode (VstInt32 val)         { return false; }       ///< Set knob mode (if supported by Host). See CKnobMode in VSTGUI.
#endif

//-------------------------------------------------------------------------------------------------------
protected:
    AudioEffect* effect;    ///< associated effect instance
    void* systemWindow;     ///< platform-dependent parent window (HWND or WindowRef)
};

#endif // __aeffeditor__
