X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/05e2b077c6187ff4d894e4af58ccd99536c9c584..56b9925b116dfa58028fccb2556852f2da2ab9ac:/src/common/appbase.cpp diff --git a/src/common/appbase.cpp b/src/common/appbase.cpp index f3a5e7460b..706c1c97c8 100644 --- a/src/common/appbase.cpp +++ b/src/common/appbase.cpp @@ -33,15 +33,11 @@ #endif // wxUSE_LOG #endif //WX_PRECOMP +#include "wx/utils.h" #include "wx/apptrait.h" #include "wx/cmdline.h" #include "wx/confbase.h" -#if wxUSE_FILENAME - #include "wx/filename.h" -#endif // wxUSE_FILENAME -#if wxUSE_FONTMAP - #include "wx/fontmap.h" -#endif // wxUSE_FONTMAP +#include "wx/filename.h" #include "wx/msgout.h" #include "wx/tokenzr.h" @@ -53,6 +49,10 @@ #include "wx/msw/private.h" // includes windows.h for MessageBox() #endif +#if wxUSE_FONTMAP + #include "wx/fontmap.h" +#endif // wxUSE_FONTMAP + #if defined(__WXMAC__) // VZ: MacTypes.h is enough under Mac OS X (where I could test it) but // I don't know which headers are needed under earlier systems so @@ -89,7 +89,7 @@ // global vars // ---------------------------------------------------------------------------- -wxApp *wxTheApp = NULL; +wxAppConsole *wxAppConsole::ms_appInstance = NULL; wxAppInitializerFunction wxAppConsole::ms_appInitFn = NULL; @@ -105,7 +105,7 @@ wxAppConsole::wxAppConsole() { m_traits = NULL; - wxTheApp = (wxApp *)this; + ms_appInstance = this; #ifdef __WXDEBUG__ SetTraceMasks(); @@ -127,14 +127,10 @@ bool wxAppConsole::Initialize(int& argc, wxChar **argv) this->argc = argc; this->argv = argv; - if ( m_appName.empty() ) + if ( m_appName.empty() && argv ) { // the application name is, by default, the name of its executable file -#if wxUSE_FILENAME wxFileName::SplitPath(argv[0], NULL, &m_appName, NULL); -#else // !wxUSE_FILENAME - m_appName = argv[0]; -#endif // wxUSE_FILENAME/!wxUSE_FILENAME } return true; @@ -186,10 +182,6 @@ int wxAppConsole::OnExit() delete wxConfigBase::Set((wxConfigBase *) NULL); #endif // wxUSE_CONFIG -#ifdef __WXUNIVERSAL__ - delete wxTheme::Set(NULL); -#endif // __WXUNIVERSAL__ - // use Set(NULL) and not Get() to avoid creating a message output object on // demand when we just want to delete it delete wxMessageOutput::Set(NULL); @@ -208,7 +200,7 @@ void wxAppConsole::Exit() wxAppTraits *wxAppConsole::CreateTraits() { - return wxAppTraits::CreateConsole(); + return new wxConsoleAppTraits; } wxAppTraits *wxAppConsole::GetTraits() @@ -261,11 +253,11 @@ void wxAppConsole::ProcessPendingEvents() } // iterate until the list becomes empty - wxNode *node = wxPendingEvents->GetFirst(); + wxList::compatibility_iterator node = wxPendingEvents->GetFirst(); while (node) { wxEvtHandler *handler = (wxEvtHandler *)node->GetData(); - delete node; + wxPendingEvents->Erase(node); // In ProcessPendingEvents(), new handlers might be add // and we can safely leave the critical section here. @@ -285,6 +277,19 @@ int wxAppConsole::FilterEvent(wxEvent& WXUNUSED(event)) return -1; } +#if wxUSE_EXCEPTIONS + +void +wxAppConsole::HandleEvent(wxEvtHandler *handler, + wxEventFunction func, + wxEvent& event) const +{ + // by default, simply call the handler + (handler->*func)(event); +} + +#endif // wxUSE_EXCEPTIONS + // ---------------------------------------------------------------------------- // cmd line parsing // ---------------------------------------------------------------------------- @@ -292,8 +297,6 @@ int wxAppConsole::FilterEvent(wxEvent& WXUNUSED(event)) #if wxUSE_CMDLINE_PARSER #define OPTION_VERBOSE _T("verbose") -#define OPTION_THEME _T("theme") -#define OPTION_MODE _T("mode") void wxAppConsole::OnInitCmdLine(wxCmdLineParser& parser) { @@ -320,31 +323,6 @@ void wxAppConsole::OnInitCmdLine(wxCmdLineParser& parser) }, #endif // wxUSE_LOG -#ifdef __WXUNIVERSAL__ - { - wxCMD_LINE_OPTION, - _T(""), - OPTION_THEME, - gettext_noop("specify the theme to use"), - wxCMD_LINE_VAL_STRING, - 0x0 - }, -#endif // __WXUNIVERSAL__ - -#if defined(__WXMGL__) - // VS: this is not specific to wxMGL, all fullscreen (framebuffer) ports - // should provide this option. That's why it is in common/appcmn.cpp - // and not mgl/app.cpp - { - wxCMD_LINE_OPTION, - _T(""), - OPTION_MODE, - gettext_noop("specify display mode to use (e.g. 640x480-16)"), - wxCMD_LINE_VAL_STRING, - 0x0 - }, -#endif // __WXMGL__ - // terminator { wxCMD_LINE_NONE, @@ -368,39 +346,6 @@ bool wxAppConsole::OnCmdLineParsed(wxCmdLineParser& parser) } #endif // wxUSE_LOG -#ifdef __WXUNIVERSAL__ - wxString themeName; - if ( parser.Found(OPTION_THEME, &themeName) ) - { - wxTheme *theme = wxTheme::Create(themeName); - if ( !theme ) - { - wxLogError(_("Unsupported theme '%s'."), themeName.c_str()); - return FALSE; - } - - // Delete the defaultly created theme and set the new theme. - delete wxTheme::Get(); - wxTheme::Set(theme); - } -#endif // __WXUNIVERSAL__ - -#if defined(__WXMGL__) - wxString modeDesc; - if ( parser.Found(OPTION_MODE, &modeDesc) ) - { - unsigned w, h, bpp; - if ( wxSscanf(modeDesc.c_str(), _T("%ux%u-%u"), &w, &h, &bpp) != 3 ) - { - wxLogError(_("Invalid display mode specification '%s'."), modeDesc.c_str()); - return FALSE; - } - - if ( !SetDisplayMode(wxDisplayModeInfo(w, h, bpp)) ) - return FALSE; - } -#endif // __WXMGL__ - return TRUE; } @@ -425,38 +370,24 @@ bool wxAppConsole::OnCmdLineError(wxCmdLineParser& parser) // ---------------------------------------------------------------------------- /* static */ -bool wxAppConsole::CheckBuildOptions(const wxBuildOptions& opts) +bool wxAppConsole::CheckBuildOptions(const char *optionsSignature, + const char *componentName) { -#define wxCMP(what) (what == opts.m_ ## what) - - bool -#ifdef __WXDEBUG__ - isDebug = TRUE; -#else - isDebug = FALSE; +#if 0 // can't use wxLogTrace, not up and running yet + printf("checking build options object '%s' (ptr %p) in '%s'\n", + optionsSignature, optionsSignature, componentName); #endif - int verMaj = wxMAJOR_VERSION, - verMin = wxMINOR_VERSION; - - if ( !(wxCMP(isDebug) && wxCMP(verMaj) && wxCMP(verMin)) ) + if ( strcmp(optionsSignature, WX_BUILD_OPTIONS_SIGNATURE) != 0 ) { + wxString lib = wxString::FromAscii(WX_BUILD_OPTIONS_SIGNATURE); + wxString prog = wxString::FromAscii(optionsSignature); + wxString progName = wxString::FromAscii(componentName); wxString msg; - wxString libDebug, progDebug; - - if (isDebug) - libDebug = wxT("debug"); - else - libDebug = wxT("no debug"); - - if (opts.m_isDebug) - progDebug = wxT("debug"); - else - progDebug = wxT("no debug"); - - msg.Printf(_T("Mismatch between the program and library build versions detected.\nThe library used %d.%d (%s), and your program used %d.%d (%s)."), - verMaj, verMin, libDebug.c_str(), opts.m_verMaj, opts.m_verMin, progDebug.c_str()); - + + msg.Printf(_T("Mismatch between the program and library build versions detected.\nThe library used %s,\nand %s used %s."), + lib.c_str(), progName.c_str(), prog.c_str()); + wxLogFatalError(msg); // normally wxLogFatalError doesn't return @@ -474,7 +405,7 @@ void wxAppConsole::OnAssert(const wxChar *file, const wxChar *cond, const wxChar *msg) { - ShowAssertDialog(file, line, cond, msg, m_traits); + ShowAssertDialog(file, line, cond, msg, GetTraits()); } #endif // __WXDEBUG__ @@ -510,6 +441,12 @@ wxFontMapper *wxConsoleAppTraitsBase::CreateFontMapper() #endif // wxUSE_FONTMAP +wxRendererNative *wxConsoleAppTraitsBase::CreateRenderer() +{ + // console applications don't use renderers + return NULL; +} + #ifdef __WXDEBUG__ bool wxConsoleAppTraitsBase::ShowAssertDialog(const wxString& msg) { @@ -533,6 +470,13 @@ void wxConsoleAppTraitsBase::RemoveFromPendingDelete(wxObject * WXUNUSED(object) // nothing to do } +#if wxUSE_SOCKETS +GSocketGUIFunctionsTable* wxConsoleAppTraitsBase::GetSocketGUIFunctionsTable() +{ + return NULL; +} +#endif + // ---------------------------------------------------------------------------- // wxAppTraits // ---------------------------------------------------------------------------- @@ -546,11 +490,6 @@ bool wxAppTraitsBase::ShowAssertDialog(const wxString& msg) #endif // __WXDEBUG__ -wxAppTraits *wxAppTraitsBase::CreateConsole() -{ - return new wxConsoleAppTraits; -} - // ============================================================================ // global functions implementation // ============================================================================ @@ -607,7 +546,7 @@ void wxAssert(int cond, const wxChar *szFile, int nLine, const wxChar *szCond, - const wxChar *szMsg) + const wxChar *szMsg) { if ( !cond ) wxOnAssert(szFile, nLine, szCond, szMsg); @@ -758,7 +697,7 @@ void ShowAssertDialog(const wxChar *szFile, if ( !s_bNoAsserts ) { // send it to the normal log destination - wxLogDebug(_T("%s"), msg); + wxLogDebug(_T("%s"), msg.c_str()); if ( traits ) {