type = typ;
flags = fl;
- m_hasVal = false;
- m_isNegated = false;
+ Reset();
}
// can't use union easily here, so just store all possible data fields, we
{ Check(wxCMD_LINE_VAL_DATE); m_dateVal = val; m_hasVal = true; }
#endif // wxUSE_DATETIME
- void SetHasValue(bool hasValue = true) { m_hasVal = hasValue; }
+ void SetHasValue() { m_hasVal = true; }
bool HasValue() const { return m_hasVal; }
void SetNegated() { m_isNegated = true; }
bool IsNegated() const { return m_isNegated; }
+ // Reset to the initial state, called before parsing another command line.
+ void Reset()
+ {
+ m_hasVal =
+ m_isNegated = false;
+ }
+
public:
wxCmdLineEntryType kind;
wxString shortName,
{
for ( size_t i = 0; i < m_data->m_options.GetCount(); i++ )
{
- wxCmdLineOption& opt = m_data->m_options[i];
- opt.SetHasValue(false);
+ m_data->m_options[i].Reset();
}
}
if (longOptionsEnabled)
{
+ wxString errorOpt;
+
optInd = m_data->FindOptionByLongName(name);
if ( optInd == wxNOT_FOUND )
{
- errorMsg << wxString::Format(_("Unknown long option '%s'"), name.c_str())
- << wxT('\n');
+ // Check if this could be a negatable long option.
+ if ( name.Last() == '-' )
+ {
+ name.RemoveLast();
+
+ optInd = m_data->FindOptionByLongName(name);
+ if ( optInd != wxNOT_FOUND )
+ {
+ if ( !(m_data->m_options[optInd].flags &
+ wxCMD_LINE_SWITCH_NEGATABLE) )
+ {
+ errorOpt.Printf
+ (
+ _("Option '%s' can't be negated"),
+ name
+ );
+ optInd = wxNOT_FOUND;
+ }
+ }
+ }
+
+ if ( optInd == wxNOT_FOUND )
+ {
+ if ( errorOpt.empty() )
+ {
+ errorOpt.Printf
+ (
+ _("Unknown long option '%s'"),
+ name
+ );
+ }
+
+ errorMsg << errorOpt << wxT('\n');
+ }
}
}
else
case wxCMD_LINE_VAL_DATE:
{
wxDateTime dt;
- wxString::const_iterator end;
- if ( !dt.ParseDate(value, &end) || end != value.end() )
+ wxString::const_iterator endDate;
+ if ( !dt.ParseDate(value, &endDate) || endDate != value.end() )
{
errorMsg << wxString::Format(_("Option '%s': '%s' cannot be converted to a date."),
name.c_str(), value.c_str())
option << (!opt.longName ? wxT(':') : wxT('=')) << val;
}
- usage << negator;
if ( !(opt.flags & wxCMD_LINE_OPTION_MANDATORY) )
{
usage << wxT(']');