]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/event.cpp
Changed the "delete win" to the more proper "win->Destroy()" in
[wxWidgets.git] / src / common / event.cpp
index 25e3750a39221deb3f465bad3831c6add3572a4a..402ee199c2ee9578d5b14cc34468f11b8090eb75 100644 (file)
@@ -35,6 +35,7 @@
 IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject)
 IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject)
 IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject)
 IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject)
 IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxNotifyEvent, wxCommandEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxMouseEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxKeyEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxMouseEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxKeyEvent, wxEvent)
@@ -54,14 +55,24 @@ IMPLEMENT_DYNAMIC_CLASS(wxActivateEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxInitDialogEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxSysColourChangedEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxInitDialogEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxSysColourChangedEvent, wxEvent)
 IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
-IMPLEMENT_DYNAMIC_CLASS(wxUpdateUIEvent, wxEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxUpdateUIEvent, wxCommandEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxNavigationKeyEvent, wxCommandEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxPaletteChangedEvent, wxEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxQueryNewPaletteEvent, wxEvent)
 
 const wxEventTable *wxEvtHandler::GetEventTable() const { return &wxEvtHandler::sm_eventTable; }
 
 const wxEventTable wxEvtHandler::sm_eventTable =
 
 const wxEventTable *wxEvtHandler::GetEventTable() const { return &wxEvtHandler::sm_eventTable; }
 
 const wxEventTable wxEvtHandler::sm_eventTable =
-       { NULL, &wxEvtHandler::sm_eventTableEntries[0] };
-
-const wxEventTableEntry wxEvtHandler::sm_eventTableEntries[] = { { 0, 0, 0, NULL } };
+       { (const wxEventTable *) NULL, &wxEvtHandler::sm_eventTableEntries[0] };
+
+const wxEventTableEntry wxEvtHandler::sm_eventTableEntries[] = { { 0, 0, 0,
+#ifdef __SGI_CC__
+// stupid SGI compiler --- offer aug 98
+       0L }
+#else 
+       NULL }
+#endif 
+};
 
 #endif
 
 
 #endif
 
@@ -76,13 +87,13 @@ const wxEventTableEntry wxEvtHandler::sm_eventTableEntries[] = { { 0, 0, 0, NULL
 
 wxEvent::wxEvent(int theId)
 {
 
 wxEvent::wxEvent(int theId)
 {
-  m_eventType = 0;
-  m_eventObject = NULL;
-  m_eventHandle = NULL;
+  m_eventType = wxEVT_NULL;
+  m_eventObject = (wxObject *) NULL;
+  m_eventHandle = (char *) NULL;
   m_timeStamp = 0;
   m_id = theId;
   m_skipped = FALSE;
   m_timeStamp = 0;
   m_id = theId;
   m_skipped = FALSE;
-  m_callbackUserData = NULL;
+  m_callbackUserData = (wxObject *) NULL;
 }
 
 /*
 }
 
 /*
@@ -90,21 +101,22 @@ wxEvent::wxEvent(int theId)
  *
  */
 
  *
  */
 
-wxCommandEvent::wxCommandEvent(WXTYPE commandType, int theId)
+wxCommandEvent::wxCommandEvent(wxEventType commandType, int theId)
 {
   m_eventType = commandType;
 {
   m_eventType = commandType;
-  m_clientData = NULL;
+  m_clientData = (char *) NULL;
+  m_clientObject = (wxClientData *) NULL;
   m_extraLong = 0;
   m_commandInt = 0;
   m_id = theId;
   m_extraLong = 0;
   m_commandInt = 0;
   m_id = theId;
-  m_commandString = NULL;
+  m_commandString = (char *) NULL;
 }
 
 /*
  * Scroll events
  */
 
 }
 
 /*
  * Scroll events
  */
 
-wxScrollEvent::wxScrollEvent(WXTYPE commandType, int id, int pos, int orient):
+wxScrollEvent::wxScrollEvent(wxEventType commandType, int id, int pos, int orient):
   wxCommandEvent(commandType, id)
 {
   m_extraLong = orient;
   wxCommandEvent(commandType, id)
 {
   m_extraLong = orient;
@@ -117,13 +129,18 @@ wxScrollEvent::wxScrollEvent(WXTYPE commandType, int id, int pos, int orient):
  *
  */
 
  *
  */
 
-wxMouseEvent::wxMouseEvent(WXTYPE commandType)
+wxMouseEvent::wxMouseEvent(wxEventType commandType)
 {
   m_eventType = commandType;
   m_metaDown = FALSE;
   m_altDown = FALSE;
   m_controlDown = FALSE;
   m_shiftDown = FALSE;
 {
   m_eventType = commandType;
   m_metaDown = FALSE;
   m_altDown = FALSE;
   m_controlDown = FALSE;
   m_shiftDown = FALSE;
+  m_leftDown = FALSE;
+  m_rightDown = FALSE;
+  m_middleDown = FALSE;
+  m_x = 0;
+  m_y = 0;
 }
 
 // True if was a button dclick event (1 = left, 2 = middle, 3 = right)
 }
 
 // True if was a button dclick event (1 = left, 2 = middle, 3 = right)
@@ -221,8 +238,8 @@ bool wxMouseEvent::ButtonIsDown(int but) const
 // Find the logical position of the event given the DC
 wxPoint wxMouseEvent::GetLogicalPosition(const wxDC& dc) const
 {
 // Find the logical position of the event given the DC
 wxPoint wxMouseEvent::GetLogicalPosition(const wxDC& dc) const
 {
-       wxPoint pt(dc.DeviceToLogicalX(m_x), dc.DeviceToLogicalY(m_y));
-       return pt;
+    wxPoint pt(dc.DeviceToLogicalX(m_x), dc.DeviceToLogicalY(m_y));
+    return pt;
 }
 
 
 }
 
 
@@ -231,7 +248,7 @@ wxPoint wxMouseEvent::GetLogicalPosition(const wxDC& dc) const
  *
  */
 
  *
  */
 
-wxKeyEvent::wxKeyEvent(WXTYPE type)
+wxKeyEvent::wxKeyEvent(wxEventType type)
 {
   m_eventType = type;
   m_shiftDown = FALSE;
 {
   m_eventType = type;
   m_shiftDown = FALSE;
@@ -247,11 +264,10 @@ wxKeyEvent::wxKeyEvent(WXTYPE type)
 
 wxEvtHandler::wxEvtHandler(void)
 {
 
 wxEvtHandler::wxEvtHandler(void)
 {
-  m_clientData = NULL;
-  m_nextHandler = NULL;
-  m_previousHandler = NULL;
+  m_nextHandler = (wxEvtHandler *) NULL;
+  m_previousHandler = (wxEvtHandler *) NULL;
   m_enabled = TRUE;
   m_enabled = TRUE;
-  m_dynamicEvents = NULL;
+  m_dynamicEvents = (wxList *) NULL;
 }
 
 wxEvtHandler::~wxEvtHandler(void)
 }
 
 wxEvtHandler::~wxEvtHandler(void)
@@ -269,6 +285,7 @@ wxEvtHandler::~wxEvtHandler(void)
     while (node)
     {
       wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
     while (node)
     {
       wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+      if (entry->m_callbackUserData) delete entry->m_callbackUserData;
       delete entry;
       node = node->Next();
     }
       delete entry;
       node = node->Next();
     }
@@ -303,14 +320,14 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event)
     // chain of event handlers.
     if (IsKindOf(CLASSINFO(wxWindow)))
     {
     // chain of event handlers.
     if (IsKindOf(CLASSINFO(wxWindow)))
     {
-         wxWindow *win = (wxWindow *)this;
-
-         // Can only use the validator of the window which
-         // is receiving the event
-         if ( (win == event.GetEventObject()) &&
-             win->GetValidator() &&
-                 win->GetValidator()->ProcessEvent(event))
-               return TRUE;
+        wxWindow *win = (wxWindow *)this;
+
+      // Can only use the validator of the window which
+      // is receiving the event
+      if ( (win == event.GetEventObject()) &&
+          win->GetValidator() &&
+          win->GetValidator()->ProcessEvent(event))
+            return TRUE;
     }
 
     // Search upwards through the inheritance hierarchy
     }
 
     // Search upwards through the inheritance hierarchy
@@ -325,8 +342,8 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event)
   // Try going down the event handler chain
   if ( GetNextHandler() )
   {
   // Try going down the event handler chain
   if ( GetNextHandler() )
   {
-           if ( GetNextHandler()->ProcessEvent(event) )
-                       return TRUE;
+        if ( GetNextHandler()->ProcessEvent(event) )
+            return TRUE;
   }
 
   // Carry on up the parent-child hierarchy,
   }
 
   // Carry on up the parent-child hierarchy,
@@ -335,13 +352,16 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event)
   if (IsKindOf(CLASSINFO(wxWindow)) && event.IsKindOf(CLASSINFO(wxCommandEvent)))
   {
     wxWindow *win = (wxWindow *)this;
   if (IsKindOf(CLASSINFO(wxWindow)) && event.IsKindOf(CLASSINFO(wxCommandEvent)))
   {
     wxWindow *win = (wxWindow *)this;
-       wxWindow *parent = win->GetParent();
+    wxWindow *parent = win->GetParent();
     if (parent && !parent->IsBeingDeleted())
       return win->GetParent()->GetEventHandler()->ProcessEvent(event);
   }
 
     if (parent && !parent->IsBeingDeleted())
       return win->GetParent()->GetEventHandler()->ProcessEvent(event);
   }
 
-  // Last try - application object
-  if (wxTheApp && this != wxTheApp && wxTheApp->ProcessEvent(event))
+  // Last try - application object.
+  // Special case: don't pass wxEVT_IDLE to wxApp, since it'll always swallow it.
+  // wxEVT_IDLE is sent explicitly to wxApp so it will be processed appropriately
+  // via SearchEventTable.
+  if (wxTheApp && this != wxTheApp && (event.GetEventType() != wxEVT_IDLE) && wxTheApp->ProcessEvent(event))
     return TRUE;
   else
     return FALSE;
     return TRUE;
   else
     return FALSE;
@@ -351,8 +371,10 @@ bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event)
 {
   int i = 0;
   int commandId = event.GetId();
 {
   int i = 0;
   int commandId = event.GetId();
-  
-  while (table.entries[i].m_fn != NULL)
+
+  // BC++ doesn't like while (table.entries[i].m_fn)
+
+  while (table.entries[i].m_fn != 0L)
   {
     if ((event.GetEventType() == table.entries[i].m_eventType) &&
         (table.entries[i].m_id == -1 || // Match, if event spec says any id will do (id == -1)
   {
     if ((event.GetEventType() == table.entries[i].m_eventType) &&
         (table.entries[i].m_id == -1 || // Match, if event spec says any id will do (id == -1)
@@ -360,14 +382,14 @@ bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event)
           (table.entries[i].m_lastId != -1 &&
             (commandId >= table.entries[i].m_id && commandId <= table.entries[i].m_lastId))))
     {
           (table.entries[i].m_lastId != -1 &&
             (commandId >= table.entries[i].m_id && commandId <= table.entries[i].m_lastId))))
     {
-               event.Skip(FALSE);
+          event.Skip(FALSE);
                 event.m_callbackUserData = table.entries[i].m_callbackUserData;
                 event.m_callbackUserData = table.entries[i].m_callbackUserData;
-       
+    
         (this->*((wxEventFunction) (table.entries[i].m_fn)))(event);
 
         (this->*((wxEventFunction) (table.entries[i].m_fn)))(event);
 
-               if ( event.GetSkipped() )
-                       return FALSE;
-                 else
+        if ( event.GetSkipped() )
+            return FALSE;
+          else
             return TRUE;
     }
     i ++;
             return TRUE;
     }
     i ++;
@@ -375,10 +397,10 @@ bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event)
   return FALSE;
 }
 
   return FALSE;
 }
 
-void wxEvtHandler::Connect( const int id, const int lastId,
-                            const int eventType, 
-                           wxObjectEventFunction func,
-                           wxObject *userData )
+void wxEvtHandler::Connect( int id, int lastId,
+                            int eventType,
+                    wxObjectEventFunction func,
+                    wxObject *userData )
 {
   wxEventTableEntry *entry = new wxEventTableEntry;
   entry->m_id = id;
 {
   wxEventTableEntry *entry = new wxEventTableEntry;
   entry->m_id = id;
@@ -398,11 +420,12 @@ bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
   if (!m_dynamicEvents) return FALSE;
   
   int commandId = event.GetId();
   if (!m_dynamicEvents) return FALSE;
   
   int commandId = event.GetId();
-  
+
   wxNode *node = m_dynamicEvents->First();
   while (node)
   {
     wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
   wxNode *node = m_dynamicEvents->First();
   while (node)
   {
     wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+    
     if (entry->m_fn)
     {
     if ((event.GetEventType() == entry->m_eventType) &&
     if (entry->m_fn)
     {
     if ((event.GetEventType() == entry->m_eventType) &&
@@ -411,101 +434,22 @@ bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
         (entry->m_lastId != -1 &&
         (commandId >= entry->m_id && commandId <= entry->m_lastId))))
        {
         (entry->m_lastId != -1 &&
         (commandId >= entry->m_id && commandId <= entry->m_lastId))))
        {
-         event.Skip(FALSE);
+      event.Skip(FALSE);
           event.m_callbackUserData = entry->m_callbackUserData;
           event.m_callbackUserData = entry->m_callbackUserData;
-       
+    
           (this->*((wxEventFunction) (entry->m_fn)))(event);
 
           (this->*((wxEventFunction) (entry->m_fn)))(event);
 
-         if (event.GetSkipped()) 
-           return FALSE;
-         else
+      if (event.GetSkipped()) 
+        return FALSE;
+      else
             return TRUE;
        }
             return TRUE;
        }
-    };
+    }
     node = node->Next();
   }
   return FALSE;
 };
 
     node = node->Next();
   }
   return FALSE;
 };
 
-#if WXWIN_COMPATIBILITY
-void wxEvtHandler::OldOnMenuCommand(int cmd)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnMenuCommand(cmd);
-}
-
-void wxEvtHandler::OldOnMenuSelect(int cmd)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnMenuSelect(cmd);
-}
-
-void wxEvtHandler::OldOnInitMenuPopup(int pos)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnInitMenuPopup(pos);
-}
-
-void wxEvtHandler::OldOnScroll(wxCommandEvent& event)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnScroll(event);
-}
-
-void wxEvtHandler::OldOnPaint(void)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnPaint();
-}
-void wxEvtHandler::OldOnSize(int width, int height)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnSize(width, height);
-}
-
-void wxEvtHandler::OldOnMove(int x, int y)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnMove(x, y);
-}
-
-void wxEvtHandler::OldOnMouseEvent(wxMouseEvent& event)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnMouseEvent(event);
-}
-
-void wxEvtHandler::OldOnChar(wxKeyEvent& event)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnChar(event);
-}
-
-// Under Windows, we can intercept character input per dialog or frame
-bool wxEvtHandler::OldOnCharHook(wxKeyEvent& event)
-{
-    if (GetNextHandler()) return GetNextHandler()->OldOnCharHook(event);
-       else return FALSE;
-}
-
-void wxEvtHandler::OldOnActivate(bool active)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnActivate(active);
-}
-
-void wxEvtHandler::OldOnSetFocus(void)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnSetFocus();
-}
-
-void wxEvtHandler::OldOnKillFocus(void)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnKillFocus();
-}
-
-bool wxEvtHandler::OldOnSysColourChange(void)
-{
-    if (GetNextHandler()) return GetNextHandler()->OldOnSysColourChange();
-    return FALSE;
-}
-
-void wxEvtHandler::OldOnDropFiles(int n, char *files[], int x, int y)
-{
-    if (GetNextHandler()) GetNextHandler()->OldOnDropFiles(n, files, x, y);
-}
-#endif
-
 bool wxEvtHandler::OnClose(void)
 {
     if (GetNextHandler()) return GetNextHandler()->OnClose();
 bool wxEvtHandler::OnClose(void)
 {
     if (GetNextHandler()) return GetNextHandler()->OnClose();