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>
Reasonably Related 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)
