00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef GETOPT_H
00025 #define GETOPT_H
00026
00027 #include <QString>
00028 #include <QStringList>
00029 #include <QMap>
00030 #include <QVariant>
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 class GetOpt {
00047 protected:
00048 struct Option {
00049 enum Type { SWITCH, OPTION, ARGUMENT, OPTIONAL };
00050 Type type;
00051 char o;
00052 QString name;
00053 QString description;
00054 QVariant *value;
00055 QString *string_value;
00056 float *float_value;
00057 double *double_value;
00058 int *int_value;
00059 bool *boolean_value;
00060
00061 Option(): value(NULL), string_value(NULL), float_value(NULL), double_value(NULL), int_value(NULL), boolean_value(NULL) {}
00062 Option(Type _type, char _o, QString _name, QString _descr):
00063 type(_type), o(_o), name(_name), description(_descr),
00064 value(NULL), string_value(NULL), float_value(NULL), double_value(NULL), int_value(NULL), boolean_value(NULL) {}
00065 };
00066
00067 bool unlimitedArgs;
00068 QList<Option> options;
00069
00070 public:
00071 QString appname;
00072 QString help;
00073 QStringList args;
00074 QStringList arguments;
00075
00076 GetOpt(): unlimitedArgs(false) {}
00077 GetOpt(int argc, char *argv[] );
00078 GetOpt(const QStringList &a);
00079
00080
00081 void addSwitch(char s, const QString &longname, const QString &description, bool *b );
00082
00083
00084 void addOption(char s, const QString &longname, const QString &description, QVariant *v);
00085 void addOption(char s, const QString &longname, const QString &description, QString *v);
00086 void addOption(char s, const QString &longname, const QString &description, float *v);
00087 void addOption(char s, const QString &longname, const QString &description, double *v);
00088 void addOption(char s, const QString &longname, const QString &description, int *v);
00089 void addOption(char s, const QString &longname, const QString &description, bool *v);
00090
00091
00092
00093 void addArgument(const QString &name, const QString &description, QVariant *v);
00094 void addArgument(const QString &name, const QString &description, QString *v);
00095 void addArgument(const QString &name, const QString &description, float *v);
00096 void addArgument(const QString &name, const QString &description, double *v);
00097 void addArgument(const QString &name, const QString &description, int *v);
00098 void addArgument(const QString &name, const QString &description, bool *v);
00099 void addArgument(const QString &name, const QString &description, Option option);
00100
00101
00102 void addOptionalArgument(const QString &name, const QString &description, QVariant *v);
00103
00104
00105 void allowUnlimitedArguments(bool allow) { unlimitedArgs = allow; }
00106
00107
00108 void setHelp(QString &_help) { help = _help; }
00109
00110
00111 void parse();
00112
00113
00114 QString usage();
00115
00116
00117 QString &applicationName();
00118
00119 protected:
00120
00121 bool parse(QString &error);
00122
00123 bool findOption(char c, Option &option);
00124
00125 bool findArg(const QString &name, Option &option);
00126
00127 QString formatDesc(QString desc, int len);
00128
00129 bool assignOption(Option &option, QString arg, QString &error);
00130
00131 };
00132
00133 #endif
00134