X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;f=src%2Foptions.cpp;fp=src%2Foptions.cpp;h=719c08ef4565f49ffebec8fe508b46d76b9a583e;hb=d483bd8e6523c23c6f1d8908a2e0611c2bc9ff4f;hp=0000000000000000000000000000000000000000;hpb=7dfa3fe589d1722d49681f42cdb0bf1e6efb5223;p=sven%2Fvym.git diff --git a/src/options.cpp b/src/options.cpp new file mode 100644 index 0000000..719c08e --- /dev/null +++ b/src/options.cpp @@ -0,0 +1,123 @@ +#include "options.h" + +#include +#include + +using namespace std; + +Option::Option() +{ + name = ""; + sName = ""; + lName = ""; + type = Switch; + sarg = ""; + active = false; +} + +Option::Option(const QString &n, const Type &t, const QString &s, + const QString &l) +{ + sName = "-" + s; + lName = "--" + l; + type = t; + name = n; +} + +void Option::set(const QString &n, const Type &t, const QString &s, + const QString &l) +{ + sName = "-" + s; + lName = "--" + l; + type = t; + name = n; +} + +QString Option::getName() { return name; } +QString Option::getShort() { return sName; } +QString Option::getLong() { return lName; } +Option::Type Option::getType() { return type; } +void Option::setArg(const QString &s) { sarg = s; } +QString Option::getArg() { return sarg; } +void Option::setActive() { active = true; } +bool Option::isActive() { return active; } + +/////////////////////////////////////////////////////////////// +Options::Options() {} + +int Options::parse() +{ + QStringList arglist = qApp->arguments(); + + // Get program name + progname = arglist.first(); + arglist.pop_front(); + + // Work through rest of options + bool isFile; + int i = 0; + for (i = 0; i < arglist.size(); ++i) { + isFile = true; + if (arglist[i].left(1) == "-") { + // Compare given option to all defined options + for (int j = 0; j < optlist.size(); ++j) { + if (arglist.at(i) == optlist.value(j).getShort() || + arglist.at(i) == optlist.value(j).getLong()) { + optlist[j].setActive(); + isFile = false; + if (optlist[j].getType() == Option::String) { + i++; + if (i == arglist.size()) { + qWarning("Error: argument to option missing"); + return 1; + } + optlist[j].setArg(arglist[i]); + isFile = false; + } + break; + } + } + if (isFile) { + qWarning("Error: Unknown argument "); + return 1; + } + } + else + filelist.append(arglist[i]); + } + return 0; +} + +void Options::add(Option o) { optlist.append(o); } + +void Options::add(const QString &n, const Option::Type &t = Option::Switch, + const QString &s = "", const QString &l = "") +{ + Option o; + o.set(n, t, s, l); + optlist.append(o); +} + +void Options::setHelpText(const QString &s) { helptext = s; } + +QString Options::getHelpText() { return helptext; } + +QString Options::getProgramName() { return progname; } + +QStringList Options::getFileList() { return filelist; } + +bool Options::isOn(const QString &s) +{ + for (int i = 0; i < optlist.size(); ++i) + if (optlist[i].getName() == s && optlist[i].isActive()) + return true; + return false; +} + +QString Options::getArg(const QString &s) +{ + for (int i = 0; i < optlist.size(); ++i) + if (optlist[i].getName() == s) + return optlist[i].getArg(); + return QString(); +}