]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/numformatter.cpp
add support for alpha in color dialog on OSX, see #14127
[wxWidgets.git] / src / common / numformatter.cpp
index ab990d4d59aeeede35597a5fa43b669a2f02d60a..0c3a6a7a1ab6c5a1ea635fead91c94e870bbdc86 100644 (file)
@@ -21,6 +21,8 @@
 #include "wx/numformatter.h"
 #include "wx/intl.h"
 
 #include "wx/numformatter.h"
 #include "wx/intl.h"
 
+#include <locale.h> // for setlocale and LC_ALL
+
 // ----------------------------------------------------------------------------
 // local helpers
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // local helpers
 // ----------------------------------------------------------------------------
@@ -39,7 +41,9 @@ class LocaleId
 public:
     LocaleId()
     {
 public:
     LocaleId()
     {
+#if wxUSE_INTL
         m_wxloc = NULL;
         m_wxloc = NULL;
+#endif // wxUSE_INTL
         m_cloc = NULL;
     }
 
         m_cloc = NULL;
     }
 
@@ -48,6 +52,7 @@ public:
         Free();
     }
 
         Free();
     }
 
+#if wxUSE_INTL
     // Return true if this is the first time this function is called for this
     // object or if the program locale has changed since the last time it was
     // called. Otherwise just return false indicating that updating locale-
     // Return true if this is the first time this function is called for this
     // object or if the program locale has changed since the last time it was
     // called. Otherwise just return false indicating that updating locale-
@@ -70,15 +75,20 @@ public:
 
         return true;
     }
 
         return true;
     }
+#endif // wxUSE_INTL
 
 private:
     void Free()
     {
 
 private:
     void Free()
     {
+#if wxUSE_INTL
         free(m_cloc);
         free(m_cloc);
+#endif // wxUSE_INTL
     }
 
     }
 
+#if wxUSE_INTL
     // Non-owned pointer to wxLocale which was used.
     wxLocale *m_wxloc;
     // Non-owned pointer to wxLocale which was used.
     wxLocale *m_wxloc;
+#endif // wxUSE_INTL
 
     // Owned pointer to the C locale string.
     char *m_cloc;
 
     // Owned pointer to the C locale string.
     char *m_cloc;
@@ -98,6 +108,7 @@ private:
 
 wxChar wxNumberFormatter::GetDecimalSeparator()
 {
 
 wxChar wxNumberFormatter::GetDecimalSeparator()
 {
+#if wxUSE_INTL
     // Notice that while using static variable here is not MT-safe, the worst
     // that can happen is that we redo the initialization if we're called
     // concurrently from more than one thread so it's not a real problem.
     // Notice that while using static variable here is not MT-safe, the worst
     // that can happen is that we redo the initialization if we're called
     // concurrently from more than one thread so it's not a real problem.
@@ -128,10 +139,14 @@ wxChar wxNumberFormatter::GetDecimalSeparator()
     }
 
     return s_decimalSeparator;
     }
 
     return s_decimalSeparator;
+#else // !wxUSE_INTL
+    return wxT('.');
+#endif // wxUSE_INTL/!wxUSE_INTL
 }
 
 bool wxNumberFormatter::GetThousandsSeparatorIfUsed(wxChar *sep)
 {
 }
 
 bool wxNumberFormatter::GetThousandsSeparatorIfUsed(wxChar *sep)
 {
+#if wxUSE_INTL
     static wxChar s_thousandsSeparator = 0;
     static LocaleId s_localeUsedForInit;
 
     static wxChar s_thousandsSeparator = 0;
     static LocaleId s_localeUsedForInit;
 
@@ -157,6 +172,10 @@ bool wxNumberFormatter::GetThousandsSeparatorIfUsed(wxChar *sep)
         *sep = s_thousandsSeparator;
 
     return true;
         *sep = s_thousandsSeparator;
 
     return true;
+#else // !wxUSE_INTL
+    wxUnusedVar(sep);
+    return false;
+#endif // wxUSE_INTL/!wxUSE_INTL
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -216,6 +235,10 @@ void wxNumberFormatter::AddThousandsSeparators(wxString& s)
         pos = s.length();
     }
 
         pos = s.length();
     }
 
+    // End grouping at the beginning of the digits -- there could be at a sign
+    // before their start.
+    const size_t start = s.find_first_of("0123456789");
+
     // We currently group digits by 3 independently of the locale. This is not
     // the right thing to do and we should use lconv::grouping (under POSIX)
     // and GetLocaleInfo(LOCALE_SGROUPING) (under MSW) to get information about
     // We currently group digits by 3 independently of the locale. This is not
     // the right thing to do and we should use lconv::grouping (under POSIX)
     // and GetLocaleInfo(LOCALE_SGROUPING) (under MSW) to get information about
@@ -223,7 +246,7 @@ void wxNumberFormatter::AddThousandsSeparators(wxString& s)
     // wxLocale level first and then used here in the future (TODO).
     const size_t GROUP_LEN = 3;
 
     // wxLocale level first and then used here in the future (TODO).
     const size_t GROUP_LEN = 3;
 
-    while ( pos > GROUP_LEN )
+    while ( pos > start + GROUP_LEN )
     {
         pos -= GROUP_LEN;
         s.insert(pos, thousandsSep);
     {
         pos -= GROUP_LEN;
         s.insert(pos, thousandsSep);