1 /////////////////////////////////////////////////////////////////////////////
2 // Name: ext/grid/cpp/editor.h
3 // Purpose: wxPlGridCellEditor
4 // Author: Mattia Barbon
7 // RCS-ID: $Id: editor.h 2533 2009-03-08 19:03:35Z mbarbon $
8 // Copyright: (c) 2003-2005, 2009 Mattia Barbon
9 // Licence: This program is free software; you can redistribute it and/or
10 // modify it under the same terms as Perl itself
11 /////////////////////////////////////////////////////////////////////////////
13 #include "cpp/v_cback.h"
14 #include <wx/clntdata.h>
15 #include "cpp/helpers.h"
17 #define DEC_V_CBACK_BOOL__INT_INT_cWXGRID_WXSTRING_WXSTRINGp( METHOD ) \
18 bool METHOD( int, int, const wxGrid*, const wxString&, wxString* )
20 #define DEF_V_CBACK_BOOL__INT_INT_cWXGRID_WXSTRING_WXSTRINGp_pure( CLASS, BASE, METHOD )\
21 bool CLASS::METHOD( int p1, int p2, const wxGrid* p3, const wxString& p4, wxString* p5 ) \
24 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) ) \
26 wxAutoSV ret( aTHX_ wxPliCCback( aTHX_ &m_callback, G_SCALAR, \
27 "iiOP", p1, p2, p3, &p4 ) ); \
28 WXSTRING_INPUT( *p5, const char *, ret ); \
34 #define DEC_V_CBACK_VOID__INT_INT_WXGRID_pure( METHOD ) \
35 void METHOD( int, int, wxGrid* )
37 #define DEF_V_CBACK_VOID__INT_INT_WXGRID_pure( CLASS, BASE, METHOD ) \
38 void CLASS::METHOD( int param1, int param2, wxGrid* param3 ) \
41 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) ) \
43 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, \
45 "iiO", param1, param2, param3 ); \
49 #define DEC_V_CBACK_BOOL__INT_INT_WXGRID_pure( METHOD ) \
50 bool METHOD( int, int, wxGrid* )
52 #define DEF_V_CBACK_BOOL__INT_INT_WXGRID_pure( CLASS, BASE, METHOD ) \
53 bool CLASS::METHOD( int param1, int param2, wxGrid* param3 ) \
56 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) ) \
58 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, \
60 "iiO", param1, param2, \
62 bool bret = SvTRUE( ret ); \
63 SvREFCNT_dec( ret ); \
69 #define DEC_V_CBACK_BOOL__WXKEYEVENT( METHOD ) \
70 bool METHOD( wxKeyEvent& event )
72 #define DEF_V_CBACK_BOOL__WXKEYEVENT( CLASS, BASE, METHOD ) \
73 bool CLASS::METHOD( wxKeyEvent& param1 ) \
76 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) ) \
78 SV* evt = wxPli_object_2_sv( aTHX_ newSViv( 0 ), ¶m1 ); \
79 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, \
82 bool val = SvTRUE( ret ); \
83 sv_setiv( SvRV( evt ), 0 ); \
84 SvREFCNT_dec( evt ); \
85 SvREFCNT_dec( ret ); \
88 return BASE::METHOD( param1 ); \
91 #define DEC_V_CBACK_VOID__WXKEYEVENT( METHOD ) \
92 void METHOD( wxKeyEvent& event )
94 #define DEF_V_CBACK_VOID__WXKEYEVENT( CLASS, BASE, METHOD ) \
95 void CLASS::METHOD( wxKeyEvent& param1 ) \
98 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) ) \
100 SV* evt = wxPli_object_2_sv( aTHX_ newSViv( 0 ), ¶m1 ); \
101 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, \
102 G_SCALAR|G_DISCARD, \
104 sv_setiv( SvRV( evt ), 0 ); \
105 SvREFCNT_dec( evt ); \
107 BASE::METHOD( param1 ); \
110 class wxPlGridCellEditor : public wxGridCellEditor
113 wxPliVirtualCallback m_callback;
115 wxPlGridCellEditor( const char* package )
116 : m_callback( "Wx::PlGridCellEditor" )
118 m_callback.SetSelf( wxPli_make_object( this, package ), true );
121 void Create( wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler )
125 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Create" ) )
127 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
134 void SetSize( const wxRect& rect )
138 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "SetSize" ) )
140 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
142 "o", new wxRect( rect ),
145 wxGridCellEditor::SetSize( rect );
148 void Show( bool show, wxGridCellAttr* attr )
152 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Show" ) )
157 SV* attr_sv = wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
158 &attr, "Wx::GridCellAttr" );
160 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
162 "bs", show, attr_sv );
164 wxPli_detach_object( aTHX_ attr_sv );
169 wxGridCellEditor::Show( show, attr );
172 void PaintBackground( const wxRect& rect, wxGridCellAttr* attr )
176 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "PaintBackground" ) )
181 SV* attr_sv = wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
182 &attr, "Wx::GridCellAttr" );
184 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
186 "os", new wxRect( rect ),
189 wxPli_detach_object( aTHX_ attr_sv );
194 wxGridCellEditor::PaintBackground( rect, attr );
197 virtual wxGridCellEditor* Clone() const
201 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Clone" ) )
203 SV* ret = wxPliVirtualCallback_CallCallback
204 ( aTHX_ &m_callback, G_SCALAR, NULL );
205 wxGridCellEditor* clone =
206 (wxGridCellEditor*)wxPli_sv_2_object( aTHX_ ret, "Wx::GridCellEditor" );
215 virtual wxString GetValue() const { return wxEmptyString; }
217 DEC_V_CBACK_VOID__INT_INT_WXGRID_pure( BeginEdit );
218 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
219 DEC_V_CBACK_VOID__INT_INT_WXGRID_pure( ApplyEdit );
220 DEC_V_CBACK_BOOL__INT_INT_cWXGRID_WXSTRING_WXSTRINGp( EndEdit );
222 DEC_V_CBACK_BOOL__INT_INT_WXGRID_pure( EndEdit );
224 DEC_V_CBACK_VOID__VOID( Reset );
225 DEC_V_CBACK_VOID__VOID( Destroy );
226 DEC_V_CBACK_VOID__VOID( StartingClick );
227 DEC_V_CBACK_BOOL__WXKEYEVENT( IsAcceptedKey );
228 DEC_V_CBACK_VOID__WXKEYEVENT( StartingKey );
229 DEC_V_CBACK_VOID__WXKEYEVENT( HandleReturn );
232 DEF_V_CBACK_VOID__INT_INT_WXGRID_pure( wxPlGridCellEditor, wxGridCellEditor, BeginEdit );
233 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
234 DEF_V_CBACK_VOID__INT_INT_WXGRID_pure( wxPlGridCellEditor, wxGridCellEditor, ApplyEdit );
235 DEF_V_CBACK_BOOL__INT_INT_cWXGRID_WXSTRING_WXSTRINGp_pure( wxPlGridCellEditor, wxGridCellEditor, EndEdit );
237 DEF_V_CBACK_BOOL__INT_INT_WXGRID_pure( wxPlGridCellEditor, wxGridCellEditor, EndEdit );
239 DEF_V_CBACK_VOID__VOID_pure( wxPlGridCellEditor, wxGridCellEditor, Reset );
240 DEF_V_CBACK_VOID__VOID( wxPlGridCellEditor, wxGridCellEditor, Destroy );
241 DEF_V_CBACK_VOID__VOID( wxPlGridCellEditor, wxGridCellEditor, StartingClick );
242 DEF_V_CBACK_BOOL__WXKEYEVENT( wxPlGridCellEditor, wxGridCellEditor, IsAcceptedKey );
243 DEF_V_CBACK_VOID__WXKEYEVENT( wxPlGridCellEditor, wxGridCellEditor, StartingKey );
244 DEF_V_CBACK_VOID__WXKEYEVENT( wxPlGridCellEditor, wxGridCellEditor, HandleReturn );