X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/42d11c8e66149da692edaddcffc4c67cfa7ca496..04857cb707be4de8083e599fc2e1967c77eb7f5e:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index ad464891f6..fdf85e5b67 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -17,7 +17,7 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "appbase.h" #endif @@ -40,6 +40,7 @@ #endif #include "wx/apptrait.h" +#include "wx/cmdline.h" #include "wx/msgout.h" #include "wx/thread.h" #include "wx/utils.h" @@ -52,6 +53,10 @@ #include "wx/fontmap.h" #endif // wxUSE_FONTMAP +// DLL options compatibility check: +#include "wx/build.h" +WX_CHECK_BUILD_OPTIONS("wxCore") + // ============================================================================ // wxAppBase implementation // ============================================================================ @@ -128,13 +133,109 @@ void wxAppBase::CleanUp() delete wxPendingEventsLocker; wxPendingEventsLocker = NULL; -#if wxUSE_VALIDATORS - // If we don't do the following, we get an apparent memory leak. - ((wxEvtHandler&) wxDefaultValidator).ClearEventLocker(); -#endif // wxUSE_VALIDATORS + #if wxUSE_VALIDATORS + // If we don't do the following, we get an apparent memory leak. + ((wxEvtHandler&) wxDefaultValidator).ClearEventLocker(); + #endif // wxUSE_VALIDATORS #endif // wxUSE_THREADS } +#if wxUSE_CMDLINE_PARSER + +// ---------------------------------------------------------------------------- +// GUI-specific command line options handling +// ---------------------------------------------------------------------------- + +#define OPTION_THEME _T("theme") +#define OPTION_MODE _T("mode") + +void wxAppBase::OnInitCmdLine(wxCmdLineParser& parser) +{ + // first add the standard non GUI options + wxAppConsole::OnInitCmdLine(parser); + + // the standard command line options + static const wxCmdLineEntryDesc cmdLineGUIDesc[] = + { +#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, + _T(""), + _T(""), + _T(""), + wxCMD_LINE_VAL_NONE, + 0x0 + } + }; + + parser.SetDesc(cmdLineGUIDesc); +} + +bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) +{ +#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 wxAppConsole::OnCmdLineParsed(parser); +} + +#endif // wxUSE_CMDLINE_PARSER + // ---------------------------------------------------------------------------- // OnXXX() hooks // ---------------------------------------------------------------------------- @@ -162,6 +263,15 @@ int wxAppBase::OnRun() return MainLoop(); } +int wxAppBase::OnExit() +{ +#ifdef __WXUNIVERSAL__ + delete wxTheme::Set(NULL); +#endif // __WXUNIVERSAL__ + + return wxAppConsole::OnExit(); +} + void wxAppBase::Exit() { ExitMainLoop(); @@ -260,7 +370,7 @@ bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event) return needMore; } -void wxAppBase::OnIdle(wxIdleEvent& event) +void wxAppBase::OnIdle(wxIdleEvent& WXUNUSED(event)) { // If there are pending events, we must process them: pending events // are either events to the threads other than main or events posted @@ -322,6 +432,12 @@ wxFontMapper *wxGUIAppTraitsBase::CreateFontMapper() #endif // wxUSE_FONTMAP +wxRendererNative *wxGUIAppTraitsBase::CreateRenderer() +{ + // use the default native renderer by default + return NULL; +} + #ifdef __WXDEBUG__ bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg) @@ -381,3 +497,35 @@ void wxGUIAppTraitsBase::RemoveFromPendingDelete(wxObject *object) wxPendingDelete.DeleteObject(object); } +#if wxUSE_SOCKETS + +#if defined(__UNIX__) || defined(__DARWIN__) || defined(__OS2__) + #include "wx/unix/gsockunx.h" +#elif defined(__WINDOWS__) + #include "wx/msw/gsockmsw.h" +#elif defined(__MAC__) + #include "wx/mac/gsockmac.h" +#else + #error "Must include correct GSocket header here" +#endif + +GSocketGUIFunctionsTable* wxGUIAppTraitsBase::GetSocketGUIFunctionsTable() +{ + static GSocketGUIFunctionsTable table = + { + _GSocket_GUI_Init, + _GSocket_GUI_Cleanup, + _GSocket_GUI_Init_Socket, + _GSocket_GUI_Destroy_Socket, +#ifndef __WINDOWS__ + _GSocket_Install_Callback, + _GSocket_Uninstall_Callback, +#endif + _GSocket_Enable_Events, + _GSocket_Disable_Events + }; + return &table; +} + +#endif +