Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / ext / grid / cpp / renderer.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        ext/grid/cpp/renderer.h
3 // Purpose:     wxPlGridCellRenderer
4 // Author:      Mattia Barbon
5 // Modified by:
6 // Created:     28/05/2003
7 // RCS-ID:      $Id: renderer.h 2057 2007-06-18 23:03:00Z mbarbon $
8 // Copyright:   (c) 2003-2005 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/dc.h>
15 #include <wx/clntdata.h>
16 #include "cpp/helpers.h"
17
18 class wxPlGridCellRenderer : public wxGridCellRenderer
19 {
20 public:
21     wxPliVirtualCallback m_callback;
22 public:
23     wxPlGridCellRenderer( const char* package )
24         : m_callback( "Wx::PlGridCellRenderer" )
25     {
26         m_callback.SetSelf( wxPli_make_object( this, package ), true );
27     }
28
29     virtual void Draw( wxGrid& grid,
30                        wxGridCellAttr& attr,
31                        wxDC& dc,
32                        const wxRect& rect,
33                        int row, int col,
34                        bool isSelected )
35     {
36         dTHX;
37
38         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Draw" ) )
39         {
40             ENTER;
41             SAVETMPS;
42
43             SV* attr_sv = wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
44                                                  &attr, "Wx::GridCellAttr" );
45             SV* dc_sv = wxPli_object_2_sv( aTHX_ sv_newmortal(), &dc );
46             SV* rect_sv = wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
47                                                  (void*)&rect, "Wx::Rect" );
48
49             wxPliVirtualCallback_CallCallback
50                 ( aTHX_ &m_callback, G_DISCARD|G_SCALAR, "Osssiib",
51                   &grid, attr_sv, dc_sv, rect_sv, row, col, isSelected );
52
53             wxPli_detach_object( aTHX_ attr_sv );
54             wxPli_detach_object( aTHX_ dc_sv );
55             wxPli_detach_object( aTHX_ rect_sv );
56
57             FREETMPS;
58             LEAVE;
59         }
60     }
61
62     virtual wxSize GetBestSize( wxGrid& grid,
63                                 wxGridCellAttr& attr,
64                                 wxDC& dc,
65                                 int row, int col )
66     {
67         dTHX;
68
69         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "GetBestSize" ) )
70         {
71             ENTER;
72             SAVETMPS;
73
74             SV* attr_sv = wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
75                                                  &attr, "Wx::GridCellAttr" );
76             SV* dc_sv = wxPli_object_2_sv( aTHX_ sv_newmortal(), &dc );
77
78             SV* ret = wxPliVirtualCallback_CallCallback
79                 ( aTHX_ &m_callback, G_SCALAR, "Ossii",
80                   &grid, attr_sv, dc_sv, row, col );
81             wxSize size = *(wxSize*)wxPli_sv_2_object( aTHX_ ret, "Wx::Size" );
82             SvREFCNT_dec( ret );
83
84             wxPli_detach_object( aTHX_ attr_sv );
85             wxPli_detach_object( aTHX_ dc_sv );
86
87             FREETMPS;
88             LEAVE;
89
90             return size;
91         }
92
93         return wxDefaultSize;
94     }
95
96     virtual wxGridCellRenderer *Clone() const
97     {
98         dTHX;
99
100         if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Clone" ) )
101         {
102             SV* ret = wxPliVirtualCallback_CallCallback
103                 ( aTHX_ &m_callback, G_SCALAR, NULL );
104             wxGridCellRenderer* clone =
105                 (wxGridCellRenderer*)wxPli_sv_2_object( aTHX_ ret, "Wx::GridCellRenderer" );
106             SvREFCNT_dec( ret );
107         
108             return clone;
109         }
110
111         return 0;
112     }
113 };
114
115 // local variables:
116 // mode: c++
117 // end: