| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: fontmap.h
- // Purpose: interface of wxFontMapper
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxFontMapper
- wxFontMapper manages user-definable correspondence between logical font
- names and the fonts present on the machine.
- 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.
- 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.
- In case everything else fails (i.e. there is no record in config file
- and "interactive" is @false or user denied to choose any replacement),
- 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
- @library{wxcore}
- @category{cfg}
- @see wxEncodingConverter, @ref overview_nonenglish
- */
- class wxFontMapper
- {
- public:
- /**
- Default ctor.
- @note
- The preferred way of creating a wxFontMapper instance is to call wxFontMapper::Get().
- */
- wxFontMapper();
- /**
- Virtual dtor.
- */
- virtual ~wxFontMapper();
- /**
- Returns the encoding for the given charset (in the form of RFC 2046) or
- @c wxFONTENCODING_SYSTEM if couldn't decode it.
- Be careful when using this function with @a interactive set to @true
- (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.
- */
- virtual wxFontEncoding CharsetToEncoding(const wxString& charset,
- bool interactive = true);
- /**
- Get the current font mapper object. If there is no current object, creates one.
- @see Set()
- */
- static wxFontMapper* Get();
- /**
- 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
- 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.
- 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,
- bool interactive = true);
- bool GetAltForEncoding(wxFontEncoding encoding,
- wxFontEncoding* alt_encoding,
- const wxString& facename = wxEmptyString,
- bool interactive = true);
- //@}
- /**
- Returns the @e n-th supported encoding.
- Together with GetSupportedEncodingsCount() this method may be used
- to get all supported encodings.
- */
- static wxFontEncoding GetEncoding(size_t n);
- /**
- Return user-readable string describing the given encoding.
- */
- static wxString GetEncodingDescription(wxFontEncoding encoding);
- /**
- 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().
- */
- static wxFontEncoding GetEncodingFromName(const wxString& encoding);
- /**
- Return internal string identifier for the encoding (see also
- wxFontMapper::GetEncodingDescription).
- @see GetEncodingFromName()
- */
- static wxString GetEncodingName(wxFontEncoding encoding);
- /**
- Returns the number of the font encodings supported by this class.
- Together with GetEncoding() this method may be used to get
- 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.
- */
- virtual bool IsEncodingAvailable(wxFontEncoding encoding,
- const wxString& facename = wxEmptyString);
- /**
- 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.
- @see Get()
- */
- static wxFontMapper* Set(wxFontMapper* mapper);
- /**
- 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);
- };
|