]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/event.cpp
finding papersizes allows for 1 mm tolerance
[wxWidgets.git] / src / common / event.cpp
index 6265f0c7de7477a0750f96b43956c242c74e6700..b2dc2e82f46194ef3a014650685b67456f9dec3c 100644 (file)
@@ -5,7 +5,7 @@
 // Modified by:
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Modified by:
 // Created:     01/02/97
 // RCS-ID:      $Id$
-// Copyright:   (c) Julian Smart and Markus Holzem
+// Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -190,6 +190,7 @@ DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEUP)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE)
 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)
 
 // Scroll events from wxWindow
 DEFINE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP)
@@ -386,6 +387,27 @@ wxMouseEvent::wxMouseEvent(wxEventType commandType)
     m_linesPerAction = 0;
 }
 
     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
 // 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
@@ -523,8 +545,36 @@ wxKeyEvent::wxKeyEvent(wxEventType type)
     m_altDown = FALSE;
     m_keyCode = 0;
     m_scanCode = 0;
     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)
 {
 
 wxWindowCreateEvent::wxWindowCreateEvent(wxWindow *win)
 {
@@ -583,19 +633,19 @@ wxEvtHandler::~wxEvtHandler()
 
     if (m_dynamicEvents)
     {
 
     if (m_dynamicEvents)
     {
-        wxNode *node = m_dynamicEvents->First();
+        wxNode *node = m_dynamicEvents->GetFirst();
         while (node)
         {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
         while (node)
         {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
-            wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+            wxEventTableEntry *entry = (wxEventTableEntry*)node->GetData();
 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES
 #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;
 #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;
     };
         }
         delete m_dynamicEvents;
     };
@@ -606,6 +656,15 @@ wxEvtHandler::~wxEvtHandler()
 #  if !defined(__VISAGECPP__)
     delete m_eventsLocker;
 #  endif
 #  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
 #endif
 
     // we only delete object data, not untyped
@@ -680,10 +739,10 @@ void wxEvtHandler::ProcessPendingEvents()
     wxENTER_CRIT_SECT( *m_eventsLocker);
 #endif
 
     wxENTER_CRIT_SECT( *m_eventsLocker);
 #endif
 
-    wxNode *node = m_pendingEvents->First();
+    wxNode *node = m_pendingEvents->GetFirst();
     while ( node )
     {
     while ( node )
     {
-        wxEvent *event = (wxEvent *)node->Data();
+        wxEvent *event = (wxEvent *)node->GetData();
         delete node;
 
         // In ProcessEvent, new events might get added and
         delete node;
 
         // In ProcessEvent, new events might get added and
@@ -701,7 +760,7 @@ void wxEvtHandler::ProcessPendingEvents()
         wxENTER_CRIT_SECT( *m_eventsLocker);
 #endif
 
         wxENTER_CRIT_SECT( *m_eventsLocker);
 #endif
 
-        node = m_pendingEvents->First();
+        node = m_pendingEvents->GetFirst();
     }
 
 #if defined(__VISAGECPP__)
     }
 
 #if defined(__VISAGECPP__)
@@ -936,7 +995,8 @@ void wxEvtHandler::Connect( int id, int lastId,
     if (!m_dynamicEvents)
         m_dynamicEvents = new wxList;
 
     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,
 }
 
 bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
@@ -946,13 +1006,13 @@ bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
     if (!m_dynamicEvents)
         return FALSE;
 
     if (!m_dynamicEvents)
         return FALSE;
 
-    wxNode *node = m_dynamicEvents->First();
+    wxNode *node = m_dynamicEvents->GetFirst();
     while (node)
     {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
     while (node)
     {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
-            wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+            wxEventTableEntry *entry = (wxEventTableEntry*)node->GetData();
 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES
 #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) &&
 #endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
 
         if ((entry->m_id == id) &&
@@ -967,7 +1027,7 @@ bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
             delete entry;
             return TRUE;
         }
             delete entry;
             return TRUE;
         }
-        node = node->Next();
+        node = node->GetNext();
     }
     return FALSE;
 }
     }
     return FALSE;
 }
@@ -979,13 +1039,13 @@ bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
 
     int commandId = event.GetId();
 
 
     int commandId = event.GetId();
 
-    wxNode *node = m_dynamicEvents->First();
+    wxNode *node = m_dynamicEvents->GetFirst();
     while (node)
     {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
     while (node)
     {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
-            wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+            wxEventTableEntry *entry = (wxEventTableEntry*)node->GetData();
 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES
 #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)
 #endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
 
         if (entry->m_fn)
@@ -1002,13 +1062,11 @@ bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
 
                 (this->*((wxEventFunction) (entry->m_fn)))(event);
 
 
                 (this->*((wxEventFunction) (entry->m_fn)))(event);
 
-                if (event.GetSkipped())
-                    return FALSE;
-                else
+                if ( ! event.GetSkipped() )
                     return TRUE;
             }
         }
                     return TRUE;
             }
         }
-        node = node->Next();
+        node = node->GetNext();
     }
     return FALSE;
 };
     }
     return FALSE;
 };