+#include "wx/build.h"
+#include "wx/init.h" // we must declare wxEntry()
+
+class WXDLLIMPEXP_BASE wxAppConsole;
+class WXDLLIMPEXP_BASE wxAppTraits;
+class WXDLLIMPEXP_BASE wxCmdLineParser;
+class WXDLLIMPEXP_BASE wxLog;
+class WXDLLIMPEXP_BASE wxMessageOutput;
+
+// ----------------------------------------------------------------------------
+// typedefs
+// ----------------------------------------------------------------------------
+
+// the type of the function used to create a wxApp object on program start up
+typedef wxAppConsole* (*wxAppInitializerFunction)();
+
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+enum
+{
+ wxPRINT_WINDOWS = 1,
+ 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
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_BASE wxAppConsole : public wxEvtHandler
+{
+public:
+ // ctor and dtor
+ wxAppConsole();
+ virtual ~wxAppConsole();
+
+
+ // the virtual functions which may/must be overridden in the derived class
+ // -----------------------------------------------------------------------
+
+ // This is the very first function called for a newly created wxApp object,
+ // it is used by the library to do the global initialization. If, for some
+ // reason, you must override it (instead of just overriding OnInit(), as
+ // usual, for app-specific initializations), do not forget to call the base
+ // class version!
+ virtual bool Initialize(int& argc, wxChar **argv);
+
+ // This gives wxCocoa a chance to call OnInit() with a memory pool in place
+ virtual bool CallOnInit() { return OnInit(); }
+
+ // Called before OnRun(), this is a good place to do initialization -- if
+ // anything fails, return false from here to prevent the program from
+ // continuing. The command line is normally parsed here, call the base
+ // class OnInit() to do it.
+ virtual bool OnInit();
+
+ // this is here only temproary hopefully (FIXME)
+ virtual bool OnInitGui() { return true; }
+
+ // This is the replacement for the normal main(): all program work should
+ // be done here. When OnRun() returns, the programs starts shutting down.
+ virtual int OnRun() = 0;
+
+ // This is only called if OnInit() returned true so it's a good place to do
+ // any cleanup matching the initializations done there.
+ virtual int OnExit();
+
+ // This is the very last function called on wxApp object before it is
+ // destroyed. If you override it (instead of overriding OnExit() as usual)
+ // do not forget to call the base class version!
+ virtual void CleanUp();
+
+ // Called when a fatal exception occurs, this function should take care not
+ // to do anything which might provoke a nested exception! It may be
+ // overridden if you wish to react somehow in non-default way (core dump
+ // under Unix, application crash under Windows) to fatal program errors,
+ // however extreme care should be taken if you don't want this function to
+ // crash.
+ virtual void OnFatalException() { }
+
+ // Called from wxExit() function, should terminate the application a.s.a.p.
+ virtual void Exit();
+
+
+ // application info: name, description, vendor
+ // -------------------------------------------
+
+ // NB: all these should be set by the application itself, there are no
+ // reasonable default except for the application name which is taken to
+ // be argv[0]
+
+ // set/get the application name
+ wxString GetAppName() const
+ {
+ return m_appName.empty() ? m_className : m_appName;
+ }
+ void SetAppName(const wxString& name) { m_appName = name; }
+
+ // set/get the app class name
+ wxString GetClassName() const { return m_className; }
+ void SetClassName(const wxString& name) { m_className = name; }
+
+ // set/get the vendor name
+ const wxString& GetVendorName() const { return m_vendorName; }
+ void SetVendorName(const wxString& name) { m_vendorName = name; }
+
+
+ // cmd line parsing stuff
+ // ----------------------
+
+ // all of these methods may be overridden in the derived class to
+ // customize the command line parsing (by default only a few standard
+ // options are handled)
+ //
+ // you also need to call wxApp::OnInit() from YourApp::OnInit() for all
+ // this to work
+
+#if wxUSE_CMDLINE_PARSER
+ // this one is called from OnInit() to add all supported options
+ // to the given parser
+ virtual void OnInitCmdLine(wxCmdLineParser& parser);
+
+ // called after successfully parsing the command line, return TRUE
+ // to continue and FALSE to exit
+ virtual bool OnCmdLineParsed(wxCmdLineParser& parser);
+
+ // called if "--help" option was specified, return TRUE to continue
+ // and FALSE to exit
+ virtual bool OnCmdLineHelp(wxCmdLineParser& parser);
+
+ // called if incorrect command line options were given, return
+ // FALSE to abort and TRUE to continue
+ virtual bool OnCmdLineError(wxCmdLineParser& parser);
+#endif // wxUSE_CMDLINE_PARSER
+
+
+ // miscellaneous customization functions
+ // -------------------------------------
+
+ // create the app traits object to which we delegate for everything which
+ // either should be configurable by the user (then he can change the
+ // default behaviour simply by overriding CreateTraits() and returning his
+ // own traits object) or which is GUI/console dependent as then wxAppTraits
+ // allows us to abstract the differences behind the common façade
+ wxAppTraits *GetTraits();
+
+ // the functions below shouldn't be used now that we have wxAppTraits
+#if WXWIN_COMPATIBILITY_2_4
+
+#if wxUSE_LOG
+ // override this function to create default log target of arbitrary
+ // user-defined class (default implementation creates a wxLogGui
+ // object) -- this log object is used by default by all wxLogXXX()
+ // functions.
+ virtual wxLog *CreateLogTarget();
+#endif // wxUSE_LOG
+
+ // similar to CreateLogTarget() but for the global wxMessageOutput
+ // object
+ virtual wxMessageOutput *CreateMessageOutput();
+
+#endif // WXWIN_COMPATIBILITY_2_4
+
+
+ // event processing functions
+ // --------------------------
+
+ // 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);
+
+ // 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
+ // also called directly.
+ virtual void ProcessPendingEvents();
+
+ // doesn't do anything in this class, just a hook for GUI wxApp
+ virtual bool Yield(bool WXUNUSED(onlyIfNeeded) = false) { return true; }
+
+ // make sure that idle events are sent again
+ virtual void WakeUpIdle() { }
+
+
+ // 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 *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);
+
+
+ // implementation only from now on
+ // -------------------------------
+
+ // helpers for dynamic wxApp construction
+ static void SetInitializerFunction(wxAppInitializerFunction fn)
+ { ms_appInitFn = fn; }
+ static wxAppInitializerFunction GetInitializerFunction()
+ { return ms_appInitFn; }
+
+ // accessors for ms_appInstance field (external code might wish to modify
+ // it, this is why we provide a setter here as well, but you should really
+ // know what you're doing if you call it), wxTheApp is usually used instead
+ // of GetInstance()
+ static wxAppConsole *GetInstance() { return ms_appInstance; }
+ static void SetInstance(wxAppConsole *app) { ms_appInstance = app; }
+
+
+ // command line arguments (public for backwards compatibility)
+ int argc;
+ wxChar **argv;
+
+protected:
+ // the function which creates the traits object when GetTraits() needs it
+ // for the first time
+ virtual wxAppTraits *CreateTraits();
+
+
+ // function used for dynamic wxApp creation
+ static wxAppInitializerFunction ms_appInitFn;