Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / ext / grid / cpp / editor.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        ext/grid/cpp/editor.h
3 // Purpose:     wxPlGridCellEditor
4 // Author:      Mattia Barbon
5 // Modified by:
6 // Created:     28/05/2003
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 /////////////////////////////////////////////////////////////////////////////
12
13 #include "cpp/v_cback.h"
14 #include <wx/clntdata.h>
15 #include "cpp/helpers.h"
16
17 #define DEC_V_CBACK_BOOL__INT_INT_cWXGRID_WXSTRING_WXSTRINGp( METHOD ) \
18     bool METHOD( int, int, const wxGrid*, const wxString&, wxString* )
19
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 ) \
22   {                                                                           \
23     dTHX;                                                                     \
24     if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) )     \
25     {                                                                         \
26         wxAutoSV ret( aTHX_ wxPliCCback( aTHX_ &m_callback, G_SCALAR,         \
27                                          "iiOP", p1, p2, p3, &p4 ) );         \
28         WXSTRING_INPUT( *p5, const char *, ret );                             \
29         return SvOK( ret );                                                   \
30     } else                                                                    \
31         return false;                                                         \
32   }
33
34 #define DEC_V_CBACK_VOID__INT_INT_WXGRID_pure( METHOD ) \
35   void METHOD( int, int, wxGrid* )
36
37 #define DEF_V_CBACK_VOID__INT_INT_WXGRID_pure( CLASS, BASE, METHOD ) \
38   void CLASS::METHOD( int param1, int param2, wxGrid* param3 )                \
39   {                                                                           \
40     dTHX;                                                                     \
41     if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) )     \
42     {                                                                         \
43         wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,                 \
44                                            G_SCALAR|G_DISCARD,                \
45                                            "iiO", param1, param2, param3 );   \
46     }                                                                         \
47   }
48
49 #define DEC_V_CBACK_BOOL__INT_INT_WXGRID_pure( METHOD ) \
50   bool METHOD( int, int, wxGrid* )
51
52 #define DEF_V_CBACK_BOOL__INT_INT_WXGRID_pure( CLASS, BASE, METHOD ) \
53   bool CLASS::METHOD( int param1, int param2, wxGrid* param3 )                \
54   {                                                                           \
55     dTHX;                                                                     \
56     if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) )     \
57     {                                                                         \
58         SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,       \
59                                                      G_SCALAR,                \
60                                                      "iiO", param1, param2,   \
61                                                      param3 );                \
62         bool bret = SvTRUE( ret );                                            \
63         SvREFCNT_dec( ret );                                                  \
64         return bret;                                                          \
65     }                                                                         \
66     return false;                                                             \
67   }
68
69 #define DEC_V_CBACK_BOOL__WXKEYEVENT( METHOD ) \
70   bool METHOD( wxKeyEvent& event )
71
72 #define DEF_V_CBACK_BOOL__WXKEYEVENT( CLASS, BASE, METHOD ) \
73   bool CLASS::METHOD( wxKeyEvent& param1 )                                    \
74   {                                                                           \
75     dTHX;                                                                     \
76     if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) )     \
77     {                                                                         \
78         SV* evt = wxPli_object_2_sv( aTHX_ newSViv( 0 ), &param1 );           \
79         SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,       \
80                                                      G_SCALAR,                \
81                                                      "S", evt );              \
82         bool val = SvTRUE( ret );                                             \
83         sv_setiv( SvRV( evt ), 0 );                                           \
84         SvREFCNT_dec( evt );                                                  \
85         SvREFCNT_dec( ret );                                                  \
86         return val;                                                           \
87     } else                                                                    \
88         return BASE::METHOD( param1 );                                        \
89   }
90
91 #define DEC_V_CBACK_VOID__WXKEYEVENT( METHOD ) \
92   void METHOD( wxKeyEvent& event )
93
94 #define DEF_V_CBACK_VOID__WXKEYEVENT( CLASS, BASE, METHOD ) \
95   void CLASS::METHOD( wxKeyEvent& param1 )                                    \
96   {                                                                           \
97     dTHX;                                                                     \
98     if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, #METHOD ) )     \
99     {                                                                         \
100         SV* evt = wxPli_object_2_sv( aTHX_ newSViv( 0 ), &param1 );           \
101         wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,                 \
102                                            G_SCALAR|G_DISCARD,                \
103                                            "S", evt );                        \
104         sv_setiv( SvRV( evt ), 0 );                                           \
105         SvREFCNT_dec( evt );                                                  \
106     } else                                                                    \
107         BASE::METHOD( param1 );                                               \
108   }
109
110 class wxPlGridCellEditor : public wxGridCellEditor
111 {
112 public:
113     wxPliVirtualCallback m_callback;
114 public:
115     wxPlGridCellEditor( const char* package )
116         : m_callback( "Wx::PlGridCellEditor" )
117     {
118         m_callback.SetSelf( wxPli_make_object( this, package ), true );
119     }
120
121     void Create( wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler )
122     {
123         dTHX;
124
125         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Create" ) )
126         {
127             wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
128                                                G_DISCARD|G_SCALAR,
129                                                "OiO", parent, id,
130                                                evtHandler );
131         }
132     }
133
134     void SetSize( const wxRect& rect )
135     {
136         dTHX;
137
138         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "SetSize" ) )
139         {
140             wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
141                                                G_DISCARD|G_SCALAR,
142                                                "o", new wxRect( rect ),
143                                                "Wx::Rect" );
144         } else
145             wxGridCellEditor::SetSize( rect );
146     }
147
148     void Show( bool show, wxGridCellAttr* attr )
149     {
150         dTHX;
151
152         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Show" ) )
153         {
154             ENTER;
155             SAVETMPS;
156
157             SV* attr_sv = wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
158                                                  &attr, "Wx::GridCellAttr" );
159
160             wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
161                                                G_DISCARD|G_SCALAR,
162                                                "bs", show, attr_sv );
163
164             wxPli_detach_object( aTHX_ attr_sv );
165
166             FREETMPS;
167             LEAVE;
168         } else
169             wxGridCellEditor::Show( show, attr );
170     }
171
172     void PaintBackground( const wxRect& rect, wxGridCellAttr* attr )
173     {
174         dTHX;
175
176         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "PaintBackground" ) )
177         {
178             ENTER;
179             SAVETMPS;
180
181             SV* attr_sv = wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
182                                                  &attr, "Wx::GridCellAttr" );
183
184             wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
185                                                G_DISCARD|G_SCALAR,
186                                                "os", new wxRect( rect ),
187                                                attr_sv );
188
189             wxPli_detach_object( aTHX_ attr_sv );
190
191             FREETMPS;
192             LEAVE;
193         } else
194             wxGridCellEditor::PaintBackground( rect, attr );
195     }
196
197     virtual wxGridCellEditor* Clone() const
198     {
199         dTHX;
200
201         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Clone" ) )
202         {
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" );
207             SvREFCNT_dec( ret );
208         
209             return clone;
210         }
211
212         return 0;
213     }
214
215     virtual wxString GetValue() const { return wxEmptyString; }
216
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 );
221 #else
222     DEC_V_CBACK_BOOL__INT_INT_WXGRID_pure( EndEdit );
223 #endif
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 );
230 };
231
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 );
236 #else
237 DEF_V_CBACK_BOOL__INT_INT_WXGRID_pure( wxPlGridCellEditor, wxGridCellEditor, EndEdit );
238 #endif
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 );
245