1/////////////////////////////////////////////////////////////////////////////
2// Name:        app.h
3// Purpose:     wxApp class
4// Author:      Stefan Csomor
5// Modified by:
6// Created:     1998-01-01
7// RCS-ID:      $Id: app.h 53370 2008-04-26 05:43:41Z KO $
8// Copyright:   (c) Stefan Csomor
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_APP_H_
13#define _WX_APP_H_
14
15#include "wx/defs.h"
16#include "wx/object.h"
17#include "wx/gdicmn.h"
18#include "wx/event.h"
19
20#ifdef __WXMAC_OSX__
21typedef struct __CFRunLoopSource * CFRunLoopSourceRef;
22#endif
23
24class WXDLLEXPORT wxFrame;
25class WXDLLEXPORT wxWindowMac;
26class WXDLLEXPORT wxApp ;
27class WXDLLEXPORT wxKeyEvent;
28class WXDLLEXPORT wxLog;
29
30// Force an exit from main loop
31void WXDLLEXPORT wxExit();
32
33// Yield to other apps/messages
34bool WXDLLEXPORT wxYield();
35
36// Represents the application. Derive OnInit and declare
37// a new App object to start application
38class WXDLLEXPORT wxApp: public wxAppBase
39{
40    DECLARE_DYNAMIC_CLASS(wxApp)
41
42    wxApp();
43    virtual ~wxApp() {}
44
45    virtual bool Yield(bool onlyIfNeeded = FALSE);
46    virtual void WakeUpIdle();
47
48    virtual void SetPrintMode(int mode) { m_printMode = mode; }
49    virtual int GetPrintMode() const { return m_printMode; }
50
51#if wxUSE_GUI
52    // setting up all MacOS Specific Event-Handlers etc
53    virtual bool OnInitGui();
54#endif // wxUSE_GUI
55    // implementation only
56    void OnIdle(wxIdleEvent& event);
57    void OnEndSession(wxCloseEvent& event);
58    void OnQueryEndSession(wxCloseEvent& event);
59
60    void                  MacDoOneEvent() ;
61
62protected:
63    int                   m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
64
65public:
66
67    static bool           sm_isEmbedded;
68    // Implementation
69    virtual bool Initialize(int& argc, wxChar **argv);
70    virtual void CleanUp();
71
72    // the installed application event handler
73    WXEVENTHANDLERREF    MacGetEventHandler() { return m_macEventHandler ; }
74    WXEVENTHANDLERREF    MacGetCurrentEventHandlerCallRef() { return m_macCurrentEventHandlerCallRef ; }
75    void MacSetCurrentEvent( WXEVENTREF event , WXEVENTHANDLERCALLREF handler )
76    { m_macCurrentEvent = event ; m_macCurrentEventHandlerCallRef = handler ; }
77
78    void MacRequestUserAttention(wxNotificationOptions options);
79
80    // adding a CFType object to be released only at the end of the current event cycle (increases the
81    // refcount of the object passed), needed in case we are in the middle of an event concering an object
82    // we want to delete and cannot do it immediately
83    // TODO change semantics to be in line with cocoa (make autrelease NOT increase the count)
84    void                  MacAddToAutorelease( void* cfrefobj );
85public:
86    static wxWindow*      s_captureWindow ;
87    static long           s_lastModifiers ;
88
89    int                   m_nCmdShow;
90
91private:
92    // mac specifics
93
94    WXEVENTHANDLERREF     m_macEventHandler ;
95    WXEVENTHANDLERCALLREF m_macCurrentEventHandlerCallRef ;
96    WXEVENTREF            m_macCurrentEvent ;
97#ifdef __WXMAC_OSX__
98    CFRunLoopSourceRef    m_macEventPosted ;
99#endif
100
101public:
102    static long           s_macAboutMenuItemId ;
103    static long           s_macPreferencesMenuItemId ;
104    static long           s_macExitMenuItemId ;
105    static wxString       s_macHelpMenuTitleName ;
106    static void*          s_macNotificationRecord ;
107
108    WXEVENTREF            MacGetCurrentEvent() { return m_macCurrentEvent ; }
109    void                  MacHandleOneEvent( WXEVENTREF ev ) ;
110
111    // For embedded use. By default does nothing.
112    virtual void          MacHandleUnhandledEvent( WXEVENTREF ev );
113
114    bool    MacSendKeyDownEvent( wxWindow* focus , long keyval , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
115    bool    MacSendKeyUpEvent( wxWindow* focus , long keyval , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
116    bool    MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
117    void    MacCreateKeyEvent( wxKeyEvent& event, wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
118    virtual short         MacHandleAEODoc(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
119    virtual short         MacHandleAEPDoc(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
120    virtual short         MacHandleAEOApp(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
121    virtual short         MacHandleAEQuit(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
122    virtual short         MacHandleAERApp(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
123
124    // in response of an open-document apple event
125    virtual void         MacOpenFile(const wxString &fileName) ;
126    // in response of a print-document apple event
127    virtual void         MacPrintFile(const wxString &fileName) ;
128    // in response of a open-application apple event
129    virtual void         MacNewFile() ;
130    // in response of a reopen-application apple event
131    virtual void         MacReopenApp() ;
132
133#if wxABI_VERSION >= 20808
134    // Hide the application windows the same as the system hide command would do it.
135    void MacHideApp();
136#endif
137
138    DECLARE_EVENT_TABLE()
139};
140
141#endif
142    // _WX_APP_H_
143
144