]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fontmap.cpp
corrected MacSetSelection which was incorrectly deselecting also the previously selec...
[wxWidgets.git] / src / common / fontmap.cpp
index 6f1570ed8168badf3c460af701d14622686749bd..60fd3d2cbc07c0660316ff7cf1bb569e00190991 100644 (file)
@@ -28,6 +28,8 @@
     #pragma hdrstop
 #endif
 
     #pragma hdrstop
 #endif
 
+#if wxUSE_FONTMAP
+
 #ifndef WX_PRECOMP
     #include "wx/app.h"
     #include "wx/log.h"
 #ifndef WX_PRECOMP
     #include "wx/app.h"
     #include "wx/log.h"
@@ -55,6 +57,7 @@
 // ----------------------------------------------------------------------------
 
 // the config paths we use
 // ----------------------------------------------------------------------------
 
 // the config paths we use
+#if wxUSE_CONFIG
 static const wxChar* FONTMAPPER_ROOT_PATH = wxT("/wxWindows/FontMapper");
 static const wxChar* FONTMAPPER_CHARSET_PATH = wxT("Charsets");
 static const wxChar* FONTMAPPER_CHARSET_ALIAS_PATH = wxT("Aliases");
 static const wxChar* FONTMAPPER_ROOT_PATH = wxT("/wxWindows/FontMapper");
 static const wxChar* FONTMAPPER_CHARSET_PATH = wxT("Charsets");
 static const wxChar* FONTMAPPER_CHARSET_ALIAS_PATH = wxT("Aliases");
@@ -64,6 +67,7 @@ static const wxChar* FONTMAPPER_CHARSET_ALIAS_PATH = wxT("Aliases");
     static const wxChar* FONTMAPPER_FONT_FROM_ENCODING_PATH = wxT("Encodings");
     static const wxChar* FONTMAPPER_FONT_DONT_ASK = wxT("none");
 #endif // wxUSE_GUI
     static const wxChar* FONTMAPPER_FONT_FROM_ENCODING_PATH = wxT("Encodings");
     static const wxChar* FONTMAPPER_FONT_DONT_ASK = wxT("none");
 #endif // wxUSE_GUI
+#endif // wxUSE_CONFIG
 
 // encodings supported by GetEncodingDescription
 static wxFontEncoding gs_encodings[] =
 
 // encodings supported by GetEncodingDescription
 static wxFontEncoding gs_encodings[] =
@@ -84,6 +88,10 @@ static wxFontEncoding gs_encodings[] =
     wxFONTENCODING_ISO8859_14,
     wxFONTENCODING_ISO8859_15,
     wxFONTENCODING_KOI8,
     wxFONTENCODING_ISO8859_14,
     wxFONTENCODING_ISO8859_15,
     wxFONTENCODING_KOI8,
+    wxFONTENCODING_CP932,
+    wxFONTENCODING_CP936,
+    wxFONTENCODING_CP949,
+    wxFONTENCODING_CP950,
     wxFONTENCODING_CP1250,
     wxFONTENCODING_CP1251,
     wxFONTENCODING_CP1252,
     wxFONTENCODING_CP1250,
     wxFONTENCODING_CP1251,
     wxFONTENCODING_CP1252,
@@ -116,6 +124,10 @@ static const wxChar* gs_encodingDescs[] =
     wxTRANSLATE( "Celtic (ISO-8859-14)" ),
     wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ),
     wxTRANSLATE( "KOI8-R" ),
     wxTRANSLATE( "Celtic (ISO-8859-14)" ),
     wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ),
     wxTRANSLATE( "KOI8-R" ),
+    wxTRANSLATE( "Windows Japanese (CP 932)" ),
+    wxTRANSLATE( "Windows Chinese Simplified (CP 936)" ),
+    wxTRANSLATE( "Windows Korean (CP 949)" ),
+    wxTRANSLATE( "Windows Chinese Traditional (CP 950)" ),
     wxTRANSLATE( "Windows Central European (CP 1250)" ),
     wxTRANSLATE( "Windows Cyrillic (CP 1251)" ),
     wxTRANSLATE( "Windows Western European (CP 1252)" ),
     wxTRANSLATE( "Windows Central European (CP 1250)" ),
     wxTRANSLATE( "Windows Cyrillic (CP 1251)" ),
     wxTRANSLATE( "Windows Western European (CP 1252)" ),
@@ -129,7 +141,7 @@ static const wxChar* gs_encodingDescs[] =
     wxTRANSLATE( "Unicode 8 bit (UTF-8)" ),
 };
 
     wxTRANSLATE( "Unicode 8 bit (UTF-8)" ),
 };
 
-// and the internal names
+// and the internal names (these are not translated on purpose!)
 static const wxChar* gs_encodingNames[] =
 {
     wxT( "iso-8859-1" ),
 static const wxChar* gs_encodingNames[] =
 {
     wxT( "iso-8859-1" ),
@@ -148,6 +160,10 @@ static const wxChar* gs_encodingNames[] =
     wxT( "iso-8859-14" ),
     wxT( "iso-8859-15" ),
     wxT( "koi8-r" ),
     wxT( "iso-8859-14" ),
     wxT( "iso-8859-15" ),
     wxT( "koi8-r" ),
+    wxT( "windows-932" ),
+    wxT( "windows-936" ),
+    wxT( "windows-949" ),
+    wxT( "windows-950" ),
     wxT( "windows-1250" ),
     wxT( "windows-1251" ),
     wxT( "windows-1252" ),
     wxT( "windows-1250" ),
     wxT( "windows-1251" ),
     wxT( "windows-1252" ),
@@ -157,8 +173,8 @@ static const wxChar* gs_encodingNames[] =
     wxT( "windows-1256" ),
     wxT( "windows-1257" ),
     wxT( "windows-437" ),
     wxT( "windows-1256" ),
     wxT( "windows-1257" ),
     wxT( "windows-437" ),
-    wxT( "utf7" ),
-    wxT( "utf8" ),
+    wxT( "utf-7" ),
+    wxT( "utf-8" ),
 };
 
 // ----------------------------------------------------------------------------
 };
 
 // ----------------------------------------------------------------------------
@@ -211,6 +227,7 @@ wxFontMapper::wxFontMapper()
 {
 #if wxUSE_CONFIG
     m_config = NULL;
 {
 #if wxUSE_CONFIG
     m_config = NULL;
+    m_configIsDummy = FALSE;
 #endif // wxUSE_CONFIG
 
 #if wxUSE_GUI
 #endif // wxUSE_CONFIG
 
 #if wxUSE_GUI
@@ -260,10 +277,27 @@ wxConfigBase *wxFontMapper::GetConfig()
             // but will allow us to remember the results of the questions at
             // least during this run
             m_config = new wxMemoryConfig;
             // but will allow us to remember the results of the questions at
             // least during this run
             m_config = new wxMemoryConfig;
-            wxConfig::Set(m_config);
+            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.
+        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;
 }
 
     return m_config;
 }
 
@@ -363,7 +397,7 @@ wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding)
     {
         if ( gs_encodings[i] == encoding )
         {
     {
         if ( gs_encodings[i] == encoding )
         {
-            return wxGetTranslation(gs_encodingNames[i]);
+            return gs_encodingNames[i];
         }
     }
 
         }
     }
 
@@ -376,6 +410,12 @@ wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding)
 wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
                                                bool interactive)
 {
 wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
                                                bool interactive)
 {
+    // a special pseudo encoding which means "don't ask me about this charset
+    // any more" - we need it to avoid driving the user crazy with asking him
+    // time after time about the same charset which he [presumably] doesn't
+    // have the fonts fot
+    static const int wxFONTENCODING_UNKNOWN = -2;
+
     wxFontEncoding encoding = wxFONTENCODING_SYSTEM;
 
     // we're going to modify it, make a copy
     wxFontEncoding encoding = wxFONTENCODING_SYSTEM;
 
     // we're going to modify it, make a copy
@@ -392,6 +432,12 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
         long value = config->Read(charset, -1l);
         if ( value != -1 )
         {
         long value = config->Read(charset, -1l);
         if ( value != -1 )
         {
+            if ( value == wxFONTENCODING_UNKNOWN )
+            {
+                // don't try to find it, in particular don't ask the user
+                return wxFONTENCODING_SYSTEM;
+            }
+
             if ( value >= 0 && value <= wxFONTENCODING_MAX )
             {
                 encoding = (wxFontEncoding)value;
             if ( value >= 0 && value <= wxFONTENCODING_MAX )
             {
                 encoding = (wxFontEncoding)value;
@@ -418,7 +464,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
 
         RestorePath(pathOld);
     }
 
         RestorePath(pathOld);
     }
-#endif
+#endif // wxUSE_CONFIG
 
     // if didn't find it there, try to recognize it ourselves
     if ( encoding == wxFONTENCODING_SYSTEM )
 
     // if didn't find it there, try to recognize it ourselves
     if ( encoding == wxFONTENCODING_SYSTEM )
@@ -568,24 +614,25 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
         if ( n != -1 )
         {
             encoding = gs_encodings[n];
         if ( n != -1 )
         {
             encoding = gs_encodings[n];
+        }
 
 #if wxUSE_CONFIG
         // save the result in the config now
 
 #if wxUSE_CONFIG
         // save the result in the config now
-            if ( ChangePath(FONTMAPPER_CHARSET_PATH, &pathOld) )
-            {
-                wxConfigBase *config = GetConfig();
-
-                // remember the alt encoding for this charset
-                if ( !config->Write(charset, (long)encoding) )
-                {
-                    wxLogError(_("Failed to remember the encoding for the charset '%s'."), charset.c_str());
-                }
+        if ( ChangePath(FONTMAPPER_CHARSET_PATH, &pathOld) )
+        {
+            wxConfigBase *config = GetConfig();
 
 
-                RestorePath(pathOld);
+            // remember the alt encoding for this charset - or remember that
+            // we don't know it
+            long value = n == -1 ? wxFONTENCODING_UNKNOWN : (long)encoding;
+            if ( !config->Write(charset, value) )
+            {
+                wxLogError(_("Failed to remember the encoding for the charset '%s'."), charset.c_str());
             }
             }
-#endif // wxUSE_CONFIG
+
+            RestorePath(pathOld);
         }
         }
-        //else: cancelled
+#endif // wxUSE_CONFIG
     }
 #endif // wxUSE_GUI
 
     }
 #endif // wxUSE_GUI
 
@@ -677,7 +724,8 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
         // wxFatalError doesn't return
     }
 
         // wxFatalError doesn't return
     }
 
-    wxString configEntry, encName = GetEncodingName(encoding);
+    wxString configEntry,
+             encName = GetEncodingName(encoding);
     if ( !!facename )
     {
         configEntry = facename + _T("_");
     if ( !!facename )
     {
         configEntry = facename + _T("_");
@@ -734,6 +782,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
 #endif // wxUSE_CONFIG
 
     // ask the user
 #endif // wxUSE_CONFIG
 
     // ask the user
+#if wxUSE_FONTDLG
     if ( interactive )
     {
         wxString title(m_titleDialog);
     if ( interactive )
     {
         wxString title(m_titleDialog);
@@ -793,6 +842,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
         }
     }
     //else: we're in non-interactive mode
         }
     }
     //else: we're in non-interactive mode
+#endif // wxUSE_FONTDLG
 
     // now try the default mappings:
     wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding);
 
     // now try the default mappings:
     wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding);
@@ -835,3 +885,5 @@ bool wxFontMapper::IsEncodingAvailable(wxFontEncoding encoding,
 }
 
 #endif // wxUSE_GUI
 }
 
 #endif // wxUSE_GUI
+
+#endif // wxUSE_FONTMAP