also fixed the handling of long-only options in the usage messages
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13058
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
+All:
+
+- fixes to the command line parsing error and usage messages
+
wxMSW:
- fixed flicker in wxTreeCtrl::SetItemXXX()
wxMSW:
- fixed flicker in wxTreeCtrl::SetItemXXX()
\membersection{wxCmdLineParser::Parse}\label{wxcmdlineparserparse}
\membersection{wxCmdLineParser::Parse}\label{wxcmdlineparserparse}
-\func{int}{Parse}{\void}
+\func{int}{Parse}{\param{bool }{giveUsage = {\tt TRUE}}}
Parse the command line, return $0$ if ok, $-1$ if {\tt "-h"} or {\tt "--help"}
option was encountered and the help message was given or a positive value if a
syntax error occured.
Parse the command line, return $0$ if ok, $-1$ if {\tt "-h"} or {\tt "--help"}
option was encountered and the help message was given or a positive value if a
syntax error occured.
+\wxheading{Parameters}
+
+\docparam{giveUsage}{If {\tt TRUE} (default), the usage message is given if a
+syntax error was encountered while parsing the command line or if help was
+requested. If {\tt FALSE}, only error messages about possible syntax errors
+are given, use \helpref{Usage}{wxcmdlineparserusage} to show the usage message
+from the caller if needed.}
+
\membersection{wxCmdLineParser::Usage}\label{wxcmdlineparserusage}
\func{void}{Usage}{\void}
\membersection{wxCmdLineParser::Usage}\label{wxcmdlineparserusage}
\func{void}{Usage}{\void}
// parse the command line, return 0 if ok, -1 if "-h" or "--help" option
// was encountered and the help message was given or a positive value if a
// syntax error occured
// parse the command line, return 0 if ok, -1 if "-h" or "--help" option
// was encountered and the help message was given or a positive value if a
// syntax error occured
+ //
+ // if showUsage is true, Usage() is called in case of syntax error or if
+ // help was requested
+ int Parse(bool showUsage = TRUE);
// give the usage message describing all program options
void Usage();
// give the usage message describing all program options
void Usage();
OnInitCmdLine(parser);
bool cont;
OnInitCmdLine(parser);
bool cont;
- switch ( parser.Parse() )
+ switch ( parser.Parse(FALSE /* don't show usage */) )
{
case -1:
cont = OnCmdLineHelp(parser);
{
case -1:
cont = OnCmdLineHelp(parser);
if ( !SetDisplayMode(wxDisplayModeInfo(w, h, bpp)) )
return FALSE;
}
if ( !SetDisplayMode(wxDisplayModeInfo(w, h, bpp)) )
return FALSE;
}
public:
wxCmdLineEntryType kind;
public:
wxCmdLineEntryType kind;
- wxString shortName, longName, description;
+ wxString shortName,
+ longName,
+ description;
wxCmdLineParamType type;
int flags;
wxCmdLineParamType type;
int flags;
// the real work is done here
// ----------------------------------------------------------------------------
// the real work is done here
// ----------------------------------------------------------------------------
-int wxCmdLineParser::Parse()
+int wxCmdLineParser::Parse(bool showUsage)
{
bool maybeOption = TRUE; // can the following arg be an option?
bool ok = TRUE; // TRUE until an error is detected
{
bool maybeOption = TRUE; // can the following arg be an option?
bool ok = TRUE; // TRUE until an error is detected
+ if ( !ok && showUsage )
- brief << chSwitch << opt.shortName;
+ if ( !opt.shortName.empty() )
+ {
+ brief << chSwitch << opt.shortName;
+ }
+ else if ( !opt.longName.empty() )
+ {
+ brief << _T("--") << opt.longName;
+ }
+ else
+ {
+ wxFAIL_MSG( _T("option without neither short nor long name?") );
+ }
- option << _T(" ") << chSwitch << opt.shortName;
- if ( !!opt.longName )
+
+ if ( !opt.shortName.empty() )
+ {
+ option << _T(" ") << chSwitch << opt.shortName;
+ }
+
+ if ( !opt.longName.empty() )
- option << _T(" --") << opt.longName;
+ option << (option.empty() ? _T(" ") : _T(", "))
+ << _T("--") << opt.longName;
}
if ( opt.kind != wxCMD_LINE_SWITCH )
}
if ( opt.kind != wxCMD_LINE_SWITCH )
wxLogMessage(m_data->m_logo);
}
wxLogMessage(m_data->m_logo);
}
+ // in console mode we want to show the brief usage message first, then the
+ // detailed one but in GUI build we give the details first and then the
+ // summary - like this, the brief message appears in the wxLogGui dialog,
+ // as expected
+#if !wxUSE_GUI
// now construct the detailed help message
size_t len, lenMax = 0;
// now construct the detailed help message
size_t len, lenMax = 0;
}
wxLogMessage(detailed);
}
wxLogMessage(detailed);
+
+ // do it now if not done above
+#if wxUSE_GUI
+ wxLogMessage(brief);
+#endif // wxUSE_GUI
}
// ----------------------------------------------------------------------------
}
// ----------------------------------------------------------------------------