1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/fontenum.h
3 // Purpose:     wxFontEnumerator class for getting available fonts
4 // Author:      Julian Smart, Vadim Zeitlin
5 // Modified by: extended to enumerate more than just font facenames and works
6 //              not only on Windows now (VZ)
7 // Created:     04/01/98
8 // RCS-ID:      $Id: fontenum.h 43727 2006-12-01 10:14:28Z VS $
9 // Copyright:   (c) Julian Smart, Vadim Zeitlin
10 // Licence:     wxWindows licence
11 /////////////////////////////////////////////////////////////////////////////
12 
13 #ifndef _WX_FONTENUM_H_
14 #define _WX_FONTENUM_H_
15 
16 #include "wx/fontenc.h"
17 #include "wx/arrstr.h"
18 
19 #if wxUSE_PANGO || defined(__WXDFB__)
20     // defined if the port uses only UTF-8 font encodings internally
21     #define wxHAS_UTF8_FONTS
22 #endif
23 
24 // ----------------------------------------------------------------------------
25 // wxFontEnumerator enumerates all available fonts on the system or only the
26 // fonts with given attributes
27 // ----------------------------------------------------------------------------
28 
29 class WXDLLEXPORT wxFontEnumerator
30 {
31 public:
wxFontEnumerator()32     wxFontEnumerator() {}
33 
34     // virtual dtor for the base class
~wxFontEnumerator()35     virtual ~wxFontEnumerator() {}
36 
37     // start enumerating font facenames (either all of them or those which
38     // support the given encoding) - will result in OnFacename() being
39     // called for each available facename (until they are exhausted or
40     // OnFacename returns false)
41     virtual bool EnumerateFacenames
42                  (
43                     wxFontEncoding encoding = wxFONTENCODING_SYSTEM, // all
44                     bool fixedWidthOnly = false
45                  );
46 
47     // enumerate the different encodings either for given font facename or for
48     // all facenames - will result in OnFontEncoding() being called for each
49     // available (facename, encoding) couple
50     virtual bool EnumerateEncodings(const wxString& facename = wxEmptyString);
51 
52     // callbacks which are called after one of EnumerateXXX() functions from
53     // above is invoked - all of them may return false to stop enumeration or
54     // true to continue with it
55 
56     // called by EnumerateFacenames
OnFacename(const wxString & WXUNUSED (facename))57     virtual bool OnFacename(const wxString& WXUNUSED(facename))
58         { return true; }
59 
60     // called by EnumerateEncodings
OnFontEncoding(const wxString & WXUNUSED (facename),const wxString & WXUNUSED (encoding))61     virtual bool OnFontEncoding(const wxString& WXUNUSED(facename),
62                                 const wxString& WXUNUSED(encoding))
63         { return true; }
64 
65 
66 
67     // convenience function that returns array of facenames.
68     static wxArrayString
69     GetFacenames(wxFontEncoding encoding = wxFONTENCODING_SYSTEM, // all
70                  bool fixedWidthOnly = false);
71 
72     // convenience function that returns array of all available encodings.
73     static wxArrayString GetEncodings(const wxString& facename = wxEmptyString);
74 
75     // convenience function that returns true if the given face name exist
76     // in the user's system
77     static bool IsValidFacename(const wxString &str);
78 
79 private:
80 #ifdef wxHAS_UTF8_FONTS
81     // helper for ports that only use UTF-8 encoding natively
82     bool EnumerateEncodingsUTF8(const wxString& facename);
83 #endif
84 
85     DECLARE_NO_COPY_CLASS(wxFontEnumerator)
86 };
87 
88 #endif // _WX_FONTENUM_H_
89