]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/convauto.h
Better fix
[wxWidgets.git] / include / wx / convauto.h
index ec32b93c431629baaa85853b48ba47464cf0846b..551f1dc96c6c700bb21dd9c3277b5418e9eb31c9 100644 (file)
@@ -12,6 +12,7 @@
 #define _WX_CONVAUTO_H_
 
 #include "wx/strconv.h"
+#include "wx/fontenc.h"
 
 #if wxUSE_WCHAR_T
 
@@ -23,23 +24,53 @@ class WXDLLIMPEXP_BASE wxConvAuto : public wxMBConv
 {
 public:
     // default ctor, the real conversion will be created on demand
-    wxConvAuto() { m_conv = NULL; /* the rest will be initialized later */ }
+    wxConvAuto(wxFontEncoding enc = wxFONTENCODING_DEFAULT)
+    {
+        Init();
+
+        m_encDefault = enc;
+    }
 
     // copy ctor doesn't initialize anything neither as conversion can only be
     // deduced on first use
-    wxConvAuto(const wxConvAuto& WXUNUSED(other)) { m_conv = NULL; }
+    wxConvAuto(const wxConvAuto& other) : wxMBConv()
+    {
+        Init();
+
+        m_encDefault = other.m_encDefault;
+    }
+
+    virtual ~wxConvAuto()
+    {
+        if ( m_ownsConv )
+            delete m_conv;
+    }
+
+    // get/set the fall-back encoding used when the input text doesn't have BOM
+    // and isn't UTF-8
+    //
+    // special values are wxFONTENCODING_MAX meaning not to use any fall back
+    // at all (but just fail to convert in this case) and wxFONTENCODING_SYSTEM
+    // meaning to use the encoding of the system locale
+    static wxFontEncoding GetFallbackEncoding() { return ms_defaultMBEncoding; }
+    static void SetFallbackEncoding(wxFontEncoding enc);
+    static void DisableFallbackEncoding()
+    {
+        SetFallbackEncoding(wxFONTENCODING_MAX);
+    }
 
-    virtual ~wxConvAuto() { if ( m_conv && m_ownsConv ) delete m_conv; }
 
     // override the base class virtual function(s) to use our m_conv
     virtual size_t ToWChar(wchar_t *dst, size_t dstLen,
-                           const char *src, size_t srcLen = -1) const;
+                           const char *src, size_t srcLen = wxNO_LEN) const;
 
     virtual size_t FromWChar(char *dst, size_t dstLen,
-                             const wchar_t *src, size_t srcLen = -1) const;
+                             const wchar_t *src, size_t srcLen = wxNO_LEN) const;
 
     virtual size_t GetMBNulLen() const { return m_conv->GetMBNulLen(); }
 
+    virtual wxMBConv *Clone() const { return new wxConvAuto(*this); }
+
 private:
     // all currently recognized BOM values
     enum BOMType
@@ -55,8 +86,17 @@ private:
     // return the BOM type of this buffer
     static BOMType DetectBOM(const char *src, size_t srcLen);
 
-    // initialize m_conv with the conversion to use by default (UTF-8)
-    void InitWithDefault()
+    // common part of all ctors
+    void Init()
+    {
+        // no need to initialize m_bomType and m_consumedBOM here, this will be
+        // done when m_conv is created
+        m_conv = NULL;
+        m_ownsConv = false;
+    }
+
+    // initialize m_conv with the UTF-8 conversion
+    void InitWithUTF8()
     {
         m_conv = &wxConvUTF8;
         m_ownsConv = false;
@@ -74,10 +114,17 @@ private:
     void SkipBOM(const char **src, size_t *len) const;
 
 
+    // fall-back multibyte encoding to use, may be wxFONTENCODING_SYSTEM or
+    // wxFONTENCODING_MAX but not wxFONTENCODING_DEFAULT
+    static wxFontEncoding ms_defaultMBEncoding;
+
     // conversion object which we really use, NULL until the first call to
     // either ToWChar() or FromWChar()
     wxMBConv *m_conv;
 
+    // the multibyte encoding to use by default if input isn't Unicode
+    wxFontEncoding m_encDefault;
+
     // our BOM type
     BOMType m_bomType;
 
@@ -90,7 +137,7 @@ private:
     bool m_consumedBOM;
 
 
-    DECLARE_NO_ASSIGN_CLASS(wxConvAuto);
+    DECLARE_NO_ASSIGN_CLASS(wxConvAuto)
 };
 
 #endif // wxUSE_WCHAR_T