- Added wxResourceTranslationsLoader for loading translations from Windows
resources.
- Added wxMessageQueue::Clear().
+- Added wxConfig::Read(float *) overload (Terry Farnham).
Unix:
bool Read(const wxString& key, double* val) const;
bool Read(const wxString& key, double* val, double defVal) const;
+ // read a float
+ bool Read(const wxString& key, float* val) const;
+ bool Read(const wxString& key, float* val, float defVal) const;
+
// read a bool
bool Read(const wxString& key, bool* val) const;
bool Read(const wxString& key, bool* val, bool defVal) const;
*/
bool Read(const wxString& key, double* d,
double defaultVal) const;
+
/**
- Reads a bool value, returning @true if the value was found. If the
+ Reads a float value, returning @true if the value was found.
+
+ With the second overload, if the value was not found, @a defaultVal is
+ used instead.
+
+ Notice that the value is read as a double but must be in a valid range
+ for floats for the function to return @true.
+
+ @since 2.9.1
+
+ @beginWxPerlOnly
+ Not supported by wxPerl.
+ @endWxPerlOnly
+ */
+ //@{
+ bool Read(const wxString& key, float* f) const;
+ bool Read(const wxString& key, float* f, float defaultVal) const;
+ //@}
+
+ /**
+ Reads a float value, returning @true if the value was found. If the
value was not found, @a b is not changed.
+ @since 2.9.1
+
@beginWxPerlOnly
Not supported by wxPerl.
@endWxPerlOnly
#include <stdlib.h>
#include <ctype.h>
#include <limits.h> // for INT_MAX
+#include <float.h> // for FLT_MAX
// ----------------------------------------------------------------------------
// global and class static variables
return r;
}
+// Read floats as doubles then just type cast it down.
+bool wxConfigBase::Read(const wxString& key, float* val) const
+{
+ wxCHECK_MSG( val, false, wxT("wxConfig::Read(): NULL parameter") );
+
+ double temp;
+ if ( !Read(key, &temp) )
+ return false;
+
+ wxCHECK_MSG( fabs(temp) <= FLT_MAX, false,
+ wxT("float overflow in wxConfig::Read") );
+ wxCHECK_MSG( (temp == 0.0) || (fabs(temp) >= FLT_MIN), false,
+ wxT("float underflow in wxConfig::Read") );
+
+ *val = static_cast<float>(temp);
+
+ return true;
+}
+
+bool wxConfigBase::Read(const wxString& key, float* val, float defVal) const
+{
+ wxCHECK_MSG( val, false, wxT("wxConfig::Read(): NULL parameter") );
+
+ if ( Read(key, val) )
+ return true;
+
+ *val = defVal;
+ return false;
+}
+
// the DoReadXXX() for the other types have implementation in the base class
// but can be overridden in the derived ones
bool wxConfigBase::DoReadBool(const wxString& key, bool* val) const
CPPUNIT_TEST( AddToExistingRoot );
CPPUNIT_TEST( ReadNonExistent );
CPPUNIT_TEST( ReadEmpty );
+ CPPUNIT_TEST( ReadFloat );
CPPUNIT_TEST_SUITE_END();
void Path();
void AddToExistingRoot();
void ReadNonExistent();
void ReadEmpty();
+ void ReadFloat();
static wxString ChangePath(wxFileConfig& fc, const wxChar *path)
wxFileConfig fc(sis);
}
+void FileConfigTestCase::ReadFloat()
+{
+ static const char *confTest =
+ "x=1.234\n"
+ "y=-9876.5432\n"
+ "z=2e+308\n"
+ ;
+
+ wxStringInputStream sis(confTest);
+ wxFileConfig fc(sis);
+
+ float f;
+ CPPUNIT_ASSERT( fc.Read("x", &f) );
+ CPPUNIT_ASSERT_EQUAL( 1.234f, f );
+
+ CPPUNIT_ASSERT( fc.Read("y", &f) );
+ CPPUNIT_ASSERT_EQUAL( -9876.5432f, f );
+}
+
#endif // wxUSE_FILECONFIG