From be03c0ec26612a7ab8a9000f455a015c02e05218 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 17 Dec 2001 12:21:03 +0000 Subject: [PATCH] fixes error/usage messages given by the cmd line parsing logic in wxApp; 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 --- docs/changes.txt | 4 ++++ docs/latex/wx/cmdlpars.tex | 10 ++++++++- include/wx/cmdline.h | 5 ++++- src/common/appcmn.cpp | 4 ++-- src/common/cmdline.cpp | 44 ++++++++++++++++++++++++++++++++------ 5 files changed, 56 insertions(+), 11 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 988bb291ed..f17c5346fa 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -63,6 +63,10 @@ Unix ports: 2.3.3 ----- +All: + +- fixes to the command line parsing error and usage messages + wxMSW: - fixed flicker in wxTreeCtrl::SetItemXXX() diff --git a/docs/latex/wx/cmdlpars.tex b/docs/latex/wx/cmdlpars.tex index 8b3d0252c9..d2a9373fd6 100644 --- a/docs/latex/wx/cmdlpars.tex +++ b/docs/latex/wx/cmdlpars.tex @@ -405,12 +405,20 @@ Add a parameter of the given {\it type} to the command line description. \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. +\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} diff --git a/include/wx/cmdline.h b/include/wx/cmdline.h index dccfc40687..498752cb47 100644 --- a/include/wx/cmdline.h +++ b/include/wx/cmdline.h @@ -162,7 +162,10 @@ public: // 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 - int Parse(); + // + // 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(); diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index ce42b0dd1f..b1ab25eaf1 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -166,7 +166,7 @@ bool wxAppBase::OnInit() OnInitCmdLine(parser); bool cont; - switch ( parser.Parse() ) + switch ( parser.Parse(FALSE /* don't show usage */) ) { case -1: cont = OnCmdLineHelp(parser); @@ -287,7 +287,7 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) if ( !SetDisplayMode(wxDisplayModeInfo(w, h, bpp)) ) return FALSE; } -#endif +#endif // __WXMGL__ return TRUE; } diff --git a/src/common/cmdline.cpp b/src/common/cmdline.cpp index efb4a3e966..2b550d15ec 100644 --- a/src/common/cmdline.cpp +++ b/src/common/cmdline.cpp @@ -109,7 +109,9 @@ struct wxCmdLineOption public: wxCmdLineEntryType kind; - wxString shortName, longName, description; + wxString shortName, + longName, + description; wxCmdLineParamType type; int flags; @@ -476,7 +478,7 @@ void wxCmdLineParser::Reset() // 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 @@ -803,7 +805,7 @@ int wxCmdLineParser::Parse() } } - if ( !ok ) + if ( !ok && showUsage ) { Usage(); } @@ -849,13 +851,30 @@ void wxCmdLineParser::Usage() brief << _T('['); } - 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?") ); + } wxString option; - option << _T(" ") << chSwitch << opt.shortName; - if ( !!opt.longName ) + + if ( !opt.shortName.empty() ) { - option << _T(" --") << opt.longName; + option << _T(" ") << chSwitch << opt.shortName; + } + + if ( !opt.longName.empty() ) + { + option << (option.empty() ? _T(" ") : _T(", ")) + << _T("--") << opt.longName; } if ( opt.kind != wxCMD_LINE_SWITCH ) @@ -904,7 +923,13 @@ void wxCmdLineParser::Usage() 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 wxLogMessage(brief); +#endif // !wxUSE_GUI // now construct the detailed help message size_t len, lenMax = 0; @@ -927,6 +952,11 @@ void wxCmdLineParser::Usage() } wxLogMessage(detailed); + + // do it now if not done above +#if wxUSE_GUI + wxLogMessage(brief); +#endif // wxUSE_GUI } // ----------------------------------------------------------------------------