X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1b4908dedc1c4ea8f36ea6676d1563791d31a721..b93f4bb9da97b545447df56f21dfce2590ae01e6:/include/wx/app.h diff --git a/include/wx/app.h b/include/wx/app.h index 8f631cccf2..69f408ac5a 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: app.h +// Name: wx/app.h // Purpose: wxAppBase class and macros used for declaration of wxApp // derived class in the user code // Author: Julian Smart @@ -47,6 +47,12 @@ class WXDLLEXPORT wxCmdLineParser; #include "wx/log.h" #endif +#if WXWIN_COMPATIBILITY_2_2 + #include "wx/icon.h" +#endif + +#include "wx/build.h" + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -61,21 +67,21 @@ static const int wxPRINT_POSTSCRIPT = 2; #if wxUSE_GUI // VS: Fullscreen/framebuffer application needs to choose display mode prior // to wxWindows initialization. This class holds information about display -// mode. An instance of it is returned by virtual wxApp::GetDisplayMode. +// mode. It is used by wxApp::Set/GetDisplayMode. class WXDLLEXPORT wxDisplayModeInfo { public: wxDisplayModeInfo() : m_ok(FALSE) {} - wxDisplayModeInfo(const wxSize& size, unsigned depth) - : m_size(size), m_depth(depth), m_ok(TRUE) {} + wxDisplayModeInfo(unsigned width, unsigned height, unsigned depth) + : m_width(width), m_height(height), m_depth(depth), m_ok(TRUE) {} - const wxSize& GetScreenSize() const { return m_size; } + unsigned GetWidth() const { return m_width; } + unsigned GetHeight() const { return m_height; } unsigned GetDepth() const { return m_depth; } bool IsOk() const { return m_ok; } private: - wxSize m_size; - unsigned m_depth; + unsigned m_width, m_height, m_depth; bool m_ok; }; #endif @@ -86,8 +92,11 @@ private: class WXDLLEXPORT wxAppBase : public wxEvtHandler { + DECLARE_NO_COPY_CLASS(wxAppBase) + public: wxAppBase(); + virtual ~wxAppBase(); // the virtual functions which may/must be overridden in the derived class // ----------------------------------------------------------------------- @@ -99,6 +108,10 @@ public: // Override: always in GUI application, rarely in console ones. virtual bool OnInit(); + // initializes wxMessageOutput; other responsibilities + // may be added later + virtual void DoInit(); + #if wxUSE_GUI // a platform-dependent version of OnInit(): the code here is likely to // depend on the toolkit. default version does nothing. @@ -115,7 +128,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 @@ -138,6 +151,8 @@ public: // Override: rarely. virtual void OnFatalException() { } + virtual bool ProcessIdle() = 0; + // the worker functions - usually not used directly by the user code // ----------------------------------------------------------------- @@ -221,11 +236,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,19 +291,20 @@ public: #endif // wxUSE_LOG #if wxUSE_GUI + + #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 which) const = 0; + virtual wxIcon GetStdIcon(int WXUNUSED(which)) const { return wxNullIcon; } + #endif - // get display mode to use. This is only used in framebuffer wxWin ports - // (such as wxMGL). This method is called early in wxWin initialization - // process and is supposed to be overriden in derived classes. + // Get display mode that is used use. This is only used in framebuffer wxWin ports + // (such as wxMGL). virtual wxDisplayModeInfo GetDisplayMode() const { return wxDisplayModeInfo(); } - - // VZ: what does this do exactly? - void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; } - bool GetWantDebugOutput() const { return m_wantDebugOutput; } + // Set display mode to use. This is only used in framebuffer wxWin ports + // (such as wxMGL). This method should be called from wxApp:OnInitGui + virtual bool SetDisplayMode(const wxDisplayModeInfo& WXUNUSED(info)) { return TRUE; } // set use of best visual flag (see below) void SetUseBestVisual( bool flag ) { m_useBestVisual = flag; } @@ -305,16 +323,48 @@ 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 + // itself, usually the one from IMPLEMENT_APP() macro) matches the build + // options of the library and abort if it doesn't + static bool CheckBuildOptions(const wxBuildOptions& buildOptions); + + // deprecated functions, please updae your code to not use them! + // ------------------------------------------------------------- + +#if WXWIN_COMPATIBILITY_2_2 + // used by obsolete wxDebugMsg only + void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; } + bool GetWantDebugOutput() const { return m_wantDebugOutput; } + + // TRUE if the application wants to get debug output + bool m_wantDebugOutput; +#endif // WXWIN_COMPATIBILITY_2_2 + // implementation only from now on // ------------------------------- @@ -324,11 +374,6 @@ public: static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; } - // needed to avoid link errors -#ifdef __DARWIN__ - virtual ~wxAppBase() { } -#endif - // process all events in the wxPendingEvents list virtual void ProcessPendingEvents(); @@ -344,16 +389,21 @@ protected: wxString m_vendorName, // vendor name (ACME Inc) m_appName, // app name m_className; // class name - - // TRUE if the application wants to get debug output - bool m_wantDebugOutput; - + #if wxUSE_GUI // 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 ?) @@ -377,6 +427,8 @@ protected: #include "wx/mgl/app.h" #elif defined(__WXGTK__) #include "wx/gtk/app.h" + #elif defined(__WXX11__) + #include "wx/x11/app.h" #elif defined(__WXMAC__) #include "wx/mac/app.h" #elif defined(__WXPM__) @@ -530,7 +582,11 @@ public: // 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; } \ + wxApp *wxCreateApp() \ + { \ + wxApp::CheckBuildOptions(wxBuildOptions()); \ + return new appname; \ + } \ wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ appname& wxGetApp() { return *(appname *)wxTheApp; }