IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject)
IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject)
-IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
#if wxUSE_GUI
+ IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxNotifyEvent, wxCommandEvent)
IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent)
IMPLEMENT_DYNAMIC_CLASS(wxKeyEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxSizeEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxPaintEvent, wxEvent)
+ IMPLEMENT_DYNAMIC_CLASS(wxNcPaintEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxEraseEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxMoveEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxFocusEvent, wxEvent)
+ IMPLEMENT_DYNAMIC_CLASS(wxChildFocusEvent, wxCommandEvent)
IMPLEMENT_DYNAMIC_CLASS(wxCloseEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxShowEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxMaximizeEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxWindowCreateEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxWindowDestroyEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxHelpEvent, wxCommandEvent)
+ IMPLEMENT_DYNAMIC_CLASS(wxContextMenuEvent, wxCommandEvent)
#endif // wxUSE_GUI
const wxEventTable *wxEvtHandler::GetEventTable() const
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED)
DEFINE_EVENT_TYPE(wxEVT_RIGHT_DCLICK)
DEFINE_EVENT_TYPE(wxEVT_SET_FOCUS)
DEFINE_EVENT_TYPE(wxEVT_KILL_FOCUS)
+DEFINE_EVENT_TYPE(wxEVT_CHILD_FOCUS)
DEFINE_EVENT_TYPE(wxEVT_MOUSEWHEEL)
// Non-client mouse events
// or any button up event (but = -1)
bool wxMouseEvent::ButtonUp(int but) const
{
- switch (but) {
+ switch (but)
+ {
case -1:
return (LeftUp() || MiddleUp() || RightUp());
case 1:
// True if the given button is currently changing state
bool wxMouseEvent::Button(int but) const
{
- switch (but) {
+ switch (but)
+ {
case -1:
return (ButtonUp(-1) || ButtonDown(-1) || ButtonDClick(-1));
case 1:
bool wxMouseEvent::ButtonIsDown(int but) const
{
- switch (but) {
+ switch (but)
+ {
case -1:
return (LeftIsDown() || MiddleIsDown() || RightIsDown());
case 1:
return FALSE;
}
+int wxMouseEvent::GetButton() const
+{
+ for ( int i = 1; i <= 3; i++ )
+ {
+ if ( Button(i) )
+ {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
// Find the logical position of the event given the DC
wxPoint wxMouseEvent::GetLogicalPosition(const wxDC& dc) const
{
SetEventObject(win);
}
-#endif // wxUSE_GUI
-
void wxIdleEvent::CopyObject(wxObject& obj_d) const
{
wxIdleEvent *obj = (wxIdleEvent *)&obj_d;
obj->m_requestMore = m_requestMore;
}
+wxChildFocusEvent::wxChildFocusEvent(wxWindow *win)
+ : wxCommandEvent(wxEVT_CHILD_FOCUS)
+{
+ SetEventObject(win);
+}
+
+#endif // wxUSE_GUI
+
+// ----------------------------------------------------------------------------
+// wxEvtHandler
+// ----------------------------------------------------------------------------
+
/*
* Event handler
*/
bool wxEvtHandler::ProcessEvent(wxEvent& event)
{
#if wxUSE_GUI
+
+ // We have to use the actual window or processing events from wxWindowNative
+ // destructor won't work (we don't see the wxWindow class)
+#ifdef __WXDEBUG__
// check that our flag corresponds to reality
- wxASSERT( m_isWindow == IsKindOf(CLASSINFO(wxWindow)) );
+ wxClassInfo* info = NULL;
+#ifdef __WXUNIVERSAL__
+# if defined(__WXMSW__)
+ info = CLASSINFO(wxWindowMSW);
+# elif defined(__WXGTK__)
+ info = CLASSINFO(wxWindowGTK);
+# elif defined(__WXMGL__)
+ info = CLASSINFO(wxWindowMGL);
+# elif defined(__WXMAC__)
+ info = CLASSINFO(wxWindowMac);
+# elif defined(__WXMOTIF__)
+ info = CLASSINFO(wxWindowMotif);
+# endif
+#else
+ info = CLASSINFO(wxWindow);
+#endif
+
+ wxASSERT_MSG( m_isWindow == IsKindOf(info),
+ _T("this should [not] be a window but it is [not]") );
+#endif
+
#endif // wxUSE_GUI
// An event handler can be enabled or disabled
}
#if wxUSE_GUI
- // Carry on up the parent-child hierarchy,
- // but only if event is a command event: it wouldn't
- // make sense for a parent to receive a child's size event, for example
+ // Carry on up the parent-child hierarchy, but only if event is a command
+ // event: it wouldn't make sense for a parent to receive a child's size
+ // event, for example
if ( m_isWindow && event.IsCommandEvent() )
{
wxWindow *win = (wxWindow *)this;
- wxWindow *parent = win->GetParent();
- if (parent && !parent->IsBeingDeleted())
- return parent->GetEventHandler()->ProcessEvent(event);
+
+ // also, don't propagate events beyond the first top level window: it
+ // doesn't make sense to process dialogs events in the parent frame
+ if ( !win->IsTopLevel() )
+ {
+ wxWindow *parent = win->GetParent();
+ if (parent && !parent->IsBeingDeleted())
+ return parent->GetEventHandler()->ProcessEvent(event);
+ }
}
#endif // wxUSE_GUI