/////////////////////////////////////////////////////////////////////////////
// Name:        ext/dnd/cpp/droptarget.h
// Purpose:     c++ wrapper for wxPli*DropTarget
// Author:      Mattia Barbon
// Modified by:
// Created:     16/08/2001
// RCS-ID:      $Id: droptarget.h 2057 2007-06-18 23:03:00Z mbarbon $
// Copyright:   (c) 2001-2002, 2004 Mattia Barbon
// Licence:     This program is free software; you can redistribute it and/or
//              modify it under the same terms as Perl itself
/////////////////////////////////////////////////////////////////////////////

#include <wx/dnd.h>
#include "cpp/v_cback.h"

class wxPliDropTarget:public wxDropTarget
{
    WXPLI_DECLARE_V_CBACK();
public:
    wxPliDropTarget( const char* package, wxDataObject* data = 0 )
        :wxDropTarget( data ),
         m_callback( "Wx::DropTarget" )
    {
        dTHX;
        // this is necessary because the SV returned to
        // the perl program _is not_ this one!
        // so _this_ SV must not delete the object,
        // this is responsibility of the program's one!
        SV* sv = wxPli_make_object( this, package );
        wxPli_object_set_deleteable( aTHX_ sv, false );
        m_callback.SetSelf( sv );
    }

    DEC_V_CBACK_WXDRAGRESULT__WXCOORD_WXCOORD_WXDRAGRESULT( OnData );
    DEC_V_CBACK_BOOL__WXCOORD_WXCOORD( OnDrop );
    DEC_V_CBACK_VOID__VOID( OnLeave );
    DEC_V_CBACK_WXDRAGRESULT__WXCOORD_WXCOORD_WXDRAGRESULT( OnEnter );
    DEC_V_CBACK_WXDRAGRESULT__WXCOORD_WXCOORD_WXDRAGRESULT( OnDragOver );
};

DEF_V_CBACK_WXDRAGRESULT__WXCOORD_WXCOORD_WXDRAGRESULT_pure( wxPliDropTarget, wxDropTarget, OnData );
DEF_V_CBACK_BOOL__WXCOORD_WXCOORD( wxPliDropTarget, wxDropTarget, OnDrop );
DEF_V_CBACK_VOID__VOID( wxPliDropTarget, wxDropTarget, OnLeave );
DEF_V_CBACK_WXDRAGRESULT__WXCOORD_WXCOORD_WXDRAGRESULT( wxPliDropTarget, wxDropTarget, OnEnter );
DEF_V_CBACK_WXDRAGRESULT__WXCOORD_WXCOORD_WXDRAGRESULT( wxPliDropTarget, wxDropTarget, OnDragOver );

class wxPliTextDropTarget:public wxTextDropTarget
{
    WXPLI_DECLARE_V_CBACK();
public:
    wxPliTextDropTarget( const char* package )
        :wxTextDropTarget(),
         m_callback( "Wx::TextDropTarget" )
    {
        dTHX;
        SV* sv = wxPli_make_object( this, package );
        wxPli_object_set_deleteable( aTHX_ sv, false );
        m_callback.SetSelf( sv );
    }

    DEC_V_CBACK_BOOL__WXCOORD_WXCOORD_WXSTRING( OnDropText );
};

DEF_V_CBACK_BOOL__WXCOORD_WXCOORD_WXSTRING_pure( wxPliTextDropTarget, wxTextDropTarget, OnDropText );

class wxPliFileDropTarget:public wxFileDropTarget
{
    WXPLI_DECLARE_V_CBACK();
public:
    wxPliFileDropTarget( const char* package )
        :wxFileDropTarget(),
         m_callback( "Wx::FileDropTarget" )
    {
        dTHX;
        SV* sv = wxPli_make_object( this, package );
        wxPli_object_set_deleteable( aTHX_ sv, false );
        m_callback.SetSelf( sv );
    }

    DEC_V_CBACK_BOOL__WXCOORD_WXCOORD_WXARRAYSTRING( OnDropFiles );
};

DEF_V_CBACK_BOOL__WXCOORD_WXCOORD_WXARRAYSTRING_pure( wxPliFileDropTarget, wxFileDropTarget, OnDropFiles );

// Local variables: //
// mode: c++ //
// End: //

