X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/be52b34172dede7460990c54b9f7e2dad3a6f876..3e2d47e1a96977aa31c8af18f96e9363000f3ca5:/include/wx/app.h diff --git a/include/wx/app.h b/include/wx/app.h index 489194ab3b..f9474bed5b 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -13,26 +13,10 @@ #ifndef _WX_APP_H_BASE_ #define _WX_APP_H_BASE_ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "appbase.h" #endif -// ---------------------------------------------------------------------------- -// typedefs -// ---------------------------------------------------------------------------- - -#if (defined(__WXMSW__) && !defined(__WXMICROWIN__)) || defined (__WXPM__) - class WXDLLEXPORT wxApp; - typedef wxApp* (*wxAppInitializerFunction)(); -#else - // returning wxApp* won't work with gcc - #include "wx/object.h" - - typedef wxObject* (*wxAppInitializerFunction)(); -#endif - -class WXDLLEXPORT wxCmdLineParser; - // ---------------------------------------------------------------------------- // headers we have to include here // ---------------------------------------------------------------------------- @@ -43,16 +27,24 @@ class WXDLLEXPORT wxCmdLineParser; #include "wx/window.h" // for wxTopLevelWindows #endif // wxUSE_GUI -#if wxUSE_LOG - #include "wx/log.h" -#endif - #if WXWIN_COMPATIBILITY_2_2 #include "wx/icon.h" #endif #include "wx/build.h" +class WXDLLEXPORT wxApp; +class WXDLLEXPORT wxCmdLineParser; +class WXDLLEXPORT wxLog; +class WXDLLEXPORT wxMessageOutput; + +// ---------------------------------------------------------------------------- +// typedefs +// ---------------------------------------------------------------------------- + +// the type of the function used to create a wxApp object on program start up +typedef wxApp* (*wxAppInitializerFunction)(); + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -72,9 +64,9 @@ class WXDLLEXPORT wxDisplayModeInfo { public: wxDisplayModeInfo() : m_ok(FALSE) {} - wxDisplayModeInfo(unsigned width, unsigned height, unsigned depth) + wxDisplayModeInfo(unsigned width, unsigned height, unsigned depth) : m_width(width), m_height(height), m_depth(depth), m_ok(TRUE) {} - + unsigned GetWidth() const { return m_width; } unsigned GetHeight() const { return m_height; } unsigned GetDepth() const { return m_depth; } @@ -93,7 +85,7 @@ private: class WXDLLEXPORT wxAppBase : public wxEvtHandler { DECLARE_NO_COPY_CLASS(wxAppBase) - + public: wxAppBase(); virtual ~wxAppBase(); @@ -124,7 +116,7 @@ public: // // Override: rarely in GUI applications, always in console ones. #if wxUSE_GUI - virtual int OnRun() { return MainLoop(); }; + virtual int OnRun(); #else // !GUI virtual int OnRun() = 0; #endif // wxUSE_GUI @@ -178,6 +170,13 @@ public: // may result in calling the same event handler again), use // with _extreme_ care or, better, don't use at all! virtual bool Yield(bool onlyIfNeeded = FALSE) = 0; + + // this virtual function is called in the GUI mode when the application + // becomes idle and normally just sends wxIdleEvent to all interested + // parties + // + // it should return TRUE if more idle events are needed, FALSE if not + virtual bool ProcessIdle() = 0; #endif // wxUSE_GUI // application info: name, description, vendor @@ -230,11 +229,13 @@ public: // control the exit behaviour: by default, the program will exit the // main loop (and so, usually, terminate) when the last top-level - // program window is deleted. Beware that if you disabel this (with - // SetExitOnFrameDelete(FALSE)), you'll have to call ExitMainLoop() - // explicitly from somewhere. - void SetExitOnFrameDelete(bool flag) { m_exitOnFrameDelete = flag; } - bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; } + // program window is deleted. Beware that if you disable this behaviour + // (with SetExitOnFrameDelete(FALSE)), you'll have to call + // ExitMainLoop() explicitly from somewhere. + void SetExitOnFrameDelete(bool flag) + { m_exitOnFrameDelete = flag ? Yes : No; } + bool GetExitOnFrameDelete() const + { return m_exitOnFrameDelete == Yes; } #endif // wxUSE_GUI @@ -274,22 +275,21 @@ public: // user-defined class (default implementation creates a wxLogGui // object) - this log object is used by default by all wxLogXXX() // functions. - virtual wxLog *CreateLogTarget() - #if wxUSE_GUI && wxUSE_LOGGUI && !defined(__WXMICROWIN__) - { return new wxLogGui; } - #else // !GUI - { return new wxLogStderr; } - #endif // wxUSE_GUI + virtual wxLog *CreateLogTarget(); #endif // wxUSE_LOG + // similar to CreateLogTarget() but for the global wxMessageOutput + // object + virtual wxMessageOutput *CreateMessageOutput(); + #if wxUSE_GUI - #if WXWIN_COMPATIBILITY_2_2 +#if WXWIN_COMPATIBILITY_2_2 // get the standard icon used by wxWin dialogs - this allows the user // to customize the standard dialogs. The 'which' parameter is one of // wxICON_XXX values virtual wxIcon GetStdIcon(int WXUNUSED(which)) const { return wxNullIcon; } - #endif +#endif // Get display mode that is used use. This is only used in framebuffer wxWin ports // (such as wxMGL). @@ -315,14 +315,29 @@ public: virtual void SetActive(bool isActive, wxWindow *lastFocus); #endif // wxUSE_GUI + // this method allows to filter all the events processed by the program, so + // you should try to return quickly from it to avoid slowing down the + // program to the crawl + // + // return value should be -1 to continue with the normal event processing, + // or TRUE or FALSE to stop further processing and pretend that the event + // had been already processed or won't be processed at all, respectively + virtual int FilterEvent(wxEvent& event); + // debugging support // ----------------- // 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 occured, the text of the + // assert itself and the user-specified message #ifdef __WXDEBUG__ - virtual void OnAssert(const wxChar *file, int line, const wxChar *msg); + virtual void OnAssert(const wxChar *file, + int line, + const wxChar *cond, + const wxChar *msg); #endif // __WXDEBUG__ // check that the wxBuildOptions object (constructed in the application @@ -371,8 +386,16 @@ protected: // the main top level window - may be NULL wxWindow *m_topWindow; - // if TRUE, exit the main loop when the last top level window is deleted - bool m_exitOnFrameDelete; + // if Yes, exit the main loop when the last top level window is deleted, if + // No don't do it and if Later -- only do it once we reach our OnRun() + // + // the explanation for using this strange scheme is given in appcmn.cpp + enum + { + Later = -1, + No, + Yes + } m_exitOnFrameDelete; // TRUE if the apps whats to use the best visual on systems where // more than one are available (Sun, SGI, XFree86 4.0 ?) @@ -402,8 +425,6 @@ protected: #include "wx/mac/app.h" #elif defined(__WXPM__) #include "wx/os2/app.h" - #elif defined(__WXSTUBS__) - #include "wx/stubs/app.h" #endif #else // !GUI // can't use typedef because wxApp forward declared as a class @@ -509,13 +530,13 @@ public: #if !wxUSE_GUI || defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__) || defined(__WXMGL__) #define IMPLEMENT_WXWIN_MAIN \ - extern int wxEntry( int argc, char *argv[] ); \ - int main(int argc, char *argv[]) { return wxEntry(argc, argv); } + extern int wxEntry( int argc, char **argv ); \ + int main(int argc, char **argv) { return wxEntry(argc, argv); } #elif defined(__WXMAC__) && defined(__UNIX__) // wxMac seems to have a specific wxEntry prototype #define IMPLEMENT_WXWIN_MAIN \ - extern int wxEntry( int argc, char *argv[], bool enterLoop = 1 ); \ - int main(int argc, char *argv[]) { return wxEntry(argc, argv); } + extern int wxEntry( int argc, char **argv, bool enterLoop = TRUE ); \ + int main(int argc, char **argv) { return wxEntry(argc, argv); } #elif defined(__WXMSW__) && defined(WXUSINGDLL) // NT defines APIENTRY, 3.x not #if !defined(WXAPIENTRY) @@ -548,20 +569,14 @@ public: #define IMPLEMENT_WX_THEME_SUPPORT #endif -// define the build options object for the application which is compared to the -// one used for building the library on the program startup -#define WX_DEFINE_BUILDOPTS() \ - const wxBuildOptions& wxGetBuildOptions() \ - { \ - static wxBuildOptions s_buildOptions; \ - return s_buildOptions; \ - } - // Use this macro if you want to define your own main() or WinMain() function // and call wxEntry() from there. #define IMPLEMENT_APP_NO_MAIN(appname) \ - WX_DEFINE_BUILDOPTS() \ - wxApp *wxCreateApp() { return new appname; } \ + wxApp *wxCreateApp() \ + { \ + wxApp::CheckBuildOptions(wxBuildOptions()); \ + return new appname; \ + } \ wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ appname& wxGetApp() { return *(appname *)wxTheApp; }