1 /////////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     declaration of wxAppTraits and derived classes 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> 
   9 // Licence:     wxWindows licence 
  10 /////////////////////////////////////////////////////////////////////////////// 
  12 #ifndef _WX_APPTRAIT_H_ 
  13 #define _WX_APPTRAIT_H_ 
  15 #include "wx/string.h" 
  17 class WXDLLIMPEXP_BASE wxObject
; 
  18 class WXDLLEXPORT wxAppTraits
; 
  20     class WXDLLEXPORT wxFontMapper
; 
  21 #endif // wxUSE_FONTMAP 
  22 class WXDLLIMPEXP_BASE wxLog
; 
  23 class WXDLLIMPEXP_BASE wxMessageOutput
; 
  24 class WXDLLEXPORT wxRendererNative
; 
  25 class WXDLLIMPEXP_BASE wxString
; 
  27 class GSocketGUIFunctionsTable
; 
  29 // ---------------------------------------------------------------------------- 
  30 // toolkit information 
  31 // ---------------------------------------------------------------------------- 
  33 // Information about the toolkit that the app is running under (e.g. wxMSW): 
  34 struct WXDLLIMPEXP_BASE wxToolkitInfo
 
  36     // Short name of the toolkit (e.g. "msw" or "mswuniv"); empty for console: 
  38     // Descriptive name of the toolkit, human readable (e.g. "wxMSW" or 
  39     // "wxMSW/Universal"); "wxBase" for console apps: 
  41     // Version of the underlying toolkit or of the OS for console apps: 
  42     int versionMajor
, versionMinor
; 
  43     // OS mnenomics, e.g. wxGTK or wxMSW: 
  48 // ---------------------------------------------------------------------------- 
  49 // wxAppTraits: this class defines various configurable aspects of wxApp 
  50 // ---------------------------------------------------------------------------- 
  52 class WXDLLIMPEXP_BASE wxStandardPathsBase
; 
  54 class WXDLLIMPEXP_BASE wxAppTraitsBase
 
  57     // needed since this class declares virtual members 
  58     virtual ~wxAppTraitsBase() { } 
  60     // hooks for creating the global objects, may be overridden by the user 
  61     // ------------------------------------------------------------------------ 
  64     // create the default log target 
  65     virtual wxLog 
*CreateLogTarget() = 0; 
  68     // create the global object used for printing out messages 
  69     virtual wxMessageOutput 
*CreateMessageOutput() = 0; 
  72     // create the global font mapper object used for encodings/charset mapping 
  73     virtual wxFontMapper 
*CreateFontMapper() = 0; 
  74 #endif // wxUSE_FONTMAP 
  76     // get the renderer to use for drawing the generic controls (return value 
  77     // may be NULL in which case the default renderer for the current platform 
  78     // is used); this is used in GUI only and always returns NULL in console 
  80     // NB: returned pointer will be deleted by the caller 
  81     virtual wxRendererNative 
*CreateRenderer() = 0; 
  83     // wxStandardPaths object is normally the same for wxBase and wxGUI 
  84     // except in the case of wxMac and wxCocoa 
  86     virtual wxStandardPathsBase
& GetStandardPaths(); 
  89     // functions abstracting differences between GUI and console modes 
  90     // ------------------------------------------------------------------------ 
  93     // show the assert dialog with the specified message in GUI or just print 
  94     // the string to stderr in console mode 
  96     // base class version has an implementation (in spite of being pure 
  97     // virtual) in base/appbase.cpp which can be called as last resort. 
  99     // return true to suppress subsequent asserts, false to continue as before 
 100     virtual bool ShowAssertDialog(const wxString
& msg
) = 0; 
 101 #endif // __WXDEBUG__ 
 103     // return true if fprintf(stderr) goes somewhere, false otherwise 
 104     virtual bool HasStderr() = 0; 
 106     // managing "pending delete" list: in GUI mode we can't immediately delete 
 107     // some objects because there may be unprocessed events for them and so we 
 108     // only do it during the next idle loop iteration while this is, of course, 
 109     // unnecessary in wxBase, so we have a few functions to abstract these 
 112     // add the object to the pending delete list in GUI, delete it immediately 
 114     virtual void ScheduleForDestroy(wxObject 
*object
) = 0; 
 116     // remove this object from the pending delete list in GUI, do nothing in 
 118     virtual void RemoveFromPendingDelete(wxObject 
*object
) = 0; 
 121     // return table of GUI callbacks for GSocket code or NULL in wxBase. This 
 122     // is needed because networking classes are in their own library and so 
 123     // they can't directly call GUI functions (the same net library can be 
 124     // used in both GUI and base apps). To complicate it further, GUI library 
 125     // ("wxCore") doesn't depend on networking library and so only a functions 
 126     // table can be passed around 
 127     virtual GSocketGUIFunctionsTable
* GetSocketGUIFunctionsTable() = 0; 
 131     // return information about what toolkit is running; we need for two things 
 132     // that are both contained in wxBase: 
 133     //  - wxGetOsVersion() behaves differently in GUI and non-GUI builds under 
 134     //    Unix: in the former case it returns the information about the toolkit 
 135     //    and in the latter -- about the OS, so we need to virtualize it 
 136     //  - wxDynamicLibrary::CanonicalizePluginName() must embed toolkit 
 137     //    signature in DLL name 
 138     virtual wxToolkitInfo
& GetToolkitInfo() = 0; 
 141 // ---------------------------------------------------------------------------- 
 142 // include the platform-specific version of the class 
 143 // ---------------------------------------------------------------------------- 
 145 // NB: test for __UNIX__ before __WXMAC__ as under Darwin we want to use the 
 146 //     Unix code (and otherwise __UNIX__ wouldn't be defined) 
 147 #if defined(__WXPALMOS__) 
 148     #include "wx/palmos/apptbase.h" 
 149 #elif defined(__WXMSW__) 
 150     #include "wx/msw/apptbase.h" 
 151 #elif defined(__UNIX__) && !defined(__EMX__) 
 152     #include "wx/unix/apptbase.h" 
 153 #elif defined(__WXMAC__) 
 154     #include "wx/mac/apptbase.h" 
 155 #elif defined(__OS2__) 
 156     #include "wx/os2/apptbase.h" 
 157 #else // no platform-specific methods to add to wxAppTraits 
 158     // wxAppTraits must be a class because it was forward declared as class 
 159     class WXDLLIMPEXP_BASE wxAppTraits 
: public wxAppTraitsBase
 
 164 // ============================================================================ 
 165 // standard traits for console and GUI applications 
 166 // ============================================================================ 
 168 // ---------------------------------------------------------------------------- 
 169 // wxConsoleAppTraitsBase: wxAppTraits implementation for the console apps 
 170 // ---------------------------------------------------------------------------- 
 172 class WXDLLIMPEXP_BASE wxConsoleAppTraitsBase 
: public wxAppTraits
 
 176     virtual wxLog 
*CreateLogTarget(); 
 178     virtual wxMessageOutput 
*CreateMessageOutput(); 
 180     virtual wxFontMapper 
*CreateFontMapper(); 
 181 #endif // wxUSE_FONTMAP 
 182     virtual wxRendererNative 
*CreateRenderer(); 
 184     virtual GSocketGUIFunctionsTable
* GetSocketGUIFunctionsTable(); 
 188     virtual bool ShowAssertDialog(const wxString
& msg
); 
 189 #endif // __WXDEBUG__ 
 190     virtual bool HasStderr(); 
 192     virtual void ScheduleForDestroy(wxObject 
*object
); 
 193     virtual void RemoveFromPendingDelete(wxObject 
*object
); 
 196 // ---------------------------------------------------------------------------- 
 197 // wxGUIAppTraitsBase: wxAppTraits implementation for the GUI apps 
 198 // ---------------------------------------------------------------------------- 
 202 class WXDLLEXPORT wxGUIAppTraitsBase 
: public wxAppTraits
 
 206     virtual wxLog 
*CreateLogTarget(); 
 208     virtual wxMessageOutput 
*CreateMessageOutput(); 
 210     virtual wxFontMapper 
*CreateFontMapper(); 
 211 #endif // wxUSE_FONTMAP 
 212     virtual wxRendererNative 
*CreateRenderer(); 
 214     virtual GSocketGUIFunctionsTable
* GetSocketGUIFunctionsTable(); 
 218     virtual bool ShowAssertDialog(const wxString
& msg
); 
 219 #endif // __WXDEBUG__ 
 220     virtual bool HasStderr(); 
 222     virtual void ScheduleForDestroy(wxObject 
*object
); 
 223     virtual void RemoveFromPendingDelete(wxObject 
*object
); 
 228 // ---------------------------------------------------------------------------- 
 229 // include the platform-specific version of the classes above 
 230 // ---------------------------------------------------------------------------- 
 232 #if defined(__WXPALMOS__) 
 233     #include "wx/palmos/apptrait.h" 
 234 #elif defined(__WXMSW__) 
 235     #include "wx/msw/apptrait.h" 
 236 #elif defined(__UNIX__) && !defined(__EMX__) 
 237     #include "wx/unix/apptrait.h" 
 238 #elif defined(__WXMAC__) 
 239     #include "wx/mac/apptrait.h" 
 240 #elif defined(__WXPM__) 
 241     #include "wx/os2/apptrait.h" 
 243     // at least, we need an implementation of GetToolkitInfo ! 
 245         class wxGUIAppTraits 
: public wxGUIAppTraitsBase
 
 247             virtual wxToolkitInfo
& GetToolkitInfo(); 
 250     class wxConsoleAppTraits
: public wxConsoleAppTraitsBase
 
 252         virtual wxToolkitInfo
& GetToolkitInfo(); 
 256 #endif // _WX_APPTRAIT_H_