2008-03-08 08:52:38 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: fontmap.h
|
2008-03-10 11:24:38 -04:00
|
|
|
// Purpose: interface of wxFontMapper
|
2008-03-08 08:52:38 -05:00
|
|
|
// Author: wxWidgets team
|
2010-07-13 09:29:13 -04:00
|
|
|
// Licence: wxWindows licence
|
2008-03-08 08:52:38 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxFontMapper
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
wxFontMapper manages user-definable correspondence between logical font
|
|
|
|
names and the fonts present on the machine.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
The default implementations of all functions will ask the user if they are
|
|
|
|
not capable of finding the answer themselves and store the answer in a
|
|
|
|
config file (configurable via SetConfigXXX functions). This behaviour may
|
|
|
|
be disabled by giving the value of @false to "interactive" parameter.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
However, the functions will always consult the config file to allow the
|
|
|
|
user-defined values override the default logic and there is no way to
|
|
|
|
disable this - which shouldn't be ever needed because if "interactive" was
|
|
|
|
never @true, the config file is never created anyhow.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
In case everything else fails (i.e. there is no record in config file
|
2008-03-08 09:43:31 -05:00
|
|
|
and "interactive" is @false or user denied to choose any replacement),
|
2008-09-25 16:00:31 -04:00
|
|
|
the class queries wxEncodingConverter for "equivalent" encodings
|
|
|
|
(e.g. iso8859-2 and cp1250) and tries them.
|
|
|
|
|
|
|
|
|
|
|
|
@section fontmapper_mbconv Using wxFontMapper in conjunction with wxMBConv classes
|
|
|
|
|
|
|
|
If you need to display text in encoding which is not available at host
|
|
|
|
system (see wxFontMapper::IsEncodingAvailable), you may use these two
|
|
|
|
classes to find font in some similar encoding (see wxFontMapper::GetAltForEncoding)
|
|
|
|
and convert the text to this encoding (wxMBConv classes).
|
|
|
|
Following code snippet demonstrates it:
|
|
|
|
|
|
|
|
@code
|
|
|
|
if (!wxFontMapper::Get()->IsEncodingAvailable(enc, facename))
|
|
|
|
{
|
|
|
|
wxFontEncoding alternative;
|
|
|
|
if (wxFontMapper::Get()->GetAltForEncoding(enc, &alternative,
|
|
|
|
facename, false))
|
|
|
|
{
|
|
|
|
wxCSConv convFrom(wxFontMapper::Get()->GetEncodingName(enc));
|
|
|
|
wxCSConv convTo(wxFontMapper::Get()->GetEncodingName(alternative));
|
|
|
|
text = wxString(text.mb_str(convFrom), convTo);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
...failure (or we may try iso8859-1/7bit ASCII)...
|
|
|
|
}
|
|
|
|
...display text...
|
|
|
|
@endcode
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
2009-02-20 06:34:52 -05:00
|
|
|
@category{cfg}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2009-02-20 06:34:52 -05:00
|
|
|
@see wxEncodingConverter, @ref overview_nonenglish
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-03-08 09:43:31 -05:00
|
|
|
class wxFontMapper
|
2008-03-08 08:52:38 -05:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Default ctor.
|
2008-09-25 16:00:31 -04:00
|
|
|
|
|
|
|
@note
|
|
|
|
The preferred way of creating a wxFontMapper instance is to call wxFontMapper::Get().
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
wxFontMapper();
|
|
|
|
|
|
|
|
/**
|
2008-09-25 16:00:31 -04:00
|
|
|
Virtual dtor.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-09-25 16:00:31 -04:00
|
|
|
virtual ~wxFontMapper();
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the encoding for the given charset (in the form of RFC 2046) or
|
|
|
|
@c wxFONTENCODING_SYSTEM if couldn't decode it.
|
2008-09-25 16:00:31 -04:00
|
|
|
|
2008-03-09 08:33:59 -04:00
|
|
|
Be careful when using this function with @a interactive set to @true
|
2008-03-08 08:52:38 -05:00
|
|
|
(default value) as the function then may show a dialog box to the user which
|
|
|
|
may lead to unexpected reentrancies and may also take a significantly longer
|
|
|
|
time than a simple function call. For these reasons, it is almost always a bad
|
|
|
|
idea to call this function from the event handlers for repeatedly generated
|
|
|
|
events such as @c EVT_PAINT.
|
|
|
|
*/
|
2008-10-27 17:26:54 -04:00
|
|
|
virtual wxFontEncoding CharsetToEncoding(const wxString& charset,
|
|
|
|
bool interactive = true);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
2008-09-25 16:00:31 -04:00
|
|
|
Get the current font mapper object. If there is no current object, creates one.
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-09 08:33:59 -04:00
|
|
|
@see Set()
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
static wxFontMapper* Get();
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
2008-09-25 16:00:31 -04:00
|
|
|
Returns the array of all possible names for the given encoding.
|
|
|
|
|
|
|
|
The array is @NULL-terminated. IF it isn't empty, the first name in it is
|
|
|
|
the canonical encoding name, i.e. the same string as returned by
|
2008-03-08 08:52:38 -05:00
|
|
|
GetEncodingName().
|
|
|
|
*/
|
|
|
|
static const wxChar** GetAllEncodingNames(wxFontEncoding encoding);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Find an alternative for the given encoding (which is supposed to not be
|
|
|
|
available on this system). If successful, return @true and fill info
|
|
|
|
structure with the parameters required to create the font, otherwise
|
|
|
|
return @false.
|
2008-09-25 16:00:31 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
The first form is for wxWidgets' internal use while the second one
|
|
|
|
is better suitable for general use -- it returns wxFontEncoding which
|
|
|
|
can consequently be passed to wxFont constructor.
|
|
|
|
*/
|
|
|
|
bool GetAltForEncoding(wxFontEncoding encoding,
|
|
|
|
wxNativeEncodingInfo* info,
|
|
|
|
const wxString& facename = wxEmptyString,
|
2008-03-09 08:33:59 -04:00
|
|
|
bool interactive = true);
|
2008-03-08 09:43:31 -05:00
|
|
|
bool GetAltForEncoding(wxFontEncoding encoding,
|
|
|
|
wxFontEncoding* alt_encoding,
|
|
|
|
const wxString& facename = wxEmptyString,
|
2008-03-09 08:33:59 -04:00
|
|
|
bool interactive = true);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
2008-09-25 16:00:31 -04:00
|
|
|
Returns the @e n-th supported encoding.
|
|
|
|
|
|
|
|
Together with GetSupportedEncodingsCount() this method may be used
|
|
|
|
to get all supported encodings.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
static wxFontEncoding GetEncoding(size_t n);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Return user-readable string describing the given encoding.
|
|
|
|
*/
|
|
|
|
static wxString GetEncodingDescription(wxFontEncoding encoding);
|
|
|
|
|
|
|
|
/**
|
2008-09-25 16:00:31 -04:00
|
|
|
Return the encoding corresponding to the given internal name.
|
|
|
|
|
|
|
|
This function is the inverse of GetEncodingName() and is intentionally
|
|
|
|
less general than CharsetToEncoding(), i.e. it doesn't try to make any
|
|
|
|
guesses nor ever asks the user. It is meant just as a way of restoring
|
|
|
|
objects previously serialized using GetEncodingName().
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
static wxFontEncoding GetEncodingFromName(const wxString& encoding);
|
|
|
|
|
|
|
|
/**
|
2008-03-08 09:43:31 -05:00
|
|
|
Return internal string identifier for the encoding (see also
|
2008-09-25 16:00:31 -04:00
|
|
|
wxFontMapper::GetEncodingDescription).
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-09 08:33:59 -04:00
|
|
|
@see GetEncodingFromName()
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
static wxString GetEncodingName(wxFontEncoding encoding);
|
|
|
|
|
|
|
|
/**
|
2008-09-25 16:00:31 -04:00
|
|
|
Returns the number of the font encodings supported by this class.
|
|
|
|
Together with GetEncoding() this method may be used to get
|
2008-03-08 08:52:38 -05:00
|
|
|
all supported encodings.
|
|
|
|
*/
|
|
|
|
static size_t GetSupportedEncodingsCount();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Check whether given encoding is available in given face or not.
|
|
|
|
If no facename is given, find @e any font in this encoding.
|
|
|
|
*/
|
2008-10-27 17:26:54 -04:00
|
|
|
virtual bool IsEncodingAvailable(wxFontEncoding encoding,
|
|
|
|
const wxString& facename = wxEmptyString);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Set the current font mapper object and return previous one (may be @NULL).
|
|
|
|
This method is only useful if you want to plug-in an alternative font mapper
|
|
|
|
into wxWidgets.
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-09 08:33:59 -04:00
|
|
|
@see Get()
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
static wxFontMapper* Set(wxFontMapper* mapper);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Set the root config path to use (should be an absolute path).
|
|
|
|
*/
|
|
|
|
void SetConfigPath(const wxString& prefix);
|
|
|
|
|
|
|
|
/**
|
|
|
|
The parent window for modal dialogs.
|
|
|
|
*/
|
|
|
|
void SetDialogParent(wxWindow* parent);
|
|
|
|
|
|
|
|
/**
|
|
|
|
The title for the dialogs (note that default is quite reasonable).
|
|
|
|
*/
|
|
|
|
void SetDialogTitle(const wxString& title);
|
|
|
|
};
|
2008-03-10 11:24:38 -04:00
|
|
|
|