// Modified by:
// Created: 01/02/97
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
+// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC_CLASS(wxWindowDestroyEvent, wxEvent)
IMPLEMENT_DYNAMIC_CLASS(wxHelpEvent, wxCommandEvent)
IMPLEMENT_DYNAMIC_CLASS(wxContextMenuEvent, wxCommandEvent)
+ IMPLEMENT_DYNAMIC_CLASS(wxMouseCaptureChangedEvent, wxEvent)
#endif // wxUSE_GUI
const wxEventTable *wxEvtHandler::GetEventTable() const
DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN)
DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK)
DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE)
+DEFINE_EVENT_TYPE(wxEVT_SCROLL_ENDSCROLL)
// Scroll events from wxWindow
DEFINE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP)
DEFINE_EVENT_TYPE(wxEVT_ERASE_BACKGROUND)
DEFINE_EVENT_TYPE(wxEVT_NC_PAINT)
DEFINE_EVENT_TYPE(wxEVT_PAINT_ICON)
-DEFINE_EVENT_TYPE(wxEVT_MENU_CHAR)
-DEFINE_EVENT_TYPE(wxEVT_MENU_INIT)
+DEFINE_EVENT_TYPE(wxEVT_MENU_OPEN)
+DEFINE_EVENT_TYPE(wxEVT_MENU_CLOSE)
DEFINE_EVENT_TYPE(wxEVT_MENU_HIGHLIGHT)
-DEFINE_EVENT_TYPE(wxEVT_POPUP_MENU_INIT)
DEFINE_EVENT_TYPE(wxEVT_CONTEXT_MENU)
DEFINE_EVENT_TYPE(wxEVT_SYS_COLOUR_CHANGED)
DEFINE_EVENT_TYPE(wxEVT_DISPLAY_CHANGED)
}
wxEvent::wxEvent(const wxEvent &src)
+ : wxObject()
+ , m_eventObject(src.m_eventObject)
+ , m_eventType(src.m_eventType)
+ , m_timeStamp(src.m_timeStamp)
+ , m_id(src.m_id)
+ , m_callbackUserData(src.m_callbackUserData)
+ , m_skipped(src.m_skipped)
+ , m_isCommandEvent(src.m_isCommandEvent)
{
- m_eventType = src.m_eventType;
- m_eventObject = src.m_eventObject;
- m_timeStamp = src.m_timeStamp;
- m_id = src.m_id;
- m_skipped = src.m_skipped;
- m_callbackUserData = src.m_callbackUserData;
- m_isCommandEvent = src.m_isCommandEvent;
}
#if wxUSE_GUI
*/
wxCommandEvent::wxCommandEvent(wxEventType commandType, int theId)
- : wxEvent( theId, commandType )
+ : wxEvent(theId, commandType)
{
m_clientData = (char *) NULL;
m_clientObject = (wxClientData *) NULL;
int id,
int pos,
int orient)
- : wxCommandEvent(commandType, id)
+ : wxCommandEvent(commandType, id)
{
m_extraLong = orient;
m_commandInt = pos;
m_linesPerAction = 0;
}
+void wxMouseEvent::Assign(const wxMouseEvent& event)
+{
+ m_eventType = event.m_eventType;
+
+ m_x = event.m_x;
+ m_y = event.m_y;
+
+ m_leftDown = event.m_leftDown;
+ m_middleDown = event.m_middleDown;
+ m_rightDown = event.m_rightDown;
+
+ m_controlDown = event.m_controlDown;
+ m_shiftDown = event.m_shiftDown;
+ m_altDown = event.m_altDown;
+ m_metaDown = event.m_metaDown;
+
+ m_wheelRotation = event.m_wheelRotation;
+ m_wheelDelta = event.m_wheelDelta;
+ m_linesPerAction = event.m_linesPerAction;
+}
+
// True if was a button dclick event (1 = left, 2 = middle, 3 = right)
// or any button dclick event (but = -1)
bool wxMouseEvent::ButtonDClick(int but) const
m_altDown = FALSE;
m_keyCode = 0;
m_scanCode = 0;
+#if wxUSE_UNICODE
+ m_uniChar = 0;
+#endif
}
+wxKeyEvent::wxKeyEvent(const wxKeyEvent& evt)
+ : wxEvent(evt)
+{
+ m_x = evt.m_x;
+ m_y = evt.m_y;
+
+ m_keyCode = evt.m_keyCode;
+
+ m_controlDown = evt.m_controlDown;
+ m_shiftDown = evt.m_shiftDown;
+ m_altDown = evt.m_altDown;
+ m_metaDown = evt.m_metaDown;
+ m_scanCode = evt.m_scanCode;
+ m_rawCode = evt.m_rawCode;
+ m_rawFlags = evt.m_rawFlags;
+
+#if wxUSE_UNICODE
+ m_uniChar = evt.m_uniChar;
+#endif
+}
+
+long wxKeyEvent::KeyCode() const
+{
+ return m_keyCode;
+}
wxWindowCreateEvent::wxWindowCreateEvent(wxWindow *win)
{
if (m_dynamicEvents)
{
- wxNode *node = m_dynamicEvents->First();
+ wxNode *node = m_dynamicEvents->GetFirst();
while (node)
{
#if WXWIN_COMPATIBILITY_EVENT_TYPES
- wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+ wxEventTableEntry *entry = (wxEventTableEntry*)node->GetData();
#else // !WXWIN_COMPATIBILITY_EVENT_TYPES
- wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)node->Data();
+ wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)node->GetData();
#endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
if (entry->m_callbackUserData)
delete entry->m_callbackUserData;
delete entry;
- node = node->Next();
+ node = node->GetNext();
}
delete m_dynamicEvents;
};
# if !defined(__VISAGECPP__)
delete m_eventsLocker;
# endif
+
+ // Remove us from wxPendingEvents if necessary.
+ if(wxPendingEventsLocker)
+ wxENTER_CRIT_SECT(*wxPendingEventsLocker);
+ if ( wxPendingEvents ) {
+ wxPendingEvents->DeleteObject(this);
+ }
+ if(wxPendingEventsLocker)
+ wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
#endif
// we only delete object data, not untyped
wxENTER_CRIT_SECT( *m_eventsLocker);
#endif
- wxNode *node = m_pendingEvents->First();
+ wxNode *node = m_pendingEvents->GetFirst();
while ( node )
{
- wxEvent *event = (wxEvent *)node->Data();
+ wxEvent *event = (wxEvent *)node->GetData();
delete node;
// In ProcessEvent, new events might get added and
wxENTER_CRIT_SECT( *m_eventsLocker);
#endif
- node = m_pendingEvents->First();
+ node = m_pendingEvents->GetFirst();
}
#if defined(__VISAGECPP__)
info = CLASSINFO(wxWindow);
#endif
- wxASSERT_MSG( m_isWindow == IsKindOf(info),
- wxString(GetClassInfo()->GetClassName()) + _T(" should [not] be a window but it is [not]") );
-#endif
+ if ( m_isWindow != IsKindOf(info) )
+ {
+ wxString msg = GetClassInfo()->GetClassName();
+ msg += _T(" should [not] be a window but it is [not]");
+
+ wxFAIL_MSG( msg );
+ }
+
+#endif // __WXDEBUG__
#endif // wxUSE_GUI
+ // allow the application to hook into event processing
+ if ( wxTheApp )
+ {
+ int rc = wxTheApp->FilterEvent(event);
+ if ( rc != -1 )
+ {
+ wxASSERT_MSG( rc == 1 || rc == 0,
+ _T("unexpected wxApp::FilterEvent return value") );
+
+ return rc != 0;
+ }
+ //else: proceed normally
+ }
+
// An event handler can be enabled or disabled
if ( GetEvtHandlerEnabled() )
{
if (!m_dynamicEvents)
m_dynamicEvents = new wxList;
- m_dynamicEvents->Append( (wxObject*) entry );
+ // Insert at the front of the list so most recent additions are found first
+ m_dynamicEvents->Insert( (wxObject*) entry );
}
bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
if (!m_dynamicEvents)
return FALSE;
- wxNode *node = m_dynamicEvents->First();
+ wxNode *node = m_dynamicEvents->GetFirst();
while (node)
{
#if WXWIN_COMPATIBILITY_EVENT_TYPES
- wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+ wxEventTableEntry *entry = (wxEventTableEntry*)node->GetData();
#else // !WXWIN_COMPATIBILITY_EVENT_TYPES
- wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)node->Data();
+ wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)node->GetData();
#endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
if ((entry->m_id == id) &&
delete entry;
return TRUE;
}
- node = node->Next();
+ node = node->GetNext();
}
return FALSE;
}
int commandId = event.GetId();
- wxNode *node = m_dynamicEvents->First();
+ wxNode *node = m_dynamicEvents->GetFirst();
while (node)
{
#if WXWIN_COMPATIBILITY_EVENT_TYPES
- wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+ wxEventTableEntry *entry = (wxEventTableEntry*)node->GetData();
#else // !WXWIN_COMPATIBILITY_EVENT_TYPES
- wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)node->Data();
+ wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)node->GetData();
#endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
if (entry->m_fn)
(this->*((wxEventFunction) (entry->m_fn)))(event);
- if (event.GetSkipped())
- return FALSE;
- else
+ if ( ! event.GetSkipped() )
return TRUE;
}
}
- node = node->Next();
+ node = node->GetNext();
}
return FALSE;
};