]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/strconv.h
changed wxWindow::ApplyToolTip to take UTF8-encoded char* instead of wxChar* to avoid...
[wxWidgets.git] / include / wx / strconv.h
index b9ea52f68e7b943850cdd5778cbb067fe8f14344..0fbe71bfd5fa2660fd8a56ebd300ee1242d15745 100644 (file)
@@ -135,6 +135,12 @@ public:
     // encoding
     static size_t GetMaxMBNulLen() { return 4 /* for UTF-32 */; }
 
+#if wxUSE_UNICODE_UTF8
+    // return true if the converter's charset is UTF-8, i.e. char* strings
+    // decoded using this object can be directly copied to wxString's internal
+    // storage without converting to WC and than back to UTF-8 MB string
+    virtual bool IsUTF8() const { return false; }
+#endif
 
     // The old conversion functions. The existing classes currently mostly
     // implement these ones but we're in transition to using To/FromWChar()
@@ -175,6 +181,10 @@ public:
     virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
 
     virtual wxMBConv *Clone() const { return new wxMBConvLibc; }
+
+#if wxUSE_UNICODE_UTF8
+    virtual bool IsUTF8() const { return wxLocaleIsUtf8; }
+#endif
 };
 
 #ifdef __UNIX__
@@ -244,6 +254,8 @@ public:
 class WXDLLIMPEXP_BASE wxMBConvUTF8 : public wxMBConv
 {
 public:
+    // FIXME-UTF8: split this class into multiple classes, one strict and
+    //             other lossy (PUA, OCTAL mappings)
     enum
     {
         MAP_INVALID_UTF8_NOT = 0,
@@ -257,6 +269,12 @@ public:
 
     virtual wxMBConv *Clone() const { return new wxMBConvUTF8(m_options); }
 
+#if wxUSE_UNICODE_UTF8
+    // NB: other mapping modes are not, strictly speaking, UTF-8, so we can't
+    //     take the shortcut in that case
+    virtual bool IsUTF8() const { return m_options == MAP_INVALID_UTF8_NOT; }
+#endif
+
 private:
     int m_options;
 };
@@ -424,7 +442,7 @@ private:
 // instead.
 #define WX_DECLARE_GLOBAL_CONV(klass, name)                             \
     extern WXDLLIMPEXP_DATA_BASE(klass*) name##Ptr;                     \
-    extern klass* WXDLLIMPEXP_BASE wxGet_##name##Ptr();                 \
+    extern WXDLLIMPEXP_BASE klass* wxGet_##name##Ptr();                 \
     inline klass& wxGet_##name()                                        \
     {                                                                   \
         if ( !name##Ptr )                                               \