#include "wx/tokenzr.h"
#include "wx/thread.h"
-#if wxUSE_EXCEPTIONS && wxUSE_STL
- #include <exception>
- #include <typeinfo>
-#endif
+#if wxUSE_STL
+ #if wxUSE_EXCEPTIONS
+ #include <exception>
+ #include <typeinfo>
+ #endif
+ #if wxUSE_INTL
+ #include <locale>
+ #endif
+#endif // wxUSE_STL
#if !defined(__WINDOWS__) || defined(__WXMICROWIN__)
#include <signal.h> // for SIGTRAP used by wxTrap()
bool wxAppConsoleBase::Initialize(int& WXUNUSED(argc), wxChar **WXUNUSED(argv))
{
-#if wxUSE_INTL
- GetTraits()->SetLocale();
-#endif // wxUSE_INTL
-
return true;
}
return app ? app->GetTraits() : NULL;
}
+/* static */
+wxAppTraits& wxAppConsoleBase::GetValidTraits()
+{
+ static wxConsoleAppTraits s_traitsConsole;
+ wxAppTraits* const traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
+
+ return traits ? *traits : s_traitsConsole;
+}
+
// ----------------------------------------------------------------------------
// wxEventLoop redirection
// ----------------------------------------------------------------------------
OnAssertFailure(file, line, NULL, cond, msg);
}
+// ----------------------------------------------------------------------------
+// Miscellaneous other methods
+// ----------------------------------------------------------------------------
+
+void wxAppConsoleBase::SetCLocale()
+{
+ // We want to use the user locale by default in GUI applications in order
+ // to show the numbers, dates &c in the familiar format -- and also accept
+ // this format on input (especially important for decimal comma/dot).
+ wxSetlocale(LC_ALL, "");
+}
+
// ============================================================================
// other classes implementations
// ============================================================================
// wxAppTraits
// ----------------------------------------------------------------------------
-#if wxUSE_INTL
-void wxAppTraitsBase::SetLocale()
-{
- wxSetlocale(LC_ALL, "");
- wxUpdateLocaleIsUtf8();
-}
-#endif
-
#if wxUSE_THREADS
void wxMutexGuiEnterImpl();
void wxMutexGuiLeaveImpl();
static const int maxLines = 20;
StackDump dump;
- dump.Walk(2, maxLines); // don't show OnAssert() call itself
+ dump.Walk(8, maxLines); // 8 is chosen to hide all OnAssert() calls
stackTrace = dump.GetStackTrace();
const int count = stackTrace.Freq(wxT('\n'));
#if wxDEBUG_LEVEL
// break into the debugger
+#ifndef wxTrap
+
void wxTrap()
{
#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
#endif // Win/Unix
}
+#endif // wxTrap already defined as a macro
+
// default assert handler
static void
wxDefaultAssertHandler(const wxString& file,
#if wxDEBUG_LEVEL
+bool wxTrapInAssert = false;
+
static
bool DoShowAssertDialog(const wxString& msg)
{
MB_YESNOCANCEL | MB_ICONSTOP ) )
{
case IDYES:
- wxTrap();
+ // If we called wxTrap() directly from here, the programmer would
+ // see this function and a few more calls between his own code and
+ // it in the stack trace which would be perfectly useless and often
+ // confusing. So instead just set the flag here and let the macros
+ // defined in wx/debug.h call wxTrap() themselves, this ensures
+ // that the debugger will show the line in the user code containing
+ // the failing assert.
+ wxTrapInAssert = true;
break;
case IDCANCEL: