Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / ext / dnd / XS / DataObject.xs
1 #############################################################################
2 ## Name:        ext/dnd/XS/DataObject.xs
3 ## Purpose:     XS for Wx::*DataObject and Wx::DataFormat
4 ## Author:      Mattia Barbon
5 ## Modified by:
6 ## Created:     12/08/2001
7 ## RCS-ID:      $Id: DataObject.xs 2055 2007-06-18 22:05:48Z mbarbon $
8 ## Copyright:   (c) 2001-2004, 2006-2007 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 <wx/dataobj.h>
14 #include "cpp/dataobject.h"
15
16 MODULE=Wx PACKAGE=Wx::DataFormat
17
18 #ifdef __WXGTK20__
19
20 wxDataFormat*
21 newNative( dummy, format = wxDF_INVALID )
22     SV* dummy
23     wxDataFormatId format
24   CODE:
25     RETVAL = new wxDataFormat( format );
26   OUTPUT: RETVAL
27
28 #else
29
30 wxDataFormat*
31 newNative( dummy, format = wxDF_INVALID )
32     SV* dummy
33     NativeFormat format
34   CODE:
35     RETVAL = new wxDataFormat( format );
36   OUTPUT: RETVAL
37
38 #endif
39
40 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
41
42 wxDataFormat*
43 newUser( dummy, id )
44     SV* dummy
45     wxString id
46   CODE:
47     RETVAL = new wxDataFormat( id );
48   OUTPUT: RETVAL
49
50 #else
51
52 wxDataFormat*
53 newUser( dummy, id )
54     SV* dummy
55     wxChar* id
56   CODE:
57     RETVAL = new wxDataFormat( id );
58   OUTPUT: RETVAL
59
60 #endif
61
62 static void
63 wxDataFormat::CLONE()
64   CODE:
65     wxPli_thread_sv_clone( aTHX_ CLASS, (wxPliCloneSV)wxPli_detach_object );
66
67 ## // thread OK
68 void
69 wxDataFormat::DESTROY()
70   CODE:
71     wxPli_thread_sv_unregister( aTHX_ "Wx::DataFormat", THIS, ST(0) );
72     delete THIS;
73
74 wxString
75 wxDataFormat::GetId()
76
77 void
78 wxDataFormat::SetId( id )
79     wxString id
80
81 #if defined( __WXMSW__ )
82
83 NativeFormat
84 wxDataFormat::GetType()
85
86 void
87 wxDataFormat::SetType( type )
88     NativeFormat type
89
90 #else
91
92 wxDataFormatId
93 wxDataFormat::GetType()
94
95 #if 0
96
97 void
98 wxDataFormat::SetType( type )
99     wxDataFormatId type
100
101 #endif
102
103 #endif
104
105 MODULE=Wx PACKAGE=Wx::DataObject
106
107 static void
108 wxDataObject::CLONE()
109   CODE:
110     wxPli_thread_sv_clone( aTHX_ CLASS, (wxPliCloneSV)wxPli_detach_object );
111
112 # // thread OK
113 void
114 DESTROY( THIS )
115     wxDataObject* THIS
116   CODE:
117     wxPli_thread_sv_unregister( aTHX_ wxPli_get_class( aTHX_ ST(0) ), THIS, ST(0) );
118     if( THIS && wxPli_object_is_deleteable( aTHX_ ST(0) ) )
119     {
120         delete THIS;
121     }
122
123 void
124 wxDataObject::Destroy()
125   CODE:
126     wxPli_thread_sv_unregister( aTHX_ wxPli_get_class( aTHX_ ST(0) ), THIS, ST(0) );
127     delete THIS;
128
129 void
130 wxDataObject::GetAllFormats( dir = wxDataObjectBase::Get )
131     Direction dir
132   PPCODE:
133     size_t formats = THIS->GetFormatCount( dir );
134     size_t i, wanted = formats;
135     wxDataFormat* formats_d = new wxDataFormat[ formats ];
136
137     THIS->GetAllFormats( formats_d, dir );
138     if( GIMME_V == G_SCALAR )
139         wanted = 1;
140     EXTEND( SP, (IV)wanted );
141     for( i = 0; i < wanted; ++i )
142     {
143         PUSHs( wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
144                 new wxDataFormat( formats_d[i] ), "Wx::DataFormat" ) );
145     }
146     delete [] formats_d;
147
148 bool
149 wxDataObject::GetDataHere( format, buf )
150     wxDataFormat* format
151     SV* buf
152   CODE:
153     size_t size = THIS->GetDataSize( *format );
154     void* buffer = SvGROW( buf, size + 1 );
155
156     SvCUR_set( buf, size );
157     RETVAL = THIS->GetDataHere( *format, buffer );
158   OUTPUT: RETVAL
159
160 size_t
161 wxDataObject::GetDataSize( format )
162     wxDataFormat* format
163   CODE:
164     RETVAL = THIS->GetDataSize( *format );
165   OUTPUT: RETVAL
166
167 size_t
168 wxDataObject::GetFormatCount( dir = wxDataObjectBase::Get )
169     Direction dir
170
171 wxDataFormat*
172 wxDataObject::GetPreferredFormat( dir = wxDataObjectBase::Get )
173     Direction dir
174   CODE:
175     RETVAL = new wxDataFormat( THIS->GetPreferredFormat( dir ) );
176   OUTPUT: RETVAL
177
178 bool
179 wxDataObject::IsSupported( format, dir = wxDataObjectBase::Get )
180     wxDataFormat* format
181     Direction dir
182   CODE:
183     RETVAL = THIS->IsSupported( *format, dir );
184   OUTPUT: RETVAL
185
186 bool
187 wxDataObject::SetData( format, buf )
188     wxDataFormat* format
189     SV* buf
190   PREINIT:
191     char* data;
192     STRLEN len;
193   CODE:
194     data = SvPV( buf, len );
195     RETVAL = THIS->SetData( *format, len, data );
196   OUTPUT: RETVAL
197
198 MODULE=Wx PACKAGE=Wx::DataObjectSimple
199
200 wxDataObjectSimple*
201 wxDataObjectSimple::new( format = (wxDataFormat*)&wxFormatInvalid )
202     wxDataFormat* format
203   CODE:
204     RETVAL = new wxDataObjectSimple( *format );
205   OUTPUT: RETVAL
206
207 wxDataFormat*
208 wxDataObjectSimple::GetFormat()
209   CODE:
210     RETVAL = new wxDataFormat( THIS->GetFormat() );
211   OUTPUT: RETVAL
212
213 void
214 wxDataObjectSimple::SetFormat( format )
215     wxDataFormat* format
216   CODE:
217     THIS->SetFormat( *format );
218
219 MODULE=Wx PACKAGE=Wx::PlDataObjectSimple
220
221 SV*
222 wxPlDataObjectSimple::new( format = (wxDataFormat*)&wxFormatInvalid )
223     wxDataFormat* format
224   CODE:
225     wxPlDataObjectSimple* THIS = new wxPlDataObjectSimple( CLASS, *format );
226     RETVAL = newRV_noinc( SvRV( THIS->m_callback.GetSelf() ) );
227     wxPli_thread_sv_register( aTHX_ "Wx::PlDataObjectSimple", THIS, RETVAL );
228   OUTPUT: RETVAL
229
230 ## // thread OK
231 void
232 wxPlDataObjectSimple::DESTROY()
233   CODE:
234     wxPli_thread_sv_unregister( aTHX_ "Wx::PlDataObjectSimple", THIS, ST(0) );
235     if( THIS && wxPli_object_is_deleteable( aTHX_ ST(0) ) )
236     {
237         SV* self = THIS->m_callback.GetSelf();
238         SvROK_off( self );
239         SvRV( self ) = NULL;
240         delete THIS;
241     }
242
243 MODULE=Wx PACKAGE=Wx::DataObjectComposite
244
245 wxDataObjectComposite*
246 wxDataObjectComposite::new()
247
248 void
249 wxDataObjectComposite::Add( dataObject, preferred = false )
250     wxDataObjectSimple* dataObject
251     bool preferred
252   CODE:
253     // at this point the data object is owned!
254     wxPli_object_set_deleteable( aTHX_ ST(1), false );
255     SvREFCNT_inc( SvRV( ST(1) ) ); // at this point the scalar must not go away
256     THIS->Add( dataObject, preferred );
257
258 #if WXPERL_W_VERSION_GE( 2, 7, 0 )
259
260 wxDataFormat*
261 wxDataObjectComposite::GetReceivedFormat()
262   CODE:
263     RETVAL = new wxDataFormat( THIS->GetReceivedFormat() );
264   OUTPUT: RETVAL
265
266 #endif
267
268 MODULE=Wx PACKAGE=Wx::TextDataObject
269
270 wxTextDataObject*
271 wxTextDataObject::new( text = wxEmptyString )
272     wxString text
273
274 size_t
275 wxTextDataObject::GetTextLength()
276
277 wxString
278 wxTextDataObject::GetText()
279
280 void
281 wxTextDataObject::SetText( text )
282     wxString text
283
284 MODULE=Wx PACKAGE=Wx::BitmapDataObject
285
286 #if WXPERL_W_VERSION_GE( 2, 5, 1 ) || !defined(__WXMOTIF__)
287
288 wxBitmapDataObject*
289 wxBitmapDataObject::new( bitmap = (wxBitmap*)&wxNullBitmap )
290     wxBitmap* bitmap
291   CODE:
292     RETVAL = new wxBitmapDataObject( *bitmap );
293   OUTPUT: RETVAL
294
295 wxBitmap*
296 wxBitmapDataObject::GetBitmap()
297   CODE:
298     RETVAL = new wxBitmap( THIS->GetBitmap() );
299   OUTPUT: RETVAL
300
301 void
302 wxBitmapDataObject::SetBitmap( bitmap )
303     wxBitmap* bitmap
304   CODE:
305     THIS->SetBitmap( *bitmap );
306
307 #endif
308
309 MODULE=Wx PACKAGE=Wx::FileDataObject
310
311 #if !defined(__WXMOTIF__)
312
313 wxFileDataObject*
314 wxFileDataObject::new()
315
316 void
317 wxFileDataObject::AddFile( file )
318     wxString file
319
320 void
321 wxFileDataObject::GetFilenames()
322   PREINIT:
323     int i, max;
324   PPCODE:
325     const wxArrayString& filenames = THIS->GetFilenames();
326     max = filenames.GetCount();
327     EXTEND( SP, max );
328     for( i = 0; i < max; ++i ) {
329 #if wxUSE_UNICODE
330       SV* tmp = sv_2mortal( newSVpv( filenames[i].mb_str(wxConvUTF8), 0 ) );
331       SvUTF8_on( tmp );
332       PUSHs( tmp );
333 #else
334       PUSHs( sv_2mortal( newSVpv( CHAR_P filenames[i].c_str(), 0 ) ) );
335 #endif
336     }
337
338 MODULE=Wx PACKAGE=Wx::URLDataObject
339
340 wxURLDataObject*
341 wxURLDataObject::new()
342
343 wxString
344 wxURLDataObject::GetURL()
345
346 void
347 wxURLDataObject::SetURL( url )
348     wxString url
349
350 #endif