insilmaril@0: #include "options.h" insilmaril@408: insilmaril@0: #include insilmaril@408: #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@474: type=Switch; insilmaril@0: sarg=""; insilmaril@0: active=false; insilmaril@0: } insilmaril@0: insilmaril@474: Option::Option (const QString &n, const Type &t, const QString &s, const QString &l) insilmaril@408: { insilmaril@408: sName="-"+s; insilmaril@408: lName="--"+l; insilmaril@408: type=t; insilmaril@408: name=n; insilmaril@408: } insilmaril@408: insilmaril@474: 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@474: 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@0: QStringList arglist; insilmaril@0: int i=0; insilmaril@408: while ( i < qApp->argc()) insilmaril@0: { insilmaril@0: arglist.append (qApp->argv()[i]); insilmaril@0: i++; insilmaril@0: } 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@408: for (i=0; i< arglist.size(); ++i) insilmaril@0: { insilmaril@0: isFile=true; insilmaril@408: if (arglist[i].left(1)=="-") insilmaril@0: { insilmaril@0: // Compare given option to all defined options insilmaril@408: for (int j=0; j < optlist.size(); ++j) insilmaril@0: { insilmaril@408: if (arglist.at(i)==optlist.value(j).getShort() || insilmaril@408: arglist.at(i)==optlist.value(j).getLong()) insilmaril@0: { insilmaril@408: optlist[j].setActive(); insilmaril@0: isFile=false; insilmaril@474: if (optlist[j].getType()==Option::String) insilmaril@0: { insilmaril@408: i++; insilmaril@408: if (i==arglist.size()) insilmaril@0: { insilmaril@408: qWarning ("Error: argument to option missing"); insilmaril@0: return 1; insilmaril@0: } insilmaril@408: 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@2: qWarning("Error: Unknown argument "); insilmaril@0: return 1; insilmaril@0: } insilmaril@0: } else insilmaril@408: filelist.append (arglist[i]); insilmaril@0: } insilmaril@0: return 0; insilmaril@0: } insilmaril@0: insilmaril@408: void Options::add (Option o) insilmaril@408: { insilmaril@408: optlist.append (o); insilmaril@408: } insilmaril@408: insilmaril@474: 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@408: for (int i=0; i