]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/except/except.cpp
Various wxCollapsiblePane enhancements (re-patch 1577412):
[wxWidgets.git] / samples / except / except.cpp
index 7d1c9991eb8f511af40d24194840243f28a0d6a4..256f483637fd5182dd82a202a0ad505303dde866 100644 (file)
@@ -79,7 +79,7 @@ public:
     // program startup
     virtual bool OnInit();
 
-    // 2nd-level exception handling: we get all the exceptions occuring in any
+    // 2nd-level exception handling: we get all the exceptions occurring in any
     // event handler here
     virtual bool OnExceptionInMainLoop();
 
@@ -90,6 +90,15 @@ public:
     // and now for something different: this function is called in case of a
     // crash (e.g. dereferencing null pointer, division by 0, ...)
     virtual void OnFatalException();
+
+#ifdef __WXDEBUG__
+    // in debug mode, you can override this function to do something different
+    // (e.g. log the assert to file) whenever an assertion fails
+    virtual void OnAssert(const wxChar *file,
+                          int line,
+                          const wxChar *cond,
+                          const wxChar *msg);
+#endif // __WXDEBUG__
 };
 
 // Define a new frame type: this is going to be our main frame
@@ -110,12 +119,19 @@ public:
     void OnThrowUnhandled(wxCommandEvent& event);
 
     void OnCrash(wxCommandEvent& event);
+#if wxUSE_ON_FATAL_EXCEPTION
     void OnHandleCrash(wxCommandEvent& event);
+#endif
 
     // 1st-level exception handling: we overload ProcessEvent() to be able to
     // catch exceptions which occur in MyFrame methods here
     virtual bool ProcessEvent(wxEvent& event);
 
+#ifdef __WXDEBUG__
+    // show how an assert failure message box looks like
+    void OnShowAssert(wxCommandEvent& event);
+#endif // __WXDEBUG__
+
 private:
     // any class wishing to process wxWidgets events must use this macro
     DECLARE_EVENT_TABLE()
@@ -161,12 +177,17 @@ class UnhandledException
 enum
 {
     // control ids and menu items
-    Except_ThrowInt = 100,
+    Except_ThrowInt = wxID_HIGHEST,
     Except_ThrowString,
     Except_ThrowObject,
     Except_ThrowUnhandled,
     Except_Crash,
+#if wxUSE_ON_FATAL_EXCEPTION
     Except_HandleCrash,
+#endif // wxUSE_ON_FATAL_EXCEPTION
+#ifdef __WXDEBUG__
+    Except_ShowAssert,
+#endif // __WXDEBUG__
     Except_Dialog,
 
     Except_Quit = wxID_EXIT,
@@ -189,7 +210,12 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(Except_ThrowObject, MyFrame::OnThrowObject)
     EVT_MENU(Except_ThrowUnhandled, MyFrame::OnThrowUnhandled)
     EVT_MENU(Except_Crash, MyFrame::OnCrash)
+#if wxUSE_ON_FATAL_EXCEPTION
     EVT_MENU(Except_HandleCrash, MyFrame::OnHandleCrash)
+#endif // wxUSE_ON_FATAL_EXCEPTION
+#ifdef __WXDEBUG__
+    EVT_MENU(Except_ShowAssert, MyFrame::OnShowAssert)
+#endif // __WXDEBUG__
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(MyDialog, wxDialog)
@@ -271,6 +297,19 @@ void MyApp::OnFatalException()
                  _T("wxExcept Sample"), wxOK | wxICON_ERROR);
 }
 
+#ifdef __WXDEBUG__
+
+void MyApp::OnAssert(const wxChar *file,
+                     int line,
+                     const wxChar *cond,
+                     const wxChar *msg)
+{
+    // we don't have anything special to do here
+    wxApp::OnAssert(file, line, cond, msg);
+}
+
+#endif // __WXDEBUG__
+
 // ============================================================================
 // MyFrame implementation
 // ============================================================================
@@ -295,8 +334,14 @@ MyFrame::MyFrame()
                         _T("Throw &unhandled exception\tCtrl-U"));
     menuFile->Append(Except_Crash, _T("&Crash\tCtrl-C"));
     menuFile->AppendSeparator();
+#if wxUSE_ON_FATAL_EXCEPTION
     menuFile->AppendCheckItem(Except_HandleCrash, _T("&Handle crashes\tCtrl-H"));
     menuFile->AppendSeparator();
+#endif // wxUSE_ON_FATAL_EXCEPTION
+#ifdef __WXDEBUG__
+    menuFile->Append(Except_ShowAssert, _T("Provoke &assert failure\tCtrl-A"));
+    menuFile->AppendSeparator();
+#endif // __WXDEBUG__
     menuFile->Append(Except_Quit, _T("E&xit\tCtrl-Q"), _T("Quit this program"));
 
     wxMenu *helpMenu = new wxMenu;
@@ -380,11 +425,26 @@ void MyFrame::OnCrash(wxCommandEvent& WXUNUSED(event))
     DoCrash();
 }
 
+#if wxUSE_ON_FATAL_EXCEPTION
+
 void MyFrame::OnHandleCrash(wxCommandEvent& event)
 {
     wxHandleFatalExceptions(event.IsChecked());
 }
 
+#endif // wxUSE_ON_FATAL_EXCEPTION
+
+#ifdef __WXDEBUG__
+
+void MyFrame::OnShowAssert(wxCommandEvent& WXUNUSED(event))
+{
+    // provoke an assert from wxArrayString
+    wxArrayString arr;
+    arr[0];
+}
+
+#endif // __WXDEBUG__
+
 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
     wxString msg;