X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e193f384f7b98daef459653ddb8485173fba8ba..e5aea7214deb0443b068b1deb4a81772572d849e:/include/wx/app.h diff --git a/include/wx/app.h b/include/wx/app.h index 0e00618dbe..46bde888f1 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -21,7 +21,7 @@ // typedefs // ---------------------------------------------------------------------------- -#ifdef __WXMSW__ +#if defined(__WXMSW__) || defined (__WXPM__) class WXDLLEXPORT wxApp; typedef wxApp* (*wxAppInitializerFunction)(); #else @@ -61,7 +61,9 @@ class WXDLLEXPORT wxAppBase : public wxEvtHandler public: // the virtual functions which may/must be overridden in the derived class // ----------------------------------------------------------------------- - +#ifdef __WXMAC_X__ + virtual ~wxAppBase() {} // Added min for Mac X +#endif // called during the program initialization, returning FALSE from here // prevents the program from continuing - it's a good place to create // the top level program window and return TRUE. @@ -100,7 +102,7 @@ public: // value of this method. // // Override: often. - virtual int OnExit() { return 0; } + virtual int OnExit(); // called when a fatal exception occurs, this function should take care // not to do anything which might provoke a nested exception! It may be @@ -169,7 +171,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) - wxWindow *GetTopWindow() const + virtual wxWindow *GetTopWindow() const { if (m_topWindow) return m_topWindow; @@ -215,6 +217,10 @@ public: void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; } bool GetWantDebugOutput() const { return m_wantDebugOutput; } + // set use of best visual flag (see below) + void SetUseBestVisual( bool flag ) { m_useBestVisual = flag; } + bool GetUseBestVisual() const { return m_useBestVisual; } + // set/get printing mode: see wxPRINT_XXX constants. // // default behaviour is the normal one for Unix: always use PostScript @@ -232,6 +238,9 @@ public: static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; } + // process all events in the wxPendingEvents list + virtual void ProcessPendingEvents(); + // access to the command line arguments int argc; wxChar **argv; @@ -252,6 +261,10 @@ protected: // TRUE if the application wants to get debug output bool m_wantDebugOutput; + // TRUE if the apps whats to use the best visual on systems where + // more than one are available (Sun, SGI, XFree86 4.0 ?) + bool m_useBestVisual; + #if wxUSE_GUI // the main top level window - may be NULL wxWindow *m_topWindow; @@ -279,7 +292,10 @@ protected: #include "wx/stubs/app.h" #endif #else // !GUI - typedef wxAppBase wxApp; + // can't use typedef because wxApp forward declared as a class + class WXDLLEXPORT wxApp : public wxAppBase + { + }; #endif // GUI/!GUI // ---------------------------------------------------------------------------- @@ -299,30 +315,33 @@ WXDLLEXPORT_DATA(extern wxApp*) wxTheApp; // event loop related functions only work in GUI programs // ------------------------------------------------------ -#if wxUSE_GUI - // Force an exit from main loop extern void WXDLLEXPORT wxExit(); // Yield to other apps/messages extern bool WXDLLEXPORT wxYield(); +// Yield to other apps/messages +extern void WXDLLEXPORT wxWakeUpIdle(); + // Post a message to the given eventhandler which will be processed during the // next event loop iteration inline void WXDLLEXPORT wxPostEvent(wxEvtHandler *dest, wxEvent& event) { wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") ); +#if wxUSE_GUI dest->AddPendingEvent(event); -} - +#else + dest->ProcessEvent(event); #endif // wxUSE_GUI +} // console applications may avoid using DECLARE_APP and IMPLEMENT_APP macros // and call these functions instead at the program startup and termination // ------------------------------------------------------------------------- -#if wxUSE_NOGUI +#if !wxUSE_GUI // initialize the library (may be called as many times as needed, but each // call to wxInitialize() must be matched by wxUninitialize()) @@ -332,7 +351,7 @@ extern bool WXDLLEXPORT wxInitialize(); // wxUninitialize() extern void WXDLLEXPORT wxUninitialize(); -#endif // wxUSE_NOGUI +#endif // !wxUSE_GUI // ---------------------------------------------------------------------------- // macros for dynamic creation of the application object @@ -353,41 +372,52 @@ public: // be in your main program (e.g. hello.cpp). Now IMPLEMENT_APP should add this // code if required. -#if defined(__AIX__) || defined(__HPUX__) +#if !wxUSE_GUI || defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__) #define IMPLEMENT_WXWIN_MAIN \ 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); } #elif defined(__WXMSW__) && defined(WXUSINGDLL) // NT defines APIENTRY, 3.x not #if !defined(WXAPIENTRY) - #ifdef __WATCOMC__ - #define WXAPIENTRY PASCAL - #else - #define WXAPIENTRY FAR PASCAL - #endif + #define WXAPIENTRY WXFAR wxSTDCALL #endif + #include + #include "wx/msw/winundef.h" + #define IMPLEMENT_WXWIN_MAIN \ - int WXAPIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\ - LPSTR m_lpCmdLine, int nCmdShow )\ + extern "C" int WXAPIENTRY WinMain(HINSTANCE hInstance,\ + HINSTANCE hPrevInstance,\ + LPSTR m_lpCmdLine, int nCmdShow)\ {\ - return wxEntry((WXHINSTANCE) hInstance, \ + return wxEntry((WXHINSTANCE) hInstance,\ (WXHINSTANCE) hPrevInstance,\ m_lpCmdLine, nCmdShow);\ } - #else #define IMPLEMENT_WXWIN_MAIN #endif -// use this macro exactly once, the argument is the name of the wxApp-derived -// class which is the class of your application -#define IMPLEMENT_APP(appname) \ - wxApp *wxCreateApp() { return new appname; } \ +// Use this macro exactly once, the argument is the name of the wxApp-derived +// class which is the class of your application. +#define IMPLEMENT_APP(appname) \ + wxApp *wxCreateApp() { return new appname; } \ wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ appname& wxGetApp() { return *(appname *)wxTheApp; } \ IMPLEMENT_WXWIN_MAIN +// 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) \ + wxApp *wxCreateApp() { return new appname; } \ + wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ + appname& wxGetApp() { return *(appname *)wxTheApp; } + #define DECLARE_APP(appname) extern appname& wxGetApp(); #endif