X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/96d38c7e0df2138cff3505dbba7d93111254ba5f..4ff28c37c8201f104df0fffefb8d269bd327d88d:/include/wx/app.h diff --git a/include/wx/app.h b/include/wx/app.h index 02c5aee54d..ef7a14120b 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -18,15 +18,9 @@ // ---------------------------------------------------------------------------- #include "wx/event.h" // for the base class - -#if wxUSE_GUI - #include "wx/window.h" // for wxTopLevelWindows - - #include "wx/vidmode.h" -#endif // wxUSE_GUI - #include "wx/build.h" #include "wx/init.h" // we must declare wxEntry() +#include "wx/intl.h" // for wxLayoutDirection class WXDLLIMPEXP_BASE wxAppConsole; class WXDLLIMPEXP_BASE wxAppTraits; @@ -34,14 +28,9 @@ class WXDLLIMPEXP_BASE wxCmdLineParser; class WXDLLIMPEXP_BASE wxLog; class WXDLLIMPEXP_BASE wxMessageOutput; -// wxUSE_EVTLOOP_IN_APP is a temporary hack needed until all ports are updated -// to use wxEventLoop, otherwise we get linking errors on wxMac, it's going to -// disappear a.s.a.p. -#ifdef __WXMAC__ - #define wxUSE_EVTLOOP_IN_APP 0 -#else - #define wxUSE_EVTLOOP_IN_APP 1 +#if wxUSE_GUI class WXDLLEXPORT wxEventLoop; + struct WXDLLIMPEXP_CORE wxVideoMode; #endif // ---------------------------------------------------------------------------- @@ -116,23 +105,12 @@ public: // crash. virtual void OnFatalException() { } -#if wxUSE_EXCEPTIONS - // function called if an uncaught exception is caught inside the main - // event loop: it may return true to continue running the event loop or - // false to stop it (in the latter case it may rethrow the exception as - // well) - virtual bool OnExceptionInMainLoop(); - - // Called when an unhandled C++ exception occurs inside OnRun(): note that - // the exception type is lost by now, so if you really want to handle the - // exception you should override OnRun() and put a try/catch around - // MainLoop() call there - virtual void OnUnhandledException() { } -#endif // wxUSE_EXCEPTIONS - // Called from wxExit() function, should terminate the application a.s.a.p. virtual void Exit(); + // Return the layout direction for the current locale + virtual wxLayoutDirection GetLayoutDirection() const; + // application info: name, description, vendor // ------------------------------------------- @@ -237,6 +215,12 @@ public: virtual void HandleEvent(wxEvtHandler *handler, wxEventFunction func, wxEvent& event) const; + + // Called when an unhandled C++ exception occurs inside OnRun(): note that + // the exception type is lost by now, so if you really want to handle the + // exception you should override OnRun() and put a try/catch around + // MainLoop() call there or use OnExceptionInMainLoop() + virtual void OnUnhandledException() { } #endif // wxUSE_EXCEPTIONS // process all events in the wxPendingEvents list -- it is necessary to @@ -259,13 +243,22 @@ public: // debugging support // ----------------- +#ifdef __WXDEBUG__ // this function is called when an assert failure occurs, the base class // version does the normal processing (i.e. shows the usual assert failure // dialog box) // - // the arguments are the place where the assert occurred, the text of the + // the arguments are the location of the failed assert (func may be empty + // if the compiler doesn't support C99 __FUNCTION__), the text of the // assert itself and the user-specified message -#ifdef __WXDEBUG__ + virtual void OnAssertFailure(const wxChar *file, + int line, + const wxChar *func, + const wxChar *cond, + const wxChar *msg); + + // old version of the function without func parameter, for compatibility + // only, override OnAssertFailure() in the new code virtual void OnAssert(const wxChar *file, int line, const wxChar *cond, @@ -381,12 +374,8 @@ public: // (already) be dispatched static bool IsMainLoopRunning() { -#if wxUSE_EVTLOOP_IN_APP wxAppBase *app = wx_static_cast(wxAppBase *, GetInstance()); return app && app->m_mainLoop != NULL; -#else - return false; -#endif } // execute the main GUI loop, the function returns when the loop ends @@ -430,8 +419,14 @@ public: // Returns true if more idle time is requested. virtual bool SendIdleEvents(wxWindow* win, wxIdleEvent& event); - // Perform standard OnIdle behaviour: call from port's OnIdle - void OnIdle(wxIdleEvent& event); + +#if wxUSE_EXCEPTIONS + // Function called if an uncaught exception is caught inside the main + // event loop: it may return true to continue running the event loop or + // false to stop it (in the latter case it may rethrow the exception as + // well) + virtual bool OnExceptionInMainLoop(); +#endif // wxUSE_EXCEPTIONS // top level window functions @@ -446,15 +441,7 @@ public: // return the "main" top level window (if it hadn't been set previously // with SetTopWindow(), will return just some top level window and, if // there are none, will return NULL) - virtual wxWindow *GetTopWindow() const - { - if (m_topWindow) - return m_topWindow; - else if (wxTopLevelWindows.GetCount() > 0) - return wxTopLevelWindows.GetFirst()->GetData(); - else - return (wxWindow *)NULL; - } + virtual wxWindow *GetTopWindow() const; // control the exit behaviour: by default, the program will exit the // main loop (and so, usually, terminate) when the last top-level @@ -471,10 +458,10 @@ public: // ------------------------------------------------------------------------ // Get display mode that is used use. This is only used in framebuffer - // wxWin ports (such as wxMGL). - virtual wxVideoMode GetDisplayMode() const { return wxVideoMode(); } + // wxWin ports (such as wxMGL or wxDFB). + virtual wxVideoMode GetDisplayMode() const; // Set display mode to use. This is only used in framebuffer wxWin - // ports (such as wxMGL). This method should be called from + // ports (such as wxMGL or wxDFB). This method should be called from // wxApp::OnInitGui virtual bool SetDisplayMode(const wxVideoMode& WXUNUSED(info)) { return true; } @@ -506,10 +493,15 @@ public: // deactivated virtual void SetActive(bool isActive, wxWindow *lastFocus); +#if WXWIN_COMPATIBILITY_2_6 // OBSOLETE: don't use, always returns true // // returns true if the program is successfully initialized - bool Initialized() { return true; } + wxDEPRECATED( bool Initialized() ); +#endif // WXWIN_COMPATIBILITY_2_6 + + // perform standard OnIdle behaviour, ensure that this is always called + void OnIdle(wxIdleEvent& event); protected: @@ -520,11 +512,9 @@ protected: virtual wxAppTraits *CreateTraits(); -#if wxUSE_EVTLOOP_IN_APP // the main event loop of the application (may be NULL if the loop hasn't // been started yet or has already terminated) wxEventLoop *m_mainLoop; -#endif // wxUSE_EVTLOOP_IN_APP // the main top level window (may be NULL) wxWindow *m_topWindow; @@ -540,17 +530,21 @@ protected: Yes } m_exitOnFrameDelete; - // true if the apps whats to use the best visual on systems where + // true if the app wants to use the best visual on systems where // more than one are available (Sun, SGI, XFree86 4.0 ?) bool m_useBestVisual; - // does any of our windows has focus? + // does any of our windows have focus? bool m_isActive; DECLARE_NO_COPY_CLASS(wxAppBase) }; +#if WXWIN_COMPATIBILITY_2_6 + inline bool wxAppBase::Initialized() { return true; } +#endif // WXWIN_COMPATIBILITY_2_6 + #endif // wxUSE_GUI // ---------------------------------------------------------------------------- @@ -566,8 +560,12 @@ protected: #include "wx/motif/app.h" #elif defined(__WXMGL__) #include "wx/mgl/app.h" - #elif defined(__WXGTK__) + #elif defined(__WXDFB__) + #include "wx/dfb/app.h" + #elif defined(__WXGTK20__) #include "wx/gtk/app.h" + #elif defined(__WXGTK__) + #include "wx/gtk1/app.h" #elif defined(__WXX11__) #include "wx/x11/app.h" #elif defined(__WXMAC__) @@ -595,7 +593,7 @@ protected: // // the cast is safe as in GUI build we only use wxApp, not wxAppConsole, and in // console mode it does nothing at all -#define wxTheApp ((wxApp *)wxApp::GetInstance()) +#define wxTheApp wx_static_cast(wxApp*, wxApp::GetInstance()) // ---------------------------------------------------------------------------- // global functions @@ -635,7 +633,7 @@ public: #define IMPLEMENT_WXWIN_MAIN_CONSOLE \ int main(int argc, char **argv) { return wxEntry(argc, argv); } -// port-specific header could have defined it already in some special wau +// port-specific header could have defined it already in some special way #ifndef IMPLEMENT_WXWIN_MAIN #define IMPLEMENT_WXWIN_MAIN IMPLEMENT_WXWIN_MAIN_CONSOLE #endif // defined(IMPLEMENT_WXWIN_MAIN) @@ -661,7 +659,8 @@ public: } \ wxAppInitializer \ wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ - appname& wxGetApp() { return *(appname *)wxTheApp; } + DECLARE_APP(appname) \ + appname& wxGetApp() { return *wx_static_cast(appname*, wxApp::GetInstance()); } // Same as IMPLEMENT_APP() normally but doesn't include themes support in // wxUniversal builds @@ -684,5 +683,12 @@ public: // function #define DECLARE_APP(appname) extern appname& wxGetApp(); -#endif // _WX_APP_H_BASE_ +// declare the stuff defined by IMPLEMENT_APP() macro, it's not really needed +// anywhere else but at the very least it suppresses icc warnings about +// defining extern symbols without prior declaration, and it shouldn't do any +// harm +extern wxAppConsole *wxCreateApp(); +extern wxAppInitializer wxTheAppInitializer; + +#endif // _WX_APP_H_BASE_