// typedefs
// ----------------------------------------------------------------------------
-#if defined(__WXMSW__) || defined (__WXPM__)
+#if (defined(__WXMSW__) && !defined(__WXMICROWIN__)) || defined (__WXPM__)
class WXDLLEXPORT wxApp;
typedef wxApp* (*wxAppInitializerFunction)();
#else
class WXDLLEXPORT wxAppBase : public wxEvtHandler
{
public:
+ wxAppBase();
+
// the virtual functions which may/must be overridden in the derived class
// -----------------------------------------------------------------------
#ifdef __WXMAC_X__
// depend on the toolkit. default version does nothing.
//
// Override: rarely.
- virtual bool OnInitGui() { return TRUE; }
+ virtual bool OnInitGui();
#endif // wxUSE_GUI
// called to start program execution - the default version just enters
// top level window functions
// --------------------------
+ // return TRUE if our app has focus
+ virtual bool IsActive() const { return m_isActive; }
+
// set the "main" top level window
void SetTopWindow(wxWindow *win) { m_topWindow = win; }
// 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;
// object) - this log object is used by default by all wxLogXXX()
// functions.
virtual wxLog *CreateLogTarget()
-#if wxUSE_GUI
- { return new wxLogGui; }
-#else // !GUI
- { return new wxLogStderr; }
-#endif // wxUSE_GUI
+ #if wxUSE_GUI && wxUSE_LOGGUI
+ { return new wxLogGui; }
+ #else // !GUI
+ { return new wxLogStderr; }
+ #endif // wxUSE_GUI
#endif // wxUSE_LOG
#if wxUSE_GUI
// printing.
virtual void SetPrintMode(int WXUNUSED(mode)) { }
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; }
+
+ // called by toolkit-specific code to set the app status: active (we have
+ // focus) or not and also the last window which had focus before we were
+ // deactivated
+ virtual void SetActive(bool isActive, wxWindow *lastFocus);
#endif // wxUSE_GUI
// implementation only from now on
int argc;
wxChar **argv;
-//private:
protected:
// function used for dynamic wxApp creation
static wxAppInitializerFunction m_appInitFn;
m_appName, // app name
m_className; // class name
- // if TRUE, exit the main loop when the last top level window is deleted
- bool m_exitOnFrameDelete;
-
// 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;
+
// 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;
+ // does any of our windows has focus?
+ bool m_isActive;
#endif // wxUSE_GUI
};
#include "wx/msw/app.h"
#elif defined(__WXMOTIF__)
#include "wx/motif/app.h"
+ #elif defined(__WXMGL__)
+ #include "wx/mgl/app.h"
#elif defined(__WXQT__)
#include "wx/qt/app.h"
#elif defined(__WXGTK__)
// 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)
+inline void wxPostEvent(wxEvtHandler *dest, wxEvent& event)
{
wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") );
// wxUninitialize()
extern void WXDLLEXPORT wxUninitialize();
+// create an object of this class on stack to initialize/cleanup thel ibrary
+// automatically
+class WXDLLEXPORT wxInitializer
+{
+public:
+ // initialize the library
+ wxInitializer() { m_ok = wxInitialize(); }
+
+ // has the initialization been successful? (explicit test)
+ bool IsOk() const { return m_ok; }
+
+ // has the initialization been successful? (implicit test)
+ operator bool() const { return m_ok; }
+
+ // dtor only does clean up if we initialized the library properly
+ ~wxInitializer() { if ( m_ok ) wxUninitialize(); }
+
+private:
+ bool m_ok;
+};
+
#endif // !wxUSE_GUI
// ----------------------------------------------------------------------------
// be in your main program (e.g. hello.cpp). Now IMPLEMENT_APP should add this
// code if required.
-#if !wxUSE_GUI || defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__) || (defined(__WXMAC__) && defined(__UNIX__))
+#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)