-
Notifications
You must be signed in to change notification settings - Fork 343
/
mythcommandlineparser.h
184 lines (167 loc) · 8.5 KB
/
mythcommandlineparser.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
// -*- Mode: c++ -*-
#include <QStringList>
#include <QDateTime>
#include <QSize>
#include <QMap>
#include <QString>
#include <QVariant>
#include <stdint.h> // for uint64_t
#include "mythbaseexp.h"
#include "mythlogging.h"
typedef struct commandlinearg {
QString name;
QVariant::Type type;
QVariant def;
QString help;
QString longhelp;
} CommandLineArg;
class MBASE_PUBLIC MythCommandLineParser
{
public:
MythCommandLineParser(QString);
virtual void LoadArguments(void) {};
void PrintVersion(void);
void PrintHelp(void);
QString GetHelpString(bool with_header) const;
virtual QString GetHelpHeader(void) const { return ""; }
virtual bool Parse(int argc, const char * const * argv);
// overloaded add constructors for single string options
void add(QString arg, QString name, bool def, // bool with default
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::Bool,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, int def, // int
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::Int,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, uint def, // uint
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::UInt,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, long long def, // long long
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::LongLong,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, double def, // double
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::Double,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, const char *def, // const char *
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::String,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, QString def, // QString
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::String,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, QSize def, // QSize
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::Size,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, QDateTime def, // QDateTime
QString help, QString longhelp)
{ add(QStringList(arg), name, QVariant::DateTime,
QVariant(def), help, longhelp); }
void add(QString arg, QString name, QVariant::Type type, // anything else
QString help, QString longhelp)
{ add(QStringList(arg), name, type,
QVariant(type), help, longhelp); }
void add(QString arg, QString name, QVariant::Type type, // anything else with default
QVariant def, QString help, QString longhelp)
{ add(QStringList(arg), name, type,
def, help, longhelp); }
// overloaded add constructors for multi-string options
void add(QStringList arglist, QString name, bool def, // bool with default
QString help, QString longhelp)
{ add(arglist, name, QVariant::Bool,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, int def, // int
QString help, QString longhelp)
{ add(arglist, name, QVariant::Int,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, uint def, // uint
QString help, QString longhelp)
{ add(arglist, name, QVariant::UInt,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, long long def, // long long
QString help, QString longhelp)
{ add(arglist, name, QVariant::LongLong,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, double def, // float
QString help, QString longhelp)
{ add(arglist, name, QVariant::Double,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, const char *def, // const char *
QString help, QString longhelp)
{ add(arglist, name, QVariant::String,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, QString def, // QString
QString help, QString longhelp)
{ add(arglist, name, QVariant::String,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, QSize def, // QSize
QString help, QString longhelp)
{ add(arglist, name, QVariant::Size,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, QDateTime def, // QDateTime
QString help, QString longhelp)
{ add(arglist, name, QVariant::DateTime,
QVariant(def), help, longhelp); }
void add(QStringList arglist, QString name, QVariant::Type type, // anything else
QString help, QString longhelp)
{ add(arglist, name, type,
QVariant(type), help, longhelp); }
void add(QStringList arglist, QString name, QVariant::Type type, // anything else with default
QVariant def, QString help, QString longhelp);
QVariant operator[](const QString &name);
QStringList GetArgs(void) const { return m_remainingArgs; }
QMap<QString,QString> GetSettingsOverride(void);
QString GetLogFilePath(void);
int GetSyslogFacility(void);
LogLevel_t GetLogLevel(void);
QString GetPassthrough(void) const { return m_passthrough.join(" "); }
bool toBool(QString key) const;
int toInt(QString key) const;
uint toUInt(QString key) const;
long long toLongLong(QString key) const;
double toDouble(QString key) const;
QSize toSize(QString key) const;
QString toString(QString key) const;
QStringList toStringList(QString key, QString sep = "") const;
QMap<QString,QString> toMap(QString key) const;
QDateTime toDateTime(QString key) const;
bool SetValue(const QString &key, QVariant value);
int ConfigureLogging(QString mask = "important general",
unsigned int quiet = 0);
void ApplySettingsOverride(void);
int Daemonize(void);
protected:
void allowExtras(bool allow=true) { m_allowExtras = allow; }
void allowPassthrough(bool allow=true) { m_allowPassthrough = allow; }
void addHelp(void);
void addVersion(void);
void addWindowed(bool);
void addDaemon(void);
void addSettingsOverride(void);
void addRecording(void);
void addGeometry(void);
void addDisplay(void);
void addUPnP(void);
void addLogging(void);
void addPIDFile(void);
void addJob(void);
private:
int getOpt(int argc, const char * const * argv, int &argpos,
QString &opt, QString &val);
QString m_appname;
QMap<QString,QVariant> m_parsed;
QMap<QString,QVariant> m_defaults;
QMap<QString,CommandLineArg> m_registeredArgs;
bool m_allowExtras;
QStringList m_remainingArgs;
bool m_allowPassthrough;
bool m_passthroughActive;
QStringList m_passthrough;
bool m_overridesImported;
bool m_verbose;
};