]>
Commit | Line | Data |
---|---|---|
3c1866e8 VZ |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: wx/fontmap.h | |
3 | // Purpose: wxFontMapper class | |
4 | // Author: Vadim Zeitlin | |
5 | // Modified by: | |
6 | // Created: 04.11.99 | |
7 | // RCS-ID: $Id$ | |
8 | // Copyright: (c) Vadim Zeitlin | |
371a5b4e | 9 | // Licence: wxWindows licence |
3c1866e8 VZ |
10 | ///////////////////////////////////////////////////////////////////////////// |
11 | ||
12 | #ifndef _WX_FONTMAPPER_H_ | |
13 | #define _WX_FONTMAPPER_H_ | |
14 | ||
3c1866e8 VZ |
15 | // ---------------------------------------------------------------------------- |
16 | // headers | |
17 | // ---------------------------------------------------------------------------- | |
18 | ||
1e6feb95 VZ |
19 | #if wxUSE_FONTMAP |
20 | ||
f6bcfd97 | 21 | #include "wx/fontenc.h" // for wxFontEncoding |
3c1866e8 | 22 | |
1e6feb95 VZ |
23 | #if wxUSE_GUI |
24 | #include "wx/fontutil.h" // for wxNativeEncodingInfo | |
25 | #endif // wxUSE_GUI | |
26 | ||
f1c75e0f | 27 | #if wxUSE_CONFIG && wxUSE_FILECONFIG |
bddd7a8d | 28 | class WXDLLIMPEXP_BASE wxConfigBase; |
f6bcfd97 BP |
29 | #endif // wxUSE_CONFIG |
30 | ||
bddd7a8d | 31 | class WXDLLIMPEXP_BASE wxFontMapper; |
e2478fde | 32 | |
f6bcfd97 | 33 | #if wxUSE_GUI |
bddd7a8d | 34 | class WXDLLIMPEXP_CORE wxWindow; |
f6bcfd97 | 35 | #endif // wxUSE_GUI |
3c1866e8 | 36 | |
e2478fde VZ |
37 | // ============================================================================ |
38 | // wxFontMapper manages user-definable correspondence between wxWindows font | |
39 | // encodings and the fonts present on the machine. | |
3c1866e8 | 40 | // |
e2478fde VZ |
41 | // This is a singleton class, font mapper objects can only be accessed using |
42 | // wxFontMapper::Get(). | |
43 | // ============================================================================ | |
44 | ||
45 | // ---------------------------------------------------------------------------- | |
46 | // wxFontMapperBase: this is a non-interactive class which just uses its built | |
47 | // in knowledge of the encodings equivalence | |
3c1866e8 VZ |
48 | // ---------------------------------------------------------------------------- |
49 | ||
bddd7a8d | 50 | class WXDLLIMPEXP_BASE wxFontMapperBase |
3c1866e8 VZ |
51 | { |
52 | public: | |
e2478fde VZ |
53 | // constructtor and such |
54 | // --------------------- | |
55 | ||
3c1866e8 | 56 | // default ctor |
e2478fde | 57 | wxFontMapperBase(); |
3c1866e8 | 58 | |
e2478fde VZ |
59 | // virtual dtor for any base class |
60 | virtual ~wxFontMapperBase(); | |
3c1866e8 | 61 | |
142b3bc2 VS |
62 | // return instance of the wxFontMapper singleton |
63 | static wxFontMapper *Get(); | |
e2478fde | 64 | |
f1c75e0f | 65 | // set the singleton to 'mapper' instance and return previous one |
142b3bc2 VS |
66 | static wxFontMapper *Set(wxFontMapper *mapper); |
67 | ||
e2478fde VZ |
68 | // translates charset strings to encoding |
69 | // -------------------------------------- | |
6648cd46 | 70 | |
3c1866e8 VZ |
71 | // returns the encoding for the given charset (in the form of RFC 2046) or |
72 | // wxFONTENCODING_SYSTEM if couldn't decode it | |
e2478fde VZ |
73 | // |
74 | // interactive parameter is ignored in the base class, we behave as if it | |
75 | // were always false | |
3c1866e8 | 76 | virtual wxFontEncoding CharsetToEncoding(const wxString& charset, |
e2478fde VZ |
77 | bool interactive = true); |
78 | ||
e2478fde VZ |
79 | // information about supported encodings |
80 | // ------------------------------------- | |
3c1866e8 | 81 | |
e2478fde VZ |
82 | // get the number of font encodings we know about |
83 | static size_t GetSupportedEncodingsCount(); | |
84 | ||
85 | // get the n-th supported encoding | |
86 | static wxFontEncoding GetEncoding(size_t n); | |
7beba2fc VZ |
87 | |
88 | // return internal string identifier for the encoding (see also | |
89 | // GetEncodingDescription()) | |
90 | static wxString GetEncodingName(wxFontEncoding encoding); | |
91 | ||
92 | // return user-readable string describing the given encoding | |
93 | // | |
94 | // NB: hard-coded now, but might change later (read it from config?) | |
95 | static wxString GetEncodingDescription(wxFontEncoding encoding); | |
96 | ||
3c1866e8 VZ |
97 | |
98 | // functions which allow to configure the config object used: by default, | |
99 | // the global one (from wxConfigBase::Get() will be used) and the default | |
100 | // root path for the config settings is the string returned by | |
101 | // GetDefaultConfigPath() | |
102 | // ---------------------------------------------------------------------- | |
103 | ||
f1c75e0f | 104 | #if wxUSE_CONFIG && wxUSE_FILECONFIG |
3c1866e8 VZ |
105 | // set the config object to use (may be NULL to use default) |
106 | void SetConfig(wxConfigBase *config) { m_config = config; } | |
107 | ||
108 | // set the root config path to use (should be an absolute path) | |
109 | void SetConfigPath(const wxString& prefix); | |
110 | ||
111 | // return default config path | |
112 | static const wxChar *GetDefaultConfigPath(); | |
e2478fde | 113 | #endif // wxUSE_CONFIG |
3c1866e8 | 114 | |
f6bcfd97 | 115 | |
e2478fde | 116 | protected: |
f1c75e0f | 117 | #if wxUSE_CONFIG && wxUSE_FILECONFIG |
e2478fde | 118 | // get the config object we're using -- if it wasn't set explicitly, this |
3c1866e8 VZ |
119 | // function will use wxConfig::Get() to get the global one |
120 | wxConfigBase *GetConfig(); | |
121 | ||
e2478fde | 122 | // gets the root path for our settings -- if it wasn't set explicitly, use |
3c1866e8 VZ |
123 | // GetDefaultConfigPath() |
124 | const wxString& GetConfigPath(); | |
125 | ||
e2478fde VZ |
126 | // change to the given (relative) path in the config, return true if ok |
127 | // (then GetConfig() will return something !NULL), false if no config | |
3c1866e8 VZ |
128 | // object |
129 | // | |
130 | // caller should provide a pointer to the string variable which should be | |
131 | // later passed to RestorePath() | |
132 | bool ChangePath(const wxString& pathNew, wxString *pathOld); | |
133 | ||
134 | // restore the config path after use | |
135 | void RestorePath(const wxString& pathOld); | |
136 | ||
e2478fde VZ |
137 | // config object and path (in it) to use |
138 | wxConfigBase *m_config; | |
139 | bool m_configIsDummy; | |
140 | ||
141 | wxString m_configRootPath; | |
142 | #endif // wxUSE_CONFIG | |
143 | ||
144 | private: | |
145 | // the global fontmapper object or NULL | |
146 | static wxFontMapper *sm_instance; | |
147 | ||
148 | friend class wxFontMapperPathChanger; | |
149 | ||
150 | DECLARE_NO_COPY_CLASS(wxFontMapperBase) | |
151 | }; | |
152 | ||
153 | // ---------------------------------------------------------------------------- | |
154 | // wxFontMapper: interactive extension of wxFontMapperBase | |
155 | // | |
156 | // The default implementations of all functions will ask the user if they are | |
157 | // not capable of finding the answer themselves and store the answer in a | |
158 | // config file (configurable via SetConfigXXX functions). This behaviour may | |
159 | // be disabled by giving the value of false to "interactive" parameter. | |
160 | // However, the functions will always consult the config file to allow the | |
161 | // user-defined values override the default logic and there is no way to | |
162 | // disable this -- which shouldn't be ever needed because if "interactive" was | |
163 | // never true, the config file is never created anyhow. | |
164 | // ---------------------------------------------------------------------------- | |
165 | ||
f6bcfd97 | 166 | #if wxUSE_GUI |
e2478fde | 167 | |
bddd7a8d | 168 | class WXDLLIMPEXP_CORE wxFontMapper : public wxFontMapperBase |
e2478fde VZ |
169 | { |
170 | public: | |
171 | // default ctor | |
172 | wxFontMapper(); | |
173 | ||
174 | // virtual dtor for a base class | |
175 | virtual ~wxFontMapper(); | |
176 | ||
177 | // working with the encodings | |
178 | // -------------------------- | |
179 | ||
180 | // returns the encoding for the given charset (in the form of RFC 2046) or | |
181 | // wxFONTENCODING_SYSTEM if couldn't decode it | |
182 | virtual wxFontEncoding CharsetToEncoding(const wxString& charset, | |
183 | bool interactive = true); | |
184 | ||
185 | // find an alternative for the given encoding (which is supposed to not be | |
186 | // available on this system). If successful, return true and fill info | |
187 | // structure with the parameters required to create the font, otherwise | |
188 | // return false | |
189 | virtual bool GetAltForEncoding(wxFontEncoding encoding, | |
190 | wxNativeEncodingInfo *info, | |
191 | const wxString& facename = wxEmptyString, | |
192 | bool interactive = true); | |
193 | ||
194 | // version better suitable for 'public' use. Returns wxFontEcoding | |
195 | // that can be used it wxFont ctor | |
196 | bool GetAltForEncoding(wxFontEncoding encoding, | |
197 | wxFontEncoding *alt_encoding, | |
198 | const wxString& facename = wxEmptyString, | |
199 | bool interactive = true); | |
200 | ||
201 | // checks whether given encoding is available in given face or not. | |
202 | // If no facename is given, | |
203 | virtual bool IsEncodingAvailable(wxFontEncoding encoding, | |
204 | const wxString& facename = wxEmptyString); | |
205 | ||
206 | ||
207 | // configure the appearance of the dialogs we may popup | |
208 | // ---------------------------------------------------- | |
209 | ||
210 | // the parent window for modal dialogs | |
211 | void SetDialogParent(wxWindow *parent) { m_windowParent = parent; } | |
212 | ||
213 | // the title for the dialogs (note that default is quite reasonable) | |
214 | void SetDialogTitle(const wxString& title) { m_titleDialog = title; } | |
215 | ||
216 | ||
217 | protected: | |
7beba2fc VZ |
218 | // GetAltForEncoding() helper: tests for the existence of the given |
219 | // encoding and saves the result in config if ok - this results in the | |
220 | // following (desired) behaviour: when an unknown/unavailable encoding is | |
221 | // requested for the first time, the user is asked about a replacement, | |
222 | // but if he doesn't choose any and the default logic finds one, it will | |
223 | // be saved in the config so that the user won't be asked about it any | |
224 | // more | |
225 | bool TestAltEncoding(const wxString& configEntry, | |
226 | wxFontEncoding encReplacement, | |
227 | wxNativeEncodingInfo *info); | |
228 | ||
3c1866e8 VZ |
229 | // the title for our dialogs |
230 | wxString m_titleDialog; | |
231 | ||
232 | // the parent window for our dialogs | |
233 | wxWindow *m_windowParent; | |
7beba2fc | 234 | |
142b3bc2 | 235 | private: |
22f3361e | 236 | DECLARE_NO_COPY_CLASS(wxFontMapper) |
3c1866e8 VZ |
237 | }; |
238 | ||
e2478fde VZ |
239 | #else // !wxUSE_GUI |
240 | ||
bddd7a8d | 241 | class WXDLLIMPEXP_BASE wxFontMapper : public wxFontMapperBase |
e2478fde VZ |
242 | { |
243 | }; | |
244 | ||
245 | #endif // wxUSE_GUI/!wxUSE_GUI | |
246 | ||
7beba2fc VZ |
247 | // ---------------------------------------------------------------------------- |
248 | // global variables | |
249 | // ---------------------------------------------------------------------------- | |
250 | ||
e2478fde VZ |
251 | // the default font mapper for wxWindows programs do NOT use! This is for |
252 | // backward compatibility, use wxFontMapper::Get() instead | |
142b3bc2 | 253 | #define wxTheFontMapper (wxFontMapper::Get()) |
7beba2fc | 254 | |
adf9e099 VZ |
255 | #else // !wxUSE_FONTMAP |
256 | ||
257 | #if wxUSE_GUI | |
258 | // wxEncodingToCodepage (utils.cpp) needs wxGetNativeFontEncoding | |
392c7148 | 259 | #include "wx/fontutil.h" |
adf9e099 VZ |
260 | #endif |
261 | ||
262 | #endif // wxUSE_FONTMAP/!wxUSE_FONTMAP | |
1e6feb95 | 263 | |
3c1866e8 | 264 | #endif // _WX_FONTMAPPER_H_ |
e2478fde | 265 |