X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/49751a58f046d7c37f1a4661ed4bb604d11ae38d..0bbe61b8c18a1795189f0cf73cc61c14a0fb846d:/src/common/cmdline.cpp?ds=sidebyside diff --git a/src/common/cmdline.cpp b/src/common/cmdline.cpp index c5956e2310..63ee43c1a8 100644 --- a/src/common/cmdline.cpp +++ b/src/common/cmdline.cpp @@ -111,6 +111,8 @@ struct wxCmdLineOption wxASSERT_MSG( type == typ, _T("type mismatch in wxCmdLineOption") ); } + double GetDoubleVal() const + { Check(wxCMD_LINE_VAL_DOUBLE); return m_doubleVal; } long GetLongVal() const { Check(wxCMD_LINE_VAL_NUMBER); return m_longVal; } const wxString& GetStrVal() const @@ -120,6 +122,8 @@ struct wxCmdLineOption { Check(wxCMD_LINE_VAL_DATE); return m_dateVal; } #endif // wxUSE_DATETIME + void SetDoubleVal(double val) + { Check(wxCMD_LINE_VAL_DOUBLE); m_doubleVal = val; m_hasVal = true; } void SetLongVal(long val) { Check(wxCMD_LINE_VAL_NUMBER); m_longVal = val; m_hasVal = true; } void SetStrVal(const wxString& val) @@ -143,6 +147,7 @@ public: private: bool m_hasVal; + double m_doubleVal; long m_longVal; wxString m_strVal; #if wxUSE_DATETIME @@ -348,7 +353,7 @@ void wxCmdLineParser::EnableLongOptions(bool enable) m_data->m_enableLongOptions = enable; } -bool wxCmdLineParser::AreLongOptionsEnabled() +bool wxCmdLineParser::AreLongOptionsEnabled() const { return m_data->m_enableLongOptions; } @@ -510,6 +515,25 @@ bool wxCmdLineParser::Found(const wxString& name, long *value) const return true; } +bool wxCmdLineParser::Found(const wxString& name, double *value) const +{ + int i = m_data->FindOption(name); + if ( i == wxNOT_FOUND ) + i = m_data->FindOptionByLongName(name); + + wxCHECK_MSG( i != wxNOT_FOUND, false, _T("unknown option") ); + + wxCmdLineOption& opt = m_data->m_options[(size_t)i]; + if ( !opt.HasValue() ) + return false; + + wxCHECK_MSG( value, false, _T("NULL pointer in wxCmdLineOption::Found") ); + + *value = opt.GetDoubleVal(); + + return true; +} + #if wxUSE_DATETIME bool wxCmdLineParser::Found(const wxString& name, wxDateTime *value) const { @@ -802,12 +826,29 @@ int wxCmdLineParser::Parse(bool showUsage) } break; + case wxCMD_LINE_VAL_DOUBLE: + { + double val; + if ( value.ToDouble(&val) ) + { + opt.SetDoubleVal(val); + } + else + { + errorMsg << wxString::Format(_("'%s' is not a correct numeric value for option '%s'."), + value.c_str(), name.c_str()) + << _T('\n'); + + ok = false; + } + } + break; + #if wxUSE_DATETIME case wxCMD_LINE_VAL_DATE: { wxDateTime dt; - // FIXME-UTF8: ParseDate API will need changes - const wxChar *res = dt.ParseDate(value.c_str()); + const char *res = dt.ParseDate(value); if ( !res || *res ) { errorMsg << wxString::Format(_("Option '%s': '%s' cannot be converted to a date."), @@ -946,7 +987,7 @@ int wxCmdLineParser::Parse(bool showUsage) // give the usage message // ---------------------------------------------------------------------------- -void wxCmdLineParser::Usage() +void wxCmdLineParser::Usage() const { wxMessageOutput* msgOut = wxMessageOutput::Get(); if ( msgOut ) @@ -959,7 +1000,7 @@ void wxCmdLineParser::Usage() } } -wxString wxCmdLineParser::GetUsageString() +wxString wxCmdLineParser::GetUsageString() const { wxString appname; if ( m_data->m_arguments.empty() ) @@ -1133,6 +1174,10 @@ static wxString GetTypeName(wxCmdLineParamType type) s = _("num"); break; + case wxCMD_LINE_VAL_DOUBLE: + s = _("double"); + break; + case wxCMD_LINE_VAL_DATE: s = _("date"); break;