1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: XS for Wx::EvtHandler, Wx::Event and derived classes
4 // Author: Mattia Barbon
7 // RCS-ID: $Id: Event.xs 2700 2009-12-13 11:25:50Z mbarbon $
8 // Copyright: (c) 2000-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 #define PERL_NO_GET_CONTEXT
15 #include "cpp/wxapi.h"
18 #include <wx/window.h>
23 #include <wx/clntdata.h>
25 // re-include for client data
26 #include "cpp/helpers.h"
30 #include "cpp/e_cback.h"
31 #include "cpp/e_cback.cpp"
33 #include "cpp/event.h"
35 WXPLI_BOOT_ONCE(Wx_Evt);
36 #define boot_Wx_Evt wxPli_boot_Wx_Evt
38 MODULE=Wx_Evt PACKAGE=Wx
40 INCLUDE: XS/EvtHandler.xs
42 MODULE=Wx_Evt PACKAGE=Wx::Event
44 # unimplemented ( and probably will never be: problems with object
45 # cloning/destruction )
51 wxPli_thread_sv_clone( aTHX_ CLASS, (wxPliCloneSV)wxPli_detach_object );
57 wxPli_thread_sv_unregister( aTHX_ wxPli_get_class( aTHX_ ST(0) ), THIS, ST(0) );
66 wxEvent::GetEventObject()
68 // to avoid problems with deletion, only windows are supported
69 wxObject* obj = THIS->GetEventObject();
70 wxWindow* win = wxDynamicCast( obj, wxWindow );
74 PUSHs( &PL_sv_undef );
76 PUSHs( wxPli_object_2_sv( aTHX_ NEWSV( 0, 0 ), win ) );
79 wxEvent::GetEventType()
88 wxEvent::GetTimestamp()
91 wxEvent::SetEventType( type )
94 ## will likely need to be restricted to wxWindow (for ownership problems)
96 wxEvent::SetEventObject( object )
104 wxEvent::SetTimestamp( timeStamp )
108 wxEvent::Skip( skip = true )
111 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
114 wxEvent::ShouldPropagate()
118 #if WXPERL_W_VERSION_GE( 2, 5, 3 )
121 wxEvent::StopPropagation()
124 wxEvent::ResumePropagation( propagationLevel )
128 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
131 wxEvent::SetPropagate( doIt )
137 MODULE=Wx_Evt PACKAGE=Wx::CommandEvent
140 wxCommandEvent::new( type = 0, id = 0 )
145 wxCommandEvent::GetClientData()
147 RETVAL = (wxPliUserDataCD*)THIS->GetClientObject();
152 wxCommandEvent::GetExtraLong()
155 wxCommandEvent::GetInt()
158 wxCommandEvent::GetSelection()
161 wxCommandEvent::GetString()
164 wxCommandEvent::IsChecked()
167 wxCommandEvent::IsSelection()
170 wxCommandEvent::SetClientData( data )
173 THIS->SetClientObject( data );
176 wxCommandEvent::SetExtraLong( extraLong )
180 wxCommandEvent::SetInt( intCommand )
184 wxCommandEvent::SetString( string )
187 MODULE=Wx_Evt PACKAGE=Wx::ContextMenuEvent
190 wxContextMenuEvent::new( type = 0, id = 0, pos = wxDefaultPosition )
196 wxContextMenuEvent::GetPosition()
199 wxContextMenuEvent::SetPosition( pos )
202 MODULE=Wx_Evt PACKAGE=Wx::PlEvent
205 wxPlEvent::new( type, id )
209 wxPlEvent* THIS = new wxPlEvent( CLASS, type, id );
210 RETVAL = newRV_noinc( SvRV( THIS->m_callback.GetSelf() ) );
211 wxPli_thread_sv_register( aTHX_ "Wx::PlEvent", THIS, RETVAL );
218 wxPli_thread_sv_unregister( aTHX_ "Wx::PlEvent", THIS, ST(0) );
219 if( THIS && wxPli_object_is_deleteable( aTHX_ ST(0) ) )
221 THIS->m_callback.DeleteSelf( true );
225 MODULE=Wx_Evt PACKAGE=Wx::PlCommandEvent
228 wxPlCommandEvent::new( type, id )
232 wxPlCommandEvent* THIS = new wxPlCommandEvent( CLASS, type, id );
233 RETVAL = newRV_noinc( SvRV( THIS->m_callback.GetSelf() ) );
234 wxPli_thread_sv_register( aTHX_ "Wx::PlCommandEvent", THIS, RETVAL );
239 wxPlCommandEvent::DESTROY()
241 wxPli_thread_sv_unregister( aTHX_ "Wx::PlCommandEvent", THIS, ST(0) );
242 if( THIS && wxPli_object_is_deleteable( aTHX_ ST(0) ) )
244 THIS->m_callback.DeleteSelf( true );
248 MODULE=Wx_Evt PACKAGE=Wx::PlThreadEvent
251 wxPlThreadEvent::new( type, id, data )
256 RETVAL = new wxPlThreadEvent( aTHX_ CLASS, type, id, data );
260 wxPlThreadEvent::_GetData()
262 RETVAL = THIS ? THIS->_GetData() : 0;
266 wxPlThreadEvent::GetData()
268 RETVAL = THIS ? THIS->GetData() : &PL_sv_undef;
275 wxPlThreadEvent::SetStash( hv_ref );
277 MODULE=Wx_Evt PACKAGE=Wx::ActivateEvent
280 wxActivateEvent::new( type = 0, active = true, id = 0 )
286 wxActivateEvent::GetActive()
288 MODULE=Wx_Evt PACKAGE=Wx::CloseEvent
291 wxCloseEvent::new( commandEventType = 0, id = 0 )
292 wxEventType commandEventType
296 wxCloseEvent::CanVeto()
299 wxCloseEvent::GetLoggingOff()
302 wxCloseEvent::SetCanVeto( canVeto )
306 wxCloseEvent::SetLoggingOff( loggingOff )
310 wxCloseEvent::Veto( veto = true )
313 MODULE=Wx_Evt PACKAGE=Wx::EraseEvent
316 wxEraseEvent::new( id = 0, dc = 0 )
321 wxEraseEvent::GetDC()
325 wxPli_object_set_deleteable( aTHX_ ST(0), false );
327 MODULE=Wx_Evt PACKAGE=Wx::FocusEvent
330 wxFocusEvent::new( eventType = 0, id = 0 )
331 wxEventType eventType
335 wxFocusEvent::GetWindow()
337 MODULE=Wx_Evt PACKAGE=Wx::IconizeEvent
340 wxIconizeEvent::Iconized()
342 #if WXPERL_W_VERSION_LT( 2, 9, 0 )
343 RETVAL = THIS->Iconized();
345 RETVAL = THIS->IsIconized();
350 wxIconizeEvent::IsIconized()
352 #if WXPERL_W_VERSION_LT( 2, 9, 0 )
353 RETVAL = THIS->Iconized();
355 RETVAL = THIS->IsIconized();
359 MODULE=Wx_Evt PACKAGE=Wx::KeyEvent
362 wxKeyEvent::new( keyEventType )
363 wxEventType keyEventType
366 wxKeyEvent::AltDown()
368 #if WXPERL_W_VERSION_GE( 2, 5, 3 )
371 wxKeyEvent::CmdDown()
376 wxKeyEvent::ControlDown()
379 wxKeyEvent::GetKeyCode()
381 #ifdef wxHAS_RAW_KEY_CODES
384 wxKeyEvent::GetRawKeyCode()
388 #if wxUSE_UNICODE && WXPERL_W_VERSION_GE( 2, 5, 3 )
391 wxKeyEvent::GetUnicodeKey()
395 #if WXPERL_W_VERSION_GE( 2, 7, 0 )
398 wxKeyEvent::GetModifiers()
409 wxKeyEvent::MetaDown()
412 wxKeyEvent::HasModifiers()
415 wxKeyEvent::ShiftDown()
417 MODULE=Wx_Evt PACKAGE=Wx::HelpEvent
423 wxHelpEvent::GetPosition()
425 RETVAL = new wxPoint( THIS->GetPosition() );
430 wxHelpEvent::GetLink()
433 wxHelpEvent::GetTarget()
436 wxHelpEvent::SetPosition( point )
440 wxHelpEvent::SetLink( link )
444 wxHelpEvent::SetTarget( target )
447 MODULE=Wx_Evt PACKAGE=Wx::IdleEvent
453 wxIdleEvent::MoreRequested()
456 wxIdleEvent::RequestMore( needMore = true )
459 #if WXPERL_W_VERSION_LT( 2, 9, 0 )
465 RETVAL = wxIdleEvent::CanSend( window );
474 wxIdleEvent::SetMode( mode );
479 RETVAL = wxIdleEvent::GetMode();
482 MODULE=Wx_Evt PACKAGE=Wx::InitDialogEvent
485 wxInitDialogEvent::new( id = 0 )
488 MODULE=Wx_Evt PACKAGE=Wx::JoystickEvent
491 wxJoystickEvent::new( eventType = 0, state = 0, joystick = wxJOYSTICK1, change = 0 )
492 wxEventType eventType
498 wxJoystickEvent::ButtonDown( button = wxJOY_BUTTON_ANY )
502 wxJoystickEvent::ButtonIsDown( button = wxJOY_BUTTON_ANY )
506 wxJoystickEvent::ButtonUp( button = wxJOY_BUTTON_ANY )
510 wxJoystickEvent::GetButtonChange()
513 wxJoystickEvent::GetButtonState()
516 wxJoystickEvent::GetJoystick()
519 wxJoystickEvent::GetPosition()
521 RETVAL = new wxPoint( THIS->GetPosition() );
526 wxJoystickEvent::GetZPosition()
529 wxJoystickEvent::IsButton()
532 wxJoystickEvent::IsMove()
535 wxJoystickEvent::IsZMove()
537 MODULE=Wx_Evt PACKAGE=Wx::MenuEvent
540 wxMenuEvent::new( eventType = 0, id = 0 )
541 wxEventType eventType
545 wxMenuEvent::GetMenuId()
548 wxMenuEvent::IsPopup()
550 #if WXPERL_W_VERSION_GE( 2, 6, 0 )
553 wxMenuEvent::GetMenu()
557 MODULE=Wx_Evt PACKAGE=Wx::MaximizeEvent
560 wxMouseEvent::new( id = 0 )
563 MODULE=Wx_Evt PACKAGE=Wx::MouseEvent
566 wxMouseEvent::new( eventType = 0 )
567 wxEventType eventType
570 wxMouseEvent::AltDown()
573 wxMouseEvent::Button( button = -1 )
577 wxMouseEvent::ButtonDClick( button = -1 )
581 wxMouseEvent::ButtonDown( button = -1 )
585 wxMouseEvent::ButtonUp( button = -1 )
588 #if WXPERL_W_VERSION_GE( 2, 5, 3 )
591 wxMouseEvent::CmdDown()
596 wxMouseEvent::ControlDown()
599 wxMouseEvent::Dragging()
602 wxMouseEvent::Entering()
605 wxMouseEvent::GetPosition()
607 RETVAL = new wxPoint( THIS->GetPosition() );
612 wxMouseEvent::GetPositionXY()
617 THIS->GetPosition( &x, &y );
619 PUSHs( sv_2mortal( newSViv( x ) ) );
620 PUSHs( sv_2mortal( newSViv( y ) ) );
623 wxMouseEvent::GetLogicalPosition( dc )
626 RETVAL = new wxPoint( THIS->GetLogicalPosition( *dc ) );
637 wxMouseEvent::GetWheelRotation()
640 wxMouseEvent::GetWheelDelta()
643 wxMouseEvent::GetLinesPerAction()
645 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
648 wxMouseEvent::GetWheelAxis()
653 wxMouseEvent::IsButton()
656 wxMouseEvent::IsPageScroll()
659 wxMouseEvent::Leaving()
662 wxMouseEvent::LeftDClick()
665 wxMouseEvent::LeftDown()
668 wxMouseEvent::LeftIsDown()
671 wxMouseEvent::LeftUp()
674 wxMouseEvent::MetaDown()
677 wxMouseEvent::MiddleDClick()
680 wxMouseEvent::MiddleDown()
683 wxMouseEvent::MiddleIsDown()
686 wxMouseEvent::MiddleUp()
689 wxMouseEvent::Moving()
692 wxMouseEvent::RightDClick()
695 wxMouseEvent::RightDown()
698 wxMouseEvent::RightIsDown()
701 wxMouseEvent::RightUp()
703 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
706 wxMouseEvent::Aux1DClick()
709 wxMouseEvent::Aux1Down()
712 wxMouseEvent::Aux1IsDown()
715 wxMouseEvent::Aux1Up()
718 wxMouseEvent::Aux2DClick()
721 wxMouseEvent::Aux2Down()
724 wxMouseEvent::Aux2IsDown()
727 wxMouseEvent::Aux2Up()
732 wxMouseEvent::ShiftDown()
735 wxMouseEvent::GetButton()
737 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
740 wxMouseEvent::GetClickCount()
744 MODULE=Wx_Evt PACKAGE=Wx::MoveEvent
747 wxMoveEvent::new( point, id = 0 )
752 wxMoveEvent::GetPosition()
754 RETVAL = new wxPoint( THIS->GetPosition() );
758 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
761 wxMoveEvent::GetRect()
763 RETVAL = new wxRect( THIS->GetRect() );
768 MODULE=Wx_Evt PACKAGE=Wx::NotifyEvent
771 wxNotifyEvent::new( eventType = wxEVT_NULL, id = 0 )
772 wxEventType eventType
776 wxNotifyEvent::IsAllowed()
779 wxNotifyEvent::Veto()
782 wxNotifyEvent::Allow()
784 MODULE=Wx_Evt PACKAGE=Wx::PaintEvent
787 wxPaintEvent::new( id = 0 )
790 MODULE=Wx_Evt PACKAGE=Wx::SizeEvent
793 wxSizeEvent::new( size, id = 0 )
798 wxSizeEvent::GetSize()
800 RETVAL = new wxSize( THIS->GetSize() );
804 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
807 wxSizeEvent::GetRect()
809 RETVAL = new wxRect( THIS->GetRect() );
814 MODULE=Wx_Evt PACKAGE=Wx::ScrollEvent
817 wxScrollEvent::GetOrientation()
820 wxScrollEvent::GetPosition()
822 MODULE=Wx_Evt PACKAGE=Wx::ScrollWinEvent
825 wxScrollWinEvent::new( eventType = 0, pos = 0, orientation = 0 )
826 wxEventType eventType
831 wxScrollWinEvent::GetOrientation()
834 wxScrollWinEvent::GetPosition()
836 MODULE=Wx_Evt PACKAGE=Wx::SetCursorEvent
839 wxSetCursorEvent::new( x = 0, y = 0 )
844 wxSetCursorEvent::GetX()
847 wxSetCursorEvent::GetY()
850 wxSetCursorEvent::SetCursor( cursor )
855 wxSetCursorEvent::GetCursor()
857 RETVAL = new wxCursor( THIS->GetCursor() );
861 wxSetCursorEvent::HasCursor()
863 MODULE=Wx_Evt PACKAGE=Wx::SysColourChangedEvent
865 wxSysColourChangedEvent*
866 wxSysColourChangedEvent::new()
868 MODULE=Wx_Evt PACKAGE=Wx::UpdateUIEvent
874 RETVAL = wxUpdateUIEvent::CanUpdate( window );
880 RETVAL = wxUpdateUIEvent::GetMode();
887 wxUpdateUIEvent::SetMode( mode );
892 RETVAL = wxUpdateUIEvent::GetUpdateInterval();
898 wxUpdateUIEvent::ResetUpdateTime();
901 SetUpdateInterval( interval )
904 wxUpdateUIEvent::SetUpdateInterval( interval );
907 wxUpdateUIEvent::new( commandId = 0 )
911 wxUpdateUIEvent::Check( check )
914 #if WXPERL_W_VERSION_GE( 2, 7, 2 )
917 wxUpdateUIEvent::Show( show )
923 wxUpdateUIEvent::Enable( enable )
927 wxUpdateUIEvent::GetChecked()
929 #if WXPERL_W_VERSION_GE( 2, 7, 2 )
932 wxUpdateUIEvent::GetShown()
937 wxUpdateUIEvent::GetSetEnabled()
940 wxUpdateUIEvent::GetSetChecked()
942 #if WXPERL_W_VERSION_GE( 2, 7, 2 )
945 wxUpdateUIEvent::GetSetShown()
950 wxUpdateUIEvent::GetEnabled()
953 wxUpdateUIEvent::GetText()
956 wxUpdateUIEvent::SetText( text )
960 wxUpdateUIEvent::GetSetText()
962 MODULE=Wx_Evt PACKAGE=Wx::NavigationKeyEvent
964 wxNavigationKeyEvent*
965 wxNavigationKeyEvent::new()
968 wxNavigationKeyEvent::GetDirection()
971 wxNavigationKeyEvent::SetDirection(direction)
975 wxNavigationKeyEvent::IsWindowChange()
978 wxNavigationKeyEvent::SetWindowChange(change)
982 wxNavigationKeyEvent::GetCurrentFocus()
985 wxNavigationKeyEvent::SetCurrentFocus(focus)
988 #if WXPERL_W_VERSION_GE( 2, 5, 4 )
991 wxNavigationKeyEvent::IsFromTab()
994 wxNavigationKeyEvent::SetFromTab( fromTab )
999 MODULE=Wx_Evt PACKAGE=Wx::ChildFocusEvent
1002 wxChildFocusEvent::new( win = NULL )
1006 wxChildFocusEvent::GetWindow()
1008 #if WXPERL_W_VERSION_GE( 2, 7, 0 )
1010 MODULE=Wx_Evt PACKAGE=Wx::ClipboardTextEvent
1012 wxClipboardTextEvent*
1013 wxClipboardTextEvent::new( type = wxEVT_NULL, id = 0 )
1017 MODULE=Wx:Evt PACKAGE=Wx::MouseCaptureChangedEvent
1019 wxMouseCaptureChangedEvent*
1020 wxMouseCaptureChangedEvent::new( id = 0, capturedWindow = NULL )
1022 wxWindow* capturedWindow
1025 wxMouseCaptureChangedEvent::GetCapturedWindow()
1027 MODULE=Wx_Evt PACKAGE=Wx::MouseCaptureLostEvent
1029 wxMouseCaptureLostEvent*
1030 wxMouseCaptureLostEvent::new( eventType = 0 )
1031 wxEventType eventType
1035 MODULE=Wx:Evt PACKAGE=Wx::WindowCreateEvent
1037 wxWindowCreateEvent*
1038 wxWindowCreateEvent::new( window = NULL )
1042 wxWindowCreateEvent::GetWindow()
1044 MODULE=Wx:Evt PACKAGE=Wx::WindowDestroyEvent
1046 wxWindowDestroyEvent*
1047 wxWindowDestroyEvent::new( window = NULL )
1051 wxWindowDestroyEvent::GetWindow()