nobody at rubyforge.org
2007-May-31 21:19 UTC
[Wxruby-development] [1042] trunk/wxruby2: Overhaul of the event handling WxType->RubyClass mapping to make it
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:'':'';} #msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1042] trunk/wxruby2: Overhaul of the event handling WxType->RubyClass mapping to make it</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1042</dd> <dt>Author</dt> <dd>brokentoy</dd> <dt>Date</dt> <dd>2007-05-31 17:19:45 -0400 (Thu, 31 May 2007)</dd> </dl> <h3>Log Message</h3> <pre>Overhaul of the event handling WxType->RubyClass mapping to make it easier to maintain and access; document it</pre> <h3>Modified Paths</h3> <ul> <li><a href="#trunkwxruby2swigclassesEvtHandleri">trunk/wxruby2/swig/classes/EvtHandler.i</a></li> <li><a href="#trunkwxruby2swigfixeventsrb">trunk/wxruby2/swig/fixevents.rb</a></li> </ul> <h3>Added Paths</h3> <ul> <li><a href="#trunkwxruby2libwxclassesevthandlerrb">trunk/wxruby2/lib/wx/classes/evthandler.rb</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="trunkwxruby2libwxclassesevthandlerrb"></a> <div class="addfile"><h4>Added: trunk/wxruby2/lib/wx/classes/evthandler.rb (0 => 1042)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/lib/wx/classes/evthandler.rb         (rev 0) +++ trunk/wxruby2/lib/wx/classes/evthandler.rb        2007-05-31 21:19:45 UTC (rev 1042) </span><span class="lines">@@ -0,0 +1,225 @@ </span><ins>+# All classes which are capable of handling events inherit from +# EvtHandler. This includes all Wx::Window subclasses and Wx::App. + +class Wx::EvtHandler + + def self.event_class_for_type(id) + if evt_klass = EVENT_TYPE_MAPPING[id] + return evt_klass + else + warn "No event class defined for event type #{id}" + return Wx::Event + end + end + + # This has maps integer EventType ids from the Wx API to Ruby + # classes. It''s called internally by the C++ code to wrap events in + # the correct Ruby class - see EvtHandler.i and App.i + EVENT_TYPE_MAPPING = { + Wx::EVT_CALENDAR_SEL_CHANGED => Wx::CalendarEvent, + Wx::EVT_CALENDAR_DAY_CHANGED => Wx::CalendarEvent, + Wx::EVT_CALENDAR_MONTH_CHANGED => Wx::CalendarEvent, + Wx::EVT_CALENDAR_YEAR_CHANGED => Wx::CalendarEvent, + Wx::EVT_CALENDAR_DOUBLECLICKED => Wx::CalendarEvent, + Wx::EVT_CALENDAR_WEEKDAY_CLICKED => Wx::CalendarEvent, + Wx::EVT_CLOSE_WINDOW => Wx::CloseEvent, + Wx::EVT_COMMAND_BUTTON_CLICKED => Wx::CommandEvent, + Wx::EVT_COMMAND_CHECKBOX_CLICKED => Wx::CommandEvent, + Wx::EVT_COMMAND_CHOICE_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_LISTBOX_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_LISTBOX_DOUBLECLICKED => Wx::CommandEvent, + Wx::EVT_COMMAND_CHECKLISTBOX_TOGGLED => Wx::CommandEvent, + Wx::EVT_COMMAND_TEXT_UPDATED => Wx::CommandEvent, + Wx::EVT_COMMAND_TEXT_ENTER => Wx::CommandEvent, + Wx::EVT_COMMAND_TEXT_MAXLEN => Wx::CommandEvent, + Wx::EVT_COMMAND_MENU_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_SLIDER_UPDATED => Wx::CommandEvent, + Wx::EVT_COMMAND_RADIOBOX_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_RADIOBUTTON_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_SCROLLBAR_UPDATED => Wx::CommandEvent, + Wx::EVT_COMMAND_VLBOX_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_COMBOBOX_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_TOOL_RCLICKED => Wx::CommandEvent, + Wx::EVT_COMMAND_TOOL_ENTER => Wx::CommandEvent, + Wx::EVT_COMMAND_SPINCTRL_UPDATED => Wx::CommandEvent, + Wx::EVT_COMMAND_COMBOBOX_SELECTED => Wx::CommandEvent, + Wx::EVT_COMMAND_TEXT_URL => Wx::TextUrlEvent, + Wx::EVT_IDLE => Wx::IdleEvent, + Wx::EVT_PAINT => Wx::PaintEvent, + Wx::EVT_UPDATE_UI => Wx::UpdateUIEvent, + Wx::EVT_SIZE => Wx::SizeEvent, + Wx::EVT_SIZING => Wx::SizeEvent, + Wx::EVT_MOVE => Wx::MoveEvent, + Wx::EVT_MOVING => Wx::MoveEvent, + Wx::EVT_TIMER => Wx::TimerEvent, + Wx::EVT_CHAR => Wx::KeyEvent, + Wx::EVT_CHAR_HOOK => Wx::KeyEvent, + Wx::EVT_KEY_DOWN => Wx::KeyEvent, + Wx::EVT_KEY_UP => Wx::KeyEvent, + Wx::EVT_COMMAND_FIND => Wx::FindDialogEvent, + Wx::EVT_COMMAND_FIND_NEXT => Wx::FindDialogEvent, + Wx::EVT_COMMAND_FIND_REPLACE => Wx::FindDialogEvent, + Wx::EVT_COMMAND_FIND_REPLACE_ALL => Wx::FindDialogEvent, + Wx::EVT_COMMAND_FIND_CLOSE => Wx::FindDialogEvent, + Wx::EVT_SET_FOCUS => Wx::FocusEvent, + Wx::EVT_KILL_FOCUS => Wx::FocusEvent, + Wx::EVT_LEFT_DOWN => Wx::MouseEvent, + Wx::EVT_LEFT_UP => Wx::MouseEvent, + Wx::EVT_LEFT_DCLICK => Wx::MouseEvent, + Wx::EVT_MIDDLE_DOWN => Wx::MouseEvent, + Wx::EVT_MIDDLE_UP => Wx::MouseEvent, + Wx::EVT_MIDDLE_DCLICK => Wx::MouseEvent, + Wx::EVT_RIGHT_DOWN => Wx::MouseEvent, + Wx::EVT_RIGHT_UP => Wx::MouseEvent, + Wx::EVT_RIGHT_DCLICK => Wx::MouseEvent, + Wx::EVT_MOTION => Wx::MouseEvent, + Wx::EVT_ENTER_WINDOW => Wx::MouseEvent, + Wx::EVT_LEAVE_WINDOW => Wx::MouseEvent, + Wx::EVT_MOUSEWHEEL => Wx::MouseEvent, + Wx::EVT_SCROLL_THUMBTRACK => Wx::ScrollEvent, + Wx::EVT_SCROLL_LINEUP => Wx::ScrollEvent, + Wx::EVT_SCROLL_LINEDOWN => Wx::ScrollEvent, + Wx::EVT_COMMAND_CHOICEBOOK_PAGE_CHANGED => Wx::ChoicebookEvent, + Wx::EVT_COMMAND_CHOICEBOOK_PAGE_CHANGING => Wx::ChoicebookEvent, + Wx::EVT_COMMAND_NOTEBOOK_PAGE_CHANGED => Wx::NotebookEvent, + Wx::EVT_COMMAND_NOTEBOOK_PAGE_CHANGING => Wx::NotebookEvent, + Wx::EVT_COMMAND_LISTBOOK_PAGE_CHANGED => Wx::ListbookEvent, + Wx::EVT_COMMAND_LISTBOOK_PAGE_CHANGING => Wx::ListbookEvent, + Wx::EVT_GRID_CELL_LEFT_CLICK => Wx::GridEvent, + Wx::EVT_GRID_CELL_RIGHT_CLICK => Wx::GridEvent, + Wx::EVT_GRID_CELL_LEFT_DCLICK => Wx::GridEvent, + Wx::EVT_GRID_CELL_RIGHT_DCLICK => Wx::GridEvent, + Wx::EVT_GRID_LABEL_LEFT_CLICK => Wx::GridEvent, + Wx::EVT_GRID_LABEL_RIGHT_CLICK => Wx::GridEvent, + Wx::EVT_GRID_LABEL_LEFT_DCLICK => Wx::GridEvent, + Wx::EVT_GRID_LABEL_RIGHT_DCLICK => Wx::GridEvent, + Wx::EVT_GRID_CELL_CHANGE => Wx::GridEvent, + Wx::EVT_GRID_SELECT_CELL => Wx::GridEvent, + Wx::EVT_GRID_EDITOR_HIDDEN => Wx::GridEvent, + Wx::EVT_GRID_EDITOR_SHOWN => Wx::GridEvent, + Wx::EVT_GRID_RANGE_SELECT => Wx::GridRangeSelectEvent, + Wx::EVT_GRID_COL_SIZE => Wx::GridSizeEvent, + Wx::EVT_GRID_ROW_SIZE => Wx::GridSizeEvent, + Wx::EVT_GRID_EDITOR_CREATED => Wx::GridEditorCreatedEvent, + Wx::EVT_WIZARD_PAGE_CHANGED => Wx::WizardEvent, + Wx::EVT_WIZARD_PAGE_CHANGING => Wx::WizardEvent, + Wx::EVT_WIZARD_CANCEL => Wx::WizardEvent, + Wx::EVT_WIZARD_HELP => Wx::WizardEvent, + Wx::EVT_WIZARD_FINISHED => Wx::WizardEvent, + Wx::EVT_COMMAND_LIST_BEGIN_DRAG => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_BEGIN_RDRAG => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_BEGIN_LABEL_EDIT => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_END_LABEL_EDIT => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_DELETE_ITEM => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_DELETE_ALL_ITEMS => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_KEY_DOWN => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_INSERT_ITEM => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_COL_CLICK => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_COL_RIGHT_CLICK => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_COL_BEGIN_DRAG => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_COL_DRAGGING => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_COL_END_DRAG => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_ITEM_SELECTED => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_ITEM_DESELECTED => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_ITEM_RIGHT_CLICK => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_ITEM_MIDDLE_CLICK => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_ITEM_ACTIVATED => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_ITEM_FOCUSED => Wx::ListEvent, + Wx::EVT_COMMAND_LIST_CACHE_HINT => Wx::ListEvent, + Wx::EVT_COMMAND_TREE_BEGIN_DRAG => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_BEGIN_RDRAG => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_END_DRAG => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_BEGIN_LABEL_EDIT => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_END_LABEL_EDIT => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_GET_INFO => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_SET_INFO => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_EXPANDED => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_EXPANDING => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_COLLAPSED => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_COLLAPSING => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_SEL_CHANGED => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_SEL_CHANGING => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_KEY_DOWN => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_DELETE_ITEM => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_ACTIVATED => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_MENU => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_RIGHT_CLICK => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_MIDDLE_CLICK => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_STATE_IMAGE_CLICK => Wx::TreeEvent, + Wx::EVT_COMMAND_TREE_ITEM_GETTOOLTIP => Wx::TreeEvent, + Wx::EVT_SASH_DRAGGED => Wx::SashEvent, + Wx::EVT_COMMAND_SPLITTER_SASH_POS_CHANGED => Wx::SplitterEvent, + Wx::EVT_COMMAND_SPLITTER_SASH_POS_CHANGING => Wx::SplitterEvent, + Wx::EVT_COMMAND_SPLITTER_DOUBLECLICKED => Wx::SplitterEvent, + Wx::EVT_COMMAND_SPLITTER_UNSPLIT => Wx::SplitterEvent, + Wx::EVT_SCROLL_TOP => Wx::ScrollEvent, + Wx::EVT_SCROLL_BOTTOM => Wx::ScrollEvent, + Wx::EVT_SCROLL_LINEUP => Wx::ScrollEvent, + Wx::EVT_SCROLL_LINEDOWN => Wx::ScrollEvent, + Wx::EVT_SCROLL_PAGEUP => Wx::ScrollEvent, + Wx::EVT_SCROLL_PAGEDOWN => Wx::ScrollEvent, + Wx::EVT_SCROLL_THUMBTRACK => Wx::ScrollEvent, + Wx::EVT_SCROLL_THUMBRELEASE => Wx::ScrollEvent, + Wx::EVT_SCROLL_CHANGED => Wx::ScrollEvent, + Wx::EVT_SCROLLWIN_TOP => Wx::ScrollWinEvent, + Wx::EVT_SCROLLWIN_BOTTOM => Wx::ScrollWinEvent, + Wx::EVT_SCROLLWIN_LINEUP => Wx::ScrollWinEvent, + Wx::EVT_SCROLLWIN_LINEDOWN => Wx::ScrollWinEvent, + Wx::EVT_SCROLLWIN_PAGEUP => Wx::ScrollWinEvent, + Wx::EVT_SCROLLWIN_PAGEDOWN => Wx::ScrollWinEvent, + Wx::EVT_SCROLLWIN_THUMBTRACK => Wx::ScrollWinEvent, + Wx::EVT_SCROLLWIN_THUMBRELEASE => Wx::ScrollWinEvent, + Wx::EVT_ACTIVATE => Wx::ActivateEvent, + Wx::EVT_ACTIVATE_APP => Wx::ActivateEvent, + Wx::EVT_CREATE => Wx::WindowCreateEvent, + Wx::EVT_DESTROY => Wx::WindowDestroyEvent, + Wx::EVT_MENU_OPEN => Wx::MenuEvent, + Wx::EVT_MENU_CLOSE => Wx::MenuEvent, + Wx::EVT_MENU_HIGHLIGHT => Wx::MenuEvent, + Wx::EVT_CONTEXT_MENU => Wx::ContextMenuEvent, + Wx::EVT_AUI_PANE_BUTTON => Wx::AuiManagerEvent, + Wx::EVT_AUI_PANE_CLOSE => Wx::AuiManagerEvent, + Wx::EVT_AUI_PANE_MAXIMIZE => Wx::AuiManagerEvent, + Wx::EVT_AUI_PANE_RESTORE => Wx::AuiManagerEvent, + Wx::EVT_AUI_RENDER => Wx::AuiManagerEvent, + Wx::EVT_AUI_FIND_MANAGER => Wx::AuiManagerEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE => Wx::AuiNotebookEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED => Wx::AuiNotebookEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING => Wx::AuiNotebookEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_BUTTON => Wx::AuiNotebookEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG => Wx::AuiNotebookEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_END_DRAG => Wx::AuiNotebookEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_DRAG_MOTION => Wx::AuiNotebookEvent, + Wx::EVT_COMMAND_AUINOTEBOOK_ALLOW_DND => Wx::AuiNotebookEvent, + } + + if defined?(Wx::Scintilla) + EVENT_TYPE_MAPPING.merge( + Wx::EVT_SCI_CHANGE => Wx::ScintillaEvent, + Wx::EVT_SCI_STYLENEEDED => Wx::ScintillaEvent, + Wx::EVT_SCI_CHARADDED => Wx::ScintillaEvent, + Wx::EVT_SCI_SAVEPOINTREACHED => Wx::ScintillaEvent, + Wx::EVT_SCI_SAVEPOINTLEFT => Wx::ScintillaEvent, + Wx::EVT_SCI_ROMODIFYATTEMPT => Wx::ScintillaEvent, + Wx::EVT_SCI_KEY => Wx::ScintillaEvent, + Wx::EVT_SCI_DOUBLECLICK => Wx::ScintillaEvent, + Wx::EVT_SCI_UPDATEUI => Wx::ScintillaEvent, + Wx::EVT_SCI_MODIFIED => Wx::ScintillaEvent, + Wx::EVT_SCI_MACRORECORD => Wx::ScintillaEvent, + Wx::EVT_SCI_MARGINCLICK => Wx::ScintillaEvent, + Wx::EVT_SCI_NEEDSHOWN => Wx::ScintillaEvent, + Wx::EVT_SCI_PAINTED => Wx::ScintillaEvent, + Wx::EVT_SCI_USERLISTSELECTION => Wx::ScintillaEvent, + Wx::EVT_SCI_URIDROPPED => Wx::ScintillaEvent, + Wx::EVT_SCI_DWELLSTART => Wx::ScintillaEvent, + Wx::EVT_SCI_DWELLEND => Wx::ScintillaEvent, + Wx::EVT_SCI_START_DRAG => Wx::ScintillaEvent, + Wx::EVT_SCI_DRAG_OVER => Wx::ScintillaEvent, + Wx::EVT_SCI_DO_DROP => Wx::ScintillaEvent, + Wx::EVT_SCI_ZOOM => Wx::ScintillaEvent, + Wx::EVT_SCI_HOTSPOT_CLICK => Wx::ScintillaEvent, + Wx::EVT_SCI_HOTSPOT_DCLICK => Wx::ScintillaEvent, + Wx::EVT_SCI_CALLTIP_CLICK => Wx::ScintillaEvent ) + end +end + </ins></span></pre></div> <a id="trunkwxruby2swigclassesEvtHandleri"></a> <div class="modfile"><h4>Modified: trunk/wxruby2/swig/classes/EvtHandler.i (1041 => 1042)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/swig/classes/EvtHandler.i        2007-05-31 21:17:41 UTC (rev 1041) +++ trunk/wxruby2/swig/classes/EvtHandler.i        2007-05-31 21:19:45 UTC (rev 1042) </span><span class="lines">@@ -34,465 +34,31 @@ </span><span class="cx"> </span><span class="cx"> </span><span class="cx"> %{ </span><ins>+ +extern swig_class cWxEvtHandler; </ins><span class="cx"> static VALUE callbacks = Qnil; </span><del>-extern swig_class cWxEvent; -extern swig_class cWxCalendarEvent; -extern swig_class cWxCloseEvent; -extern swig_class cWxCommandEvent; -extern swig_class cWxTextUrlEvent; -extern swig_class cWxIdleEvent; -extern swig_class cWxPaintEvent; -extern swig_class cWxUpdateUIEvent; -extern swig_class cWxSizeEvent; -extern swig_class cWxTimerEvent; -extern swig_class cWxKeyEvent; -extern swig_class cWxFindDialogEvent; -extern swig_class cWxMouseEvent; -extern swig_class cWxFocusEvent; -extern swig_class cWxSpinEvent; -extern swig_class cWxChoicebookEvent; -extern swig_class cWxNotebookEvent; -extern swig_class cWxListbookEvent; -extern swig_class cWxGridEvent; -extern swig_class cWxGridRangeSelectEvent; -extern swig_class cWxGridSizeEvent; -extern swig_class cWxGridEditorCreatedEvent; -extern swig_class cWxTreeEvent; -extern swig_class cWxSplitterEvent; -extern swig_class cWxScrollEvent; -extern swig_class cWxScrollWinEvent; -extern swig_class cWxMoveEvent; -extern swig_class cWxListEvent; -extern swig_class cWxWizardEvent; -extern swig_class cWxSashEvent; -extern swig_class cWxActivateEvent; -extern swig_class cWxWindowCreateEvent; -extern swig_class cWxWindowDestroyEvent; -extern swig_class cWxMenuEvent; -extern swig_class cWxContextMenuEvent; -extern swig_class cWxAuiManagerEvent; -extern swig_class cWxAuiNotebookEvent; -#ifdef WXSCINTILLA -extern swig_class cWxScintillaEvent; -#endif </del><span class="cx"> </span><del>-static const wxEventType *calendarEvents[] -{ - &wxEVT_CALENDAR_SEL_CHANGED, - &wxEVT_CALENDAR_DAY_CHANGED, - &wxEVT_CALENDAR_MONTH_CHANGED, - &wxEVT_CALENDAR_YEAR_CHANGED, - &wxEVT_CALENDAR_DOUBLECLICKED, - &wxEVT_CALENDAR_WEEKDAY_CLICKED, - (const wxEventType *)0 -}; - -static const wxEventType *closeEvents[] -{ - &wxEVT_CLOSE_WINDOW, - (const wxEventType *)0 -}; - -static const wxEventType *commandEvents[] = -{ - &wxEVT_COMMAND_BUTTON_CLICKED, - &wxEVT_COMMAND_CHECKBOX_CLICKED, - &wxEVT_COMMAND_CHOICE_SELECTED, - &wxEVT_COMMAND_LISTBOX_SELECTED, - &wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, - &wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, - &wxEVT_COMMAND_TEXT_UPDATED, - &wxEVT_COMMAND_TEXT_ENTER, - &wxEVT_COMMAND_TEXT_MAXLEN, - &wxEVT_COMMAND_MENU_SELECTED, - &wxEVT_COMMAND_SLIDER_UPDATED, - &wxEVT_COMMAND_RADIOBOX_SELECTED, - &wxEVT_COMMAND_RADIOBUTTON_SELECTED, - &wxEVT_COMMAND_SCROLLBAR_UPDATED, - &wxEVT_COMMAND_VLBOX_SELECTED, - &wxEVT_COMMAND_COMBOBOX_SELECTED, - &wxEVT_COMMAND_TOOL_RCLICKED, - &wxEVT_COMMAND_TOOL_ENTER, - &wxEVT_COMMAND_SPINCTRL_UPDATED, - &wxEVT_COMMAND_COMBOBOX_SELECTED, - (const wxEventType *)0 -}; - -static const wxEventType *textUrlEvents[] -{ - &wxEVT_COMMAND_TEXT_URL, - (const wxEventType *)0 -}; - -static const wxEventType *idleEvents[] -{ - &wxEVT_IDLE, - (const wxEventType *)0 -}; - -static const wxEventType *paintEvents[] = -{ - &wxEVT_PAINT, - (const wxEventType *)0 -}; - -static const wxEventType *updateUIEvents[] -{ - &wxEVT_UPDATE_UI, - (const wxEventType *)0 -}; - -static const wxEventType *sizeEvents[] = -{ - &wxEVT_SIZE, - (const wxEventType *)0 -}; - -static const wxEventType *timerEvents[] = -{ - &wxEVT_TIMER, - (const wxEventType *)0 -}; - -static const wxEventType *keyEvents [] = -{ - &wxEVT_CHAR, - &wxEVT_CHAR_HOOK, - &wxEVT_KEY_DOWN, - &wxEVT_KEY_UP, - (const wxEventType *)0 -}; - -static const wxEventType *findEvents [] = -{ - &wxEVT_COMMAND_FIND, - &wxEVT_COMMAND_FIND_NEXT, - &wxEVT_COMMAND_FIND_REPLACE, - &wxEVT_COMMAND_FIND_REPLACE_ALL, - &wxEVT_COMMAND_FIND_CLOSE, - (const wxEventType *)0 -}; - -static const wxEventType *focusEvents [] -{ - &wxEVT_SET_FOCUS, - &wxEVT_KILL_FOCUS, - (const wxEventType *)0 -}; - -static const wxEventType *mouseEvents[] = -{ - &wxEVT_LEFT_DOWN, - &wxEVT_LEFT_UP, - &wxEVT_LEFT_DCLICK, - &wxEVT_MIDDLE_DOWN, - &wxEVT_MIDDLE_UP, - &wxEVT_MIDDLE_DCLICK, - &wxEVT_RIGHT_DOWN, - &wxEVT_RIGHT_UP, - &wxEVT_RIGHT_DCLICK, - &wxEVT_MOTION, - &wxEVT_ENTER_WINDOW, - &wxEVT_LEAVE_WINDOW, - &wxEVT_MOUSEWHEEL, - (const wxEventType *)0 -}; - -static const wxEventType *spinEvents[] = -{ - &wxEVT_SCROLL_THUMBTRACK, - &wxEVT_SCROLL_LINEUP, - &wxEVT_SCROLL_LINEDOWN, - (const wxEventType *)0 -}; - -static const wxEventType *choicebookEvents[] = -{ - &wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, - &wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, - (const wxEventType *)0 -}; - -static const wxEventType *notebookEvents[] = -{ - &wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, - &wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, - (const wxEventType *)0 -}; - -static const wxEventType *listbookEvents[] = -{ - &wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, - &wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, - (const wxEventType *)0 -}; - -static const wxEventType *gridEvents[] = -{ - &wxEVT_GRID_CELL_LEFT_CLICK, - &wxEVT_GRID_CELL_RIGHT_CLICK, - &wxEVT_GRID_CELL_LEFT_DCLICK, - &wxEVT_GRID_CELL_RIGHT_DCLICK, - &wxEVT_GRID_LABEL_LEFT_CLICK, - &wxEVT_GRID_LABEL_RIGHT_CLICK, - &wxEVT_GRID_LABEL_LEFT_DCLICK, - &wxEVT_GRID_LABEL_RIGHT_DCLICK, - &wxEVT_GRID_CELL_CHANGE, - &wxEVT_GRID_SELECT_CELL, - &wxEVT_GRID_EDITOR_HIDDEN, - &wxEVT_GRID_EDITOR_SHOWN, - (const wxEventType *)0 -}; - -static const wxEventType *gridRangeEvents[] -{ -                &wxEVT_GRID_RANGE_SELECT, -                (const wxEventType *)0 -}; - -static const wxEventType *gridSizeEvents[] -{ - &wxEVT_GRID_COL_SIZE, - &wxEVT_GRID_ROW_SIZE, - (const wxEventType *)0 -}; - -static const wxEventType *gridEditorEvent[] -{ - &wxEVT_GRID_EDITOR_CREATED, - (const wxEventType *)0 -}; - -static const wxEventType *wizardEvents[] -{ - &wxEVT_WIZARD_PAGE_CHANGED, - &wxEVT_WIZARD_PAGE_CHANGING, - &wxEVT_WIZARD_CANCEL, - &wxEVT_WIZARD_HELP, - &wxEVT_WIZARD_FINISHED, - (const wxEventType *)0 -}; - -static const wxEventType *sashEvents[] -{ - &wxEVT_SASH_DRAGGED, - (const wxEventType *)0 -}; - -static const wxEventType *scrollEvents[] -{ - &wxEVT_SCROLL_TOP, - &wxEVT_SCROLL_BOTTOM, - &wxEVT_SCROLL_LINEUP, - &wxEVT_SCROLL_LINEDOWN, - &wxEVT_SCROLL_PAGEUP, - &wxEVT_SCROLL_PAGEDOWN, - &wxEVT_SCROLL_THUMBTRACK, - &wxEVT_SCROLL_THUMBRELEASE, - &wxEVT_SCROLL_CHANGED, - (const wxEventType *)0 -}; - - -static const wxEventType *scrollWinEvents[] -{ - &wxEVT_SCROLLWIN_TOP, - &wxEVT_SCROLLWIN_BOTTOM, - &wxEVT_SCROLLWIN_LINEUP, - &wxEVT_SCROLLWIN_LINEDOWN, - &wxEVT_SCROLLWIN_PAGEUP, - &wxEVT_SCROLLWIN_PAGEDOWN, - &wxEVT_SCROLLWIN_THUMBTRACK, - &wxEVT_SCROLLWIN_THUMBRELEASE, - (const wxEventType *)0 -}; - -static const wxEventType *activateEvents[] -{ - &wxEVT_ACTIVATE, - &wxEVT_ACTIVATE_APP, - (const wxEventType *)0 -}; - -static const wxEventType *createEvents[] -{ - &wxEVT_CREATE, - (const wxEventType *)0 -}; - -static const wxEventType *destroyEvents[] -{ - &wxEVT_DESTROY, - (const wxEventType *)0 -}; - -static const wxEventType *menuEvents[] -{ - &wxEVT_MENU_OPEN, - &wxEVT_MENU_CLOSE, - &wxEVT_MENU_HIGHLIGHT, - (const wxEventType *)0 -}; - -static const wxEventType *contextMenuEvents[] -{ - &wxEVT_CONTEXT_MENU, - (const wxEventType *)0 -}; - -static const wxEventType *auiManagerEvents[] -{ - &wxEVT_AUI_PANE_BUTTON, - &wxEVT_AUI_PANE_CLOSE, - &wxEVT_AUI_PANE_MAXIMIZE, - &wxEVT_AUI_PANE_RESTORE, - &wxEVT_AUI_RENDER, - &wxEVT_AUI_FIND_MANAGER, - (const wxEventType *)0 -}; - -static const wxEventType *auiNotebookEvents[] -{ - &wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, - &wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, - &wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, - &wxEVT_COMMAND_AUINOTEBOOK_BUTTON, - &wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, - &wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, - &wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, - &wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, - (const wxEventType *)0 -}; - -#ifdef WXSCINTILLA -static const wxEventType *scintillaEvents[] -{ - &wxEVT_SCI_CHANGE, - &wxEVT_SCI_STYLENEEDED, - &wxEVT_SCI_CHARADDED, - &wxEVT_SCI_SAVEPOINTREACHED, - &wxEVT_SCI_SAVEPOINTLEFT, - &wxEVT_SCI_ROMODIFYATTEMPT, - &wxEVT_SCI_KEY, - &wxEVT_SCI_DOUBLECLICK, - &wxEVT_SCI_UPDATEUI, - &wxEVT_SCI_MODIFIED, - &wxEVT_SCI_MACRORECORD, - &wxEVT_SCI_MARGINCLICK, - &wxEVT_SCI_NEEDSHOWN, - &wxEVT_SCI_PAINTED, - &wxEVT_SCI_USERLISTSELECTION, - &wxEVT_SCI_URIDROPPED, - &wxEVT_SCI_DWELLSTART, - &wxEVT_SCI_DWELLEND, - &wxEVT_SCI_START_DRAG, - &wxEVT_SCI_DRAG_OVER, - &wxEVT_SCI_DO_DROP, - &wxEVT_SCI_ZOOM, - &wxEVT_SCI_HOTSPOT_CLICK, - &wxEVT_SCI_HOTSPOT_DCLICK, - &wxEVT_SCI_CALLTIP_CLICK, - (const wxEventType *)0 -}; -#endif - -//IMPLEMENT_ABSTRACT_CLASS(wxRbCallback, wxObject); - </del><ins>+// Class which stores the ruby proc associated with an event handler. </ins><span class="cx"> class wxRbCallback : public wxObject </span><span class="cx"> { </span><del>-// DECLARE_ABSTRACT_CLASS(wxRbCallback); </del><ins>+ </ins><span class="cx"> public: </span><span class="cx"> wxRbCallback(VALUE func) { m_func = func; } </span><span class="cx"> wxRbCallback(const wxRbCallback &other) { m_func = other.m_func; } </span><del>- </del><ins>+ + + // This method handles all events on the WxWidgets/C++ side. It link + // inspects the event and based on the event''s type wraps it in the + // appropriate class (the mapping can be found in + // lib/wx/classes/evthandler.rb). This wrapped event is then passed + // into the ruby proc for handling on the ruby side </ins><span class="cx"> void EventThunker(wxEvent &event) </span><span class="cx"> { </span><del>- VALUE cEvent = Qnil; </del><ins>+ VALUE event_type_id = INT2NUM(event.GetEventType()); + VALUE cEvent = rb_funcall(cWxEvtHandler.klass, +                                                                 rb_intern("event_class_for_type"), +                                                                 1, event_type_id );          </ins><span class="cx"> </span><del>- int type = event.GetEventType(); - if(event.IsKindOf(CLASSINFO(wxCalendarEvent))) - cEvent = cWxCalendarEvent.klass; - else if (event.IsKindOf(CLASSINFO(wxChoicebookEvent))) - cEvent = cWxChoicebookEvent.klass;                         - else if (event.IsKindOf(CLASSINFO(wxListbookEvent))) - cEvent = cWxListbookEvent.klass; - else if (event.IsKindOf(CLASSINFO(wxNotebookEvent))) - cEvent = cWxNotebookEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxUpdateUIEvent))) - cEvent = cWxUpdateUIEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxSizeEvent))) - cEvent = cWxSizeEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxKeyEvent))) - cEvent = cWxKeyEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxFindDialogEvent))) - cEvent = cWxFindDialogEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxFocusEvent))) - cEvent = cWxFocusEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxMouseEvent))) - cEvent = cWxMouseEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxSpinEvent))) - cEvent = cWxSpinEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxCloseEvent))) - cEvent = cWxCloseEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxIdleEvent))) - cEvent = cWxIdleEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxPaintEvent))) - cEvent = cWxPaintEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxTimerEvent))) - cEvent = cWxTimerEvent.klass; -                else if (event.IsKindOf(CLASSINFO(wxTreeEvent))) -                        cEvent = cWxTreeEvent.klass; -                else if (event.IsKindOf(CLASSINFO(wxGridEvent))) -                        cEvent = cWxGridEvent.klass; -                else if (event.IsKindOf(CLASSINFO(wxGridRangeSelectEvent))) -                        cEvent = cWxGridRangeSelectEvent.klass; -                else if (event.IsKindOf(CLASSINFO(wxGridSizeEvent))) -                        cEvent = cWxGridSizeEvent.klass; -                else if (event.IsKindOf(CLASSINFO(wxGridEditorCreatedEvent))) -                        cEvent = cWxGridEditorCreatedEvent.klass;                         -                else if (event.IsKindOf(CLASSINFO(wxSplitterEvent))) -                        cEvent = cWxSplitterEvent.klass; -                else if (event.IsKindOf(CLASSINFO(wxMoveEvent))) -                        cEvent = cWxMoveEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxListEvent))) - cEvent = cWxListEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxScrollEvent))) - cEvent = cWxScrollEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxScrollWinEvent))) - cEvent = cWxScrollWinEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxWizardEvent))) - cEvent = cWxWizardEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxActivateEvent))) - cEvent = cWxActivateEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxWindowCreateEvent))) - cEvent = cWxWindowCreateEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxWindowDestroyEvent))) - cEvent = cWxWindowDestroyEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxMenuEvent))) - cEvent = cWxMenuEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxContextMenuEvent))) - cEvent = cWxContextMenuEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxSashEvent))) - cEvent = cWxSashEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxTextUrlEvent))) - cEvent = cWxTextUrlEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxAuiManagerEvent))) - cEvent = cWxAuiManagerEvent.klass; - else if(event.IsKindOf(CLASSINFO(wxAuiNotebookEvent))) - cEvent = cWxAuiNotebookEvent.klass; - -#ifdef WXSCINTILLA - else if (event.IsKindOf(CLASSINFO(wxScintillaEvent))) - cEvent = cWxScintillaEvent.klass; -#endif - else if(event.IsKindOf(CLASSINFO(wxCommandEvent))) - cEvent = cWxCommandEvent.klass; - - else - { - cEvent = cWxEvent.klass; - } - </del><span class="cx"> static VALUE vevent; </span><span class="cx"> vevent = Data_Wrap_Struct(cEvent, 0, 0, 0); </span><span class="cx"> DATA_PTR(vevent) = &event; </span><span class="lines">@@ -500,20 +66,12 @@ </span><span class="cx"> wxRbCallback *cb = (wxRbCallback *)event.m_callbackUserData; </span><span class="cx"> rb_funcall(cb->m_func, rb_intern("call"),1,vevent); </span><span class="cx"> } </span><del>- - bool IsEventInMap(int type, const wxEventType *map[]) - { - for(int i=0; map[i] != NULL; ++i) - if(type == *map[i]) - return true; - return false; - } - - - VALUE m_func; </del><ins>+ + VALUE m_func; </ins><span class="cx"> }; </span><span class="cx"> </span><del>- </del><ins>+// Internal method that links a ruby Proc (the block passed to evt_xxx) +// to the WxWidgets C++ event handler method. </ins><span class="cx"> void internal_connect(VALUE self, int firstId, int lastId, </span><span class="cx"> wxEventType eventType) </span><span class="cx"> { </span></span></pre></div> <a id="trunkwxruby2swigfixeventsrb"></a> <div class="modfile"><h4>Modified: trunk/wxruby2/swig/fixevents.rb (1041 => 1042)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/swig/fixevents.rb        2007-05-31 21:17:41 UTC (rev 1041) +++ trunk/wxruby2/swig/fixevents.rb        2007-05-31 21:19:45 UTC (rev 1042) </span><span class="lines">@@ -1,10 +1,12 @@ </span><del>-# fixevents.rb -# Copyright 2004-2005 by Kevin Smith -# released under the MIT-style wxruby2 license </del><ins>+# Copyright 2004-2007 by Kevin Smith +# released under the MIT-style wxruby2 license </ins><span class="cx"> </span><del>-# This script post-processes the SWIG output -# to write all of the event handlers -# I know it''s ugly :-( </del><ins>+# This script post-processes SWIG''s output of swig/Events.i to add in +# all the event handler methods (evt_xxx) to classes that inherit from +# EvtHandler. It reads ''swig/classes/include/events.rb'' which contains +# definitions for every event type, and adds the relevant methods to the +# EvtHandler class. + </ins><span class="cx"> require ''swig/classes/include/events'' </span><span class="cx"> </span><span class="cx"> $exclude = [ </span></span></pre> </div> </div> </body> </html>
Seemingly Similar Threads
- [1067] trunk/wxruby2: Set up event handlers in Ruby rather than by post-processing SWIG output
- [802] trunk/wxruby2/swig/classes: Add support for MenuEvent (MENU_OPEN, MENU_CLOSE, MENU_HIGHLIGHT)
- [723] trunk/wxruby2: Added WindowCreateEvent and WindowDestroyEvent + event handlers (AF)
- [815] trunk/wxruby2/swig/classes: Added ContextMenuEvent class plus event handling methods
- [982] branches/wxruby2/wxwidgets_282/swig/classes/EvtHandler.i: Add EvtThunker mapping for TimerEvent (bug 10391)