]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appbase.cpp
Build fix.
[wxWidgets.git] / src / common / appbase.cpp
index 1c4d53b480681e9ad0d08a7f228f8ebcf223c436..40706d3aee03a262fed7419bc8da299e89eb8351 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        common/base/appbase.cpp
+// Name:        src/common/appbase.cpp
 // Purpose:     implements wxAppConsole class
 // Author:      Vadim Zeitlin
 // Modified by:
 #endif
 
 #ifndef WX_PRECOMP
+    #ifdef __WXMSW__
+        #include  "wx/msw/wrapwin.h"  // includes windows.h for MessageBox()
+    #endif
+    #include "wx/list.h"
     #include "wx/app.h"
     #include "wx/intl.h"
-    #include "wx/list.h"
     #include "wx/log.h"
+    #include "wx/utils.h"
 #endif //WX_PRECOMP
 
-#include "wx/utils.h"
 #include "wx/apptrait.h"
 #include "wx/cmdline.h"
 #include "wx/confbase.h"
   #include  <signal.h>      // for SIGTRAP used by wxTrap()
 #endif  //Win/Unix
 
-#if defined(__WXMSW__)
-  #include  "wx/msw/wrapwin.h"  // includes windows.h for MessageBox()
-#endif
-
 #if wxUSE_FONTMAP
     #include "wx/fontmap.h"
 #endif // wxUSE_FONTMAP
@@ -93,6 +92,7 @@
     static
     void ShowAssertDialog(const wxChar *szFile,
                           int nLine,
+                          const wxChar *szFunc,
                           const wxChar *szCond,
                           const wxChar *szMsg,
                           wxAppTraits *traits = NULL);
@@ -215,6 +215,24 @@ void wxAppConsole::Exit()
     exit(-1);
 }
 
+wxLayoutDirection wxAppConsole::GetLayoutDirection() const
+{
+#if wxUSE_INTL
+    const wxLocale *const locale = wxGetLocale();
+    if ( locale )
+    {
+        const wxLanguageInfo *const
+            info = wxLocale::GetLanguageInfo(locale->GetLanguage());
+
+        if ( info )
+            return info->LayoutDirection;
+    }
+#endif // wxUSE_INTL
+
+    // we don't know
+    return wxLayout_Default;
+}
+
 // ----------------------------------------------------------------------------
 // traits stuff
 // ----------------------------------------------------------------------------
@@ -268,7 +286,7 @@ void wxAppConsole::ProcessPendingEvents()
     if ( !wxPendingEventsLocker )
         return;
 #endif
-    
+
     // ensure that we're the only thread to modify the pending events list
     wxENTER_CRIT_SECT( *wxPendingEventsLocker );
 
@@ -288,7 +306,7 @@ void wxAppConsole::ProcessPendingEvents()
         // In ProcessPendingEvents(), new handlers might be add
         // and we can safely leave the critical section here.
         wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
-        
+
         handler->ProcessPendingEvents();
 
         wxENTER_CRIT_SECT( *wxPendingEventsLocker );
@@ -434,12 +452,21 @@ bool wxAppConsole::CheckBuildOptions(const char *optionsSignature,
 
 #ifdef __WXDEBUG__
 
+void wxAppConsole::OnAssertFailure(const wxChar *file,
+                                   int line,
+                                   const wxChar *func,
+                                   const wxChar *cond,
+                                   const wxChar *msg)
+{
+    ShowAssertDialog(file, line, func, cond, msg, GetTraits());
+}
+
 void wxAppConsole::OnAssert(const wxChar *file,
                             int line,
                             const wxChar *cond,
                             const wxChar *msg)
 {
-    ShowAssertDialog(file, line, cond, msg, GetTraits());
+    OnAssertFailure(file, line, NULL, cond, msg);
 }
 
 #endif // __WXDEBUG__
@@ -590,6 +617,7 @@ void wxTrap()
 // this function is called when an assert fails
 void wxOnAssert(const wxChar *szFile,
                 int nLine,
+                const char *szFunc,
                 const wxChar *szCond,
                 const wxChar *szMsg)
 {
@@ -608,16 +636,19 @@ void wxOnAssert(const wxChar *szFile,
 
     s_bInAssert = true;
 
+    // __FUNCTION__ is always in ASCII, convert it to wide char if needed
+    const wxString strFunc = wxString::FromAscii(szFunc);
+
     if ( !wxTheApp )
     {
         // by default, show the assert dialog box -- we can't customize this
         // behaviour
-        ShowAssertDialog(szFile, nLine, szCond, szMsg);
+        ShowAssertDialog(szFile, nLine, strFunc, szCond, szMsg);
     }
     else
     {
         // let the app process it as it wants
-        wxTheApp->OnAssert(szFile, nLine, szCond, szMsg);
+        wxTheApp->OnAssertFailure(szFile, nLine, strFunc, szCond, szMsg);
     }
 
     s_bInAssert = false;
@@ -728,7 +759,7 @@ static wxString GetAssertStackTrace()
     };
 
     StackDump dump;
-    dump.Walk(5); // don't show OnAssert() call itself
+    dump.Walk(2); // don't show OnAssert() call itself
     stackTrace = dump.GetStackTrace();
 
     // don't show more than maxLines or we could get a dialog too tall to be
@@ -747,6 +778,7 @@ static wxString GetAssertStackTrace()
 static
 void ShowAssertDialog(const wxChar *szFile,
                       int nLine,
+                      const wxChar *szFunc,
                       const wxChar *szCond,
                       const wxChar *szMsg,
                       wxAppTraits *traits)
@@ -762,6 +794,11 @@ void ShowAssertDialog(const wxChar *szFile,
     // the failed assert
     msg.Printf(wxT("%s(%d): assert \"%s\" failed"), szFile, nLine, szCond);
 
+    // add the function name, if any
+    if ( szFunc && *szFunc )
+        msg << _T(" in ") << szFunc << _T("()");
+
+    // and the message itself
     if ( szMsg )
     {
         msg << _T(": ") << szMsg;
@@ -819,4 +856,3 @@ void ShowAssertDialog(const wxChar *szFile,
 }
 
 #endif // __WXDEBUG__
-