From f159952090d596296f70776527cfcf4e58de3b91 Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 25 Aug 2015 19:12:05 +0200 Subject: [PATCH] added application info --- application/argumentparser.cpp | 29 ++++++++++++++++++++++++----- application/argumentparser.h | 12 +++++++++++- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/application/argumentparser.cpp b/application/argumentparser.cpp index 52ebb54..8776a90 100644 --- a/application/argumentparser.cpp +++ b/application/argumentparser.cpp @@ -19,6 +19,11 @@ using namespace std::placeholders; */ namespace ApplicationUtilities { +const char *applicationName = nullptr; +const char *applicationAuthor = nullptr; +const char *applicationVersion = nullptr; +const char *applicationUrl = nullptr; + /*! * \class ApplicationUtilities::Argument * \brief The Argument class is a wrapper for command line argument information. @@ -306,12 +311,26 @@ void ArgumentParser::setMainArguments(const ArgumentInitializerList &mainArgumen */ void ArgumentParser::printHelp(ostream &os) const { - if(!m_mainArgs.size()) { - return; + if(applicationName && *applicationName) { + os << applicationName; + if(applicationVersion && *applicationVersion) { + os << ',' << ' '; + } } - os << "Available arguments:\n"; - for(const Argument *arg : m_mainArgs) { - arg->printInfo(os); + if(applicationVersion && *applicationVersion) { + os << "version " << applicationVersion; + } + if((applicationName && *applicationName) || (applicationVersion && *applicationVersion)) { + os << '\n' << '\n'; + } + if(!m_mainArgs.empty()) { + os << "Available arguments:\n"; + for(const Argument *arg : m_mainArgs) { + arg->printInfo(os); + } + } + if(applicationUrl && *applicationUrl) { + os << "\nProject website: " << applicationUrl << endl; } } diff --git a/application/argumentparser.h b/application/argumentparser.h index 8a6df89..5ccb915 100644 --- a/application/argumentparser.h +++ b/application/argumentparser.h @@ -12,8 +12,18 @@ namespace ApplicationUtilities { -class Argument; +extern const char *applicationName; +extern const char *applicationAuthor; +extern const char *applicationVersion; +extern const char *applicationUrl; +#define SET_APPLICATION_INFO \ + ::ApplicationUtilities::applicationName = APP_NAME; \ + ::ApplicationUtilities::applicationAuthor = APP_AUTHOR; \ + ::ApplicationUtilities::applicationVersion = APP_VERSION; \ + ::ApplicationUtilities::applicationUrl = APP_URL + +class Argument; class ArgumentParser; typedef std::initializer_list ArgumentInitializerList;