insilmaril@0: #include "options.h" insilmaril@44: insilmaril@0: #include insilmaril@44: #include insilmaril@0: insilmaril@0: insilmaril@0: using namespace std; insilmaril@0: insilmaril@0: insilmaril@0: Option::Option() insilmaril@0: { insilmaril@0: name=""; insilmaril@0: sName=""; insilmaril@0: lName=""; insilmaril@44: type=Switch; insilmaril@0: sarg=""; insilmaril@0: active=false; insilmaril@0: } insilmaril@0: insilmaril@44: Option::Option (const QString &n, const Type &t, const QString &s, const QString &l) insilmaril@44: { insilmaril@44: sName="-"+s; insilmaril@44: lName="--"+l; insilmaril@44: type=t; insilmaril@44: name=n; insilmaril@44: } insilmaril@44: insilmaril@44: void Option::set(const QString &n, const Type &t, const QString &s, const QString &l) insilmaril@0: { insilmaril@0: sName="-"+s; insilmaril@0: lName="--"+l; insilmaril@0: type=t; insilmaril@0: name=n; insilmaril@0: } insilmaril@0: insilmaril@0: QString Option::getName () { return name; } insilmaril@0: QString Option::getShort () { return sName; } insilmaril@0: QString Option::getLong() { return lName; } insilmaril@44: Option::Type Option::getType() { return type; } insilmaril@0: void Option::setArg(const QString& s) { sarg=s; } insilmaril@0: QString Option::getArg() { return sarg; } insilmaril@0: void Option::setActive() { active=true; } insilmaril@0: bool Option::isActive() { return active; } insilmaril@0: insilmaril@0: /////////////////////////////////////////////////////////////// insilmaril@0: Options::Options() {} insilmaril@0: insilmaril@0: int Options::parse() insilmaril@0: { insilmaril@44: QStringList arglist=qApp->arguments(); insilmaril@0: insilmaril@0: // Get program name insilmaril@0: progname=arglist.first(); insilmaril@0: arglist.pop_front(); insilmaril@0: insilmaril@0: // Work through rest of options insilmaril@0: bool isFile; insilmaril@44: for (int i=0; i< arglist.size(); ++i) insilmaril@0: { insilmaril@0: isFile=true; insilmaril@44: if (arglist[i].left(1)=="-") insilmaril@0: { insilmaril@0: // Compare given option to all defined options insilmaril@44: for (int j=0; j < optlist.size(); ++j) insilmaril@0: { insilmaril@44: if (arglist.at(i)==optlist.value(j).getShort() || insilmaril@44: arglist.at(i)==optlist.value(j).getLong()) insilmaril@0: { insilmaril@44: optlist[j].setActive(); insilmaril@0: isFile=false; insilmaril@44: if (optlist[j].getType()==Option::String) insilmaril@0: { insilmaril@44: i++; insilmaril@44: if (i==arglist.size()) insilmaril@0: { insilmaril@44: qWarning ("Error: argument to option missing"); insilmaril@0: return 1; insilmaril@0: } insilmaril@44: optlist[j].setArg (arglist[i]); insilmaril@0: isFile=false; insilmaril@0: } insilmaril@0: break; insilmaril@0: } insilmaril@0: } insilmaril@0: if (isFile) insilmaril@0: { insilmaril@44: qWarning("Error: Unknown argument "); insilmaril@0: return 1; insilmaril@0: } insilmaril@0: } else insilmaril@44: filelist.append (arglist[i]); insilmaril@0: } insilmaril@0: return 0; insilmaril@0: } insilmaril@0: insilmaril@44: void Options::add (Option o) insilmaril@44: { insilmaril@44: optlist.append (o); insilmaril@44: } insilmaril@44: insilmaril@44: void Options::add (const QString &n, const Option::Type &t=Option::Switch, const QString &s="", const QString &l="") insilmaril@0: { insilmaril@0: Option o; insilmaril@0: o.set (n,t,s,l); insilmaril@0: optlist.append (o); insilmaril@0: } insilmaril@0: insilmaril@0: void Options::setHelpText (const QString &s) insilmaril@0: { insilmaril@0: helptext=s; insilmaril@0: } insilmaril@0: insilmaril@0: QString Options::getHelpText () insilmaril@0: { insilmaril@0: return helptext; insilmaril@0: } insilmaril@0: insilmaril@0: QString Options::getProgramName() insilmaril@0: { insilmaril@0: return progname; insilmaril@0: } insilmaril@0: insilmaril@0: QStringList Options::getFileList () insilmaril@0: { insilmaril@0: return filelist; insilmaril@0: } insilmaril@0: insilmaril@0: bool Options::isOn(const QString &s) insilmaril@0: { insilmaril@44: for (int i=0; i