-#if wxUSE_CONFIG
- if ( m_configIsDummy )
- delete m_config;
-#endif // wxUSE_CONFIG
-}
-
-wxFontMapper *wxFontMapper::sm_instance = NULL;
-
-/*static*/ wxFontMapper *wxFontMapper::Get()
-{
- if ( !sm_instance )
- sm_instance = new wxFontMapper;
- return sm_instance;
-}
-
-/*static*/ wxFontMapper *wxFontMapper::Set(wxFontMapper *mapper)
-{
- wxFontMapper *old = sm_instance;
- sm_instance = mapper;
- return old;
-}
-
-class wxFontMapperModule: public wxModule
-{
-public:
- wxFontMapperModule() : wxModule() {}
- virtual bool OnInit() { return TRUE; }
- virtual void OnExit() { delete wxFontMapper::Set(NULL); }
-
- DECLARE_DYNAMIC_CLASS(wxFontMapperModule)
-};
-
-IMPLEMENT_DYNAMIC_CLASS(wxFontMapperModule, wxModule)
-
-// ----------------------------------------------------------------------------
-// customisation
-// ----------------------------------------------------------------------------
-
-#if wxUSE_CONFIG
-
-/* static */ const wxChar *wxFontMapper::GetDefaultConfigPath()
-{
- return FONTMAPPER_ROOT_PATH;
-}
-
-void wxFontMapper::SetConfigPath(const wxString& prefix)
-{
- wxCHECK_RET( !prefix.IsEmpty() && prefix[0] == wxCONFIG_PATH_SEPARATOR,
- wxT("an absolute path should be given to wxFontMapper::SetConfigPath()") );
-
- m_configRootPath = prefix;
-}
-
-// ----------------------------------------------------------------------------
-// get config object and path for it
-// ----------------------------------------------------------------------------
-
-wxConfigBase *wxFontMapper::GetConfig()
-{
- if ( !m_config )
- {
- // try the default
- m_config = wxConfig::Get(FALSE /*don't create on demand*/ );
-
- if ( !m_config )
- {
- // we still want to have a config object because otherwise we would
- // keep asking the user the same questions in the interactive mode,
- // so create a dummy config which won't write to any files/registry
- // but will allow us to remember the results of the questions at
- // least during this run
- m_config = new wxMemoryConfig;
- m_configIsDummy = TRUE;
- // VS: we can't call wxConfig::Set(m_config) here because that would
- // disable automatic wxConfig instance creation if this code was
- // called before wxApp::OnInit (this happens in wxGTK -- it sets
- // default wxFont encoding in wxApp::Initialize())
- }
- }
-
- if ( m_configIsDummy && wxConfig::Get(FALSE) != NULL )
- {
- // VS: in case we created dummy m_config (see above), we want to switch back
- // to the real one as soon as one becomes available.
- delete m_config;
- m_config = wxConfig::Get(FALSE);
- m_configIsDummy = FALSE;
- // FIXME: ideally, we should add keys from dummy config to the real one now,
- // but it is a low-priority task because typical wxWin application
- // either doesn't use wxConfig at all or creates wxConfig object in
- // wxApp::OnInit(), before any real interaction with the user takes
- // place...
- }
-
- return m_config;
-}
-
-const wxString& wxFontMapper::GetConfigPath()
-{
- if ( !m_configRootPath )
- {
- // use the default
- m_configRootPath = GetDefaultConfigPath();
- }
-
- return m_configRootPath;
-}
-#endif
-
-bool wxFontMapper::ChangePath(const wxString& pathNew, wxString *pathOld)
-{
-#if wxUSE_CONFIG
- wxConfigBase *config = GetConfig();
- if ( !config )
- return FALSE;
-
- *pathOld = config->GetPath();
-
- wxString path = GetConfigPath();
- if ( path.IsEmpty() || path.Last() != wxCONFIG_PATH_SEPARATOR )
- {
- path += wxCONFIG_PATH_SEPARATOR;
- }
-
- wxASSERT_MSG( !pathNew || (pathNew[0] != wxCONFIG_PATH_SEPARATOR),
- wxT("should be a relative path") );
-
- path += pathNew;
-
- config->SetPath(path);
-
- return TRUE;
-#else
- return FALSE;
-#endif
-}
-
-void wxFontMapper::RestorePath(const wxString& pathOld)
-{
-#if wxUSE_CONFIG
- GetConfig()->SetPath(pathOld);
-#else
-#endif
-}
-
-// ----------------------------------------------------------------------------
-// charset/encoding correspondence
-// ----------------------------------------------------------------------------
-
-/* static */
-wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding)
-{
- if ( encoding == wxFONTENCODING_DEFAULT )
- {
- return _("Default encoding");
- }
-
- const size_t count = WXSIZEOF(gs_encodingDescs);
-
- for ( size_t i = 0; i < count; i++ )
- {
- if ( gs_encodings[i] == encoding )
- {
- return wxGetTranslation(gs_encodingDescs[i]);
- }
- }
-
- wxString str;
- str.Printf(_("Unknown encoding (%d)"), encoding);
-
- return str;
-}
-
-/* static */
-wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding)
-{
- if ( encoding == wxFONTENCODING_DEFAULT )
- {
- return _("default");
- }
-
- const size_t count = WXSIZEOF(gs_encodingNames);
-
- for ( size_t i = 0; i < count; i++ )
- {
- if ( gs_encodings[i] == encoding )
- {
- return gs_encodingNames[i];
- }
- }
-
- wxString str;
- str.Printf(_("unknown-%d"), encoding);
-
- return str;