hyperion.ng
Parser.h
1 #pragma once
2 
3 #include <QtCore>
4 #include <QtGui>
5 #include "ColorOption.h"
6 #include "ColorsOption.h"
7 #include "DoubleOption.h"
8 #include "ImageOption.h"
9 #include "IntOption.h"
10 #include "Option.h"
11 #include "RegularExpressionOption.h"
12 #include "SwitchOption.h"
13 #include "ValidatorOption.h"
14 #include "BooleanOption.h"
15 
16 namespace commandline
17 {
18 
19 class Parser : public QObject
20 {
21 protected:
22  QHash<QString, Option *> _options;
23  QString _errorText;
24  /* No public inheritance because we need to modify a few methods */
25  QCommandLineParser _parser;
26 
27  QStringList _getNames(const char shortOption, const QString longOption);
28  QString _getDescription(const QString description, const QString default_=QString());
29 
30 public:
31  bool parse(const QStringList &arguments);
32  void process(const QStringList &arguments);
33  void process(const QCoreApplication &app);
34  QString errorText() const;
35 
36  template<class OptionT, class ... Args>
37  OptionT &add(
38  const char shortOption,
39  const QString longOption,
40  const QString description,
41  const QString default_,
42  Args ... args)
43  {
44  OptionT * option = new OptionT(
45  _getNames(shortOption, longOption),
46  _getDescription(description, default_),
47  longOption,
48  default_,
49  args...);
50  addOption(option);
51  return *option;
52  }
53 
54  /* gcc does not support default arguments for variadic templates which
55  * makes this method necessary */
56  template<class OptionT>
57  OptionT &add(
58  const char shortOption,
59  const QString longOption,
60  const QString description,
61  const QString default_ = QString())
62  {
63  OptionT * option = new OptionT(
64  _getNames(shortOption, longOption),
65  _getDescription(description, default_),
66  longOption,
67  default_);
68  addOption(option);
69  return *option;
70  }
71 
72  Parser(QString description=QString())
73  {
74  if(description.size())setApplicationDescription(description);
75  };
76 
77  QCommandLineOption addHelpOption()
78  {
79  return _parser.addHelpOption();
80  };
81 
82  bool addOption(Option &option);
83  bool addOption(Option *option);
84  void addPositionalArgument(const QString &name, const QString &description, const QString &syntax = QString())
85  {
86  _parser.addPositionalArgument(name, description, syntax);
87  };
88 
89  QCommandLineOption addVersionOption()
90  {
91  return _parser.addVersionOption();
92  };
93 
94  QString applicationDescription() const
95  { return _parser.applicationDescription(); }
96 
97  void clearPositionalArguments()
98  { _parser.clearPositionalArguments(); }
99 
100  QString helpText() const
101  { return _parser.helpText(); }
102 
103  bool isSet(const QString &name) const
104  { return _parser.isSet(name); }
105 
106  bool isSet(const Option &option) const
107  { return _parser.isSet(option); }
108 
109  bool isSet(const Option *option) const
110  { return _parser.isSet(*option); }
111 
112  QStringList optionNames() const
113  { return _parser.optionNames(); }
114 
115  QStringList positionalArguments() const
116  { return _parser.positionalArguments(); }
117 
118  void setApplicationDescription(const QString &description)
119  { _parser.setApplicationDescription(description); }
120 
121  void setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode singleDashWordOptionMode)
122  { _parser.setSingleDashWordOptionMode(singleDashWordOptionMode); }
123 
124  void showHelp(int exitCode = 0)
125  { _parser.showHelp(exitCode); }
126 
127  QStringList unknownOptionNames() const
128  { return _parser.unknownOptionNames(); }
129 
130  QString value(const QString &optionName) const
131  { return _parser.value(optionName); }
132 
133  QString value(const Option &option) const
134  { return _parser.value(option); }
135 
136  QStringList values(const QString &optionName) const
137  { return _parser.values(optionName); }
138 
139  QStringList values(const Option &option) const
140  { return _parser.values(option); }
141 
142 };
143 
144 }
Definition: Option.h:13
Definition: BooleanOption.h:8
Definition: Parser.h:19