#if wxUSE_GUI
#include "wx/window.h" // for wxTopLevelWindows
+
+ #include "wx/vidmode.h"
#endif // wxUSE_GUI
#include "wx/build.h"
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
+ class WXDLLEXPORT wxEventLoop;
+#endif
+
// ----------------------------------------------------------------------------
// typedefs
// ----------------------------------------------------------------------------
wxPRINT_POSTSCRIPT = 2
};
-// ----------------------------------------------------------------------------
-// support for framebuffer ports
-// ----------------------------------------------------------------------------
-
-#if wxUSE_GUI
-// VS: Fullscreen/framebuffer application needs to choose display mode prior
-// to wxWindows initialization. This class holds information about display
-// mode. It is used by wxApp::Set/GetDisplayMode.
-class WXDLLIMPEXP_CORE wxDisplayModeInfo
-{
-public:
- wxDisplayModeInfo() : m_ok(FALSE) {}
- 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; }
- bool IsOk() const { return m_ok; }
-
-private:
- unsigned m_width, m_height, m_depth;
- bool m_ok;
-};
-#endif // wxUSE_GUI
-
-
// ----------------------------------------------------------------------------
// wxAppConsole: wxApp for non-GUI applications
// ----------------------------------------------------------------------------
// crash.
virtual void OnFatalException() { }
+#if wxUSE_EXCEPTIONS
+ // 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();
// had been already processed or won't be processed at all, respectively
virtual int FilterEvent(wxEvent& event);
+#if wxUSE_EXCEPTIONS
+ // call the specified handler on the given object with the given event
+ //
+ // this method only exists to allow catching the exceptions thrown by any
+ // event handler, it would lead to an extra (useless) virtual function call
+ // if the exceptions were not used, so it doesn't even exist in that case
+ virtual void HandleEvent(wxEvtHandler *handler,
+ wxEventFunction func,
+ wxEvent& event) const;
+#endif // wxUSE_EXCEPTIONS
+
// process all events in the wxPendingEvents list -- it is necessary to
// call this function to process posted events. This happens during each
// event loop iteration in GUI mode but if there is no main loop, it may be
// -----------------------------------------------------------------
// execute the main GUI loop, the function returns when the loop ends
- virtual int MainLoop() = 0;
+ virtual int MainLoop();
// exit the main loop thus terminating the application
virtual void Exit();
// exit the main GUI loop during the next iteration (i.e. it does not
// stop the program immediately!)
- virtual void ExitMainLoop() = 0;
-
- // returns TRUE if the program is initialized
- virtual bool Initialized() = 0;
+ virtual void ExitMainLoop();
// returns TRUE if there are unprocessed events in the event queue
- virtual bool Pending() = 0;
+ virtual bool Pending();
// process the first event in the event queue (blocks until an event
- // apperas if there are none currently)
- virtual void Dispatch() = 0;
+ // appears if there are none currently, use Pending() if this is not
+ // wanted), returns false if the event loop should stop and true
+ // otherwise
+ virtual bool Dispatch();
// process all currently pending events right now
//
// parties
//
// it should return TRUE if more idle events are needed, FALSE if not
- virtual bool ProcessIdle() ;
+ virtual bool ProcessIdle();
// Send idle event to window and all subwindows
// Returns TRUE if more idle time is requested.
// Get display mode that is used use. This is only used in framebuffer
// wxWin ports (such as wxMGL).
- virtual wxDisplayModeInfo GetDisplayMode() const { return wxDisplayModeInfo(); }
+ virtual wxVideoMode GetDisplayMode() const { return wxVideoMode(); }
// 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; }
+ virtual bool SetDisplayMode(const wxVideoMode& WXUNUSED(info)) { return TRUE; }
// set use of best visual flag (see below)
void SetUseBestVisual( bool flag ) { m_useBestVisual = flag; }
// deactivated
virtual void SetActive(bool isActive, wxWindow *lastFocus);
+ // OBSOLETE: don't use, always returns true
+ //
+ // returns true if the program is successfully initialized
+ bool Initialized() { return true; }
+
protected:
// delete all objects in wxPendingDelete list
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;