insilmaril@0: #include "options.h" insilmaril@0: #include insilmaril@0: insilmaril@0: #include 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@0: type=SwitchOption; insilmaril@0: sarg=""; insilmaril@0: active=false; insilmaril@0: } insilmaril@0: insilmaril@0: void Option::set(const QString &n, const OptionType &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@0: OptionType 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@0: while (iargc()) 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@0: OptionList::iterator itopt; insilmaril@0: QStringList::iterator itarg; insilmaril@0: itarg=arglist.begin(); insilmaril@0: while (itarg!=arglist.end()) insilmaril@0: { insilmaril@0: isFile=true; insilmaril@0: if ((*itarg).left(1)=="-") insilmaril@0: { insilmaril@0: // Compare given option to all defined options insilmaril@0: itopt=optlist.begin(); insilmaril@0: while (itopt!=optlist.end()) insilmaril@0: { insilmaril@0: if ((*itarg)==(*itopt).getShort() || insilmaril@0: (*itarg)==(*itopt).getLong()) insilmaril@0: { insilmaril@0: (*itopt).setActive(); insilmaril@0: isFile=false; insilmaril@0: if ((*itopt).getType()==StringOption) insilmaril@0: { insilmaril@0: itarg++; insilmaril@0: if (itarg==arglist.end()) insilmaril@0: { insilmaril@0: cout << "Error: argument to option missing\n"; insilmaril@0: return 1; insilmaril@0: } insilmaril@0: (*itopt).setArg (*itarg); insilmaril@0: isFile=false; insilmaril@0: } insilmaril@0: break; insilmaril@0: } insilmaril@0: itopt++; insilmaril@0: } insilmaril@0: if (isFile) insilmaril@0: { insilmaril@2: qWarning("Error: Unknown argument "); insilmaril@0: return 1; insilmaril@0: } insilmaril@0: } else insilmaril@0: filelist.append (*itarg); insilmaril@0: itarg++; insilmaril@0: } insilmaril@0: return 0; insilmaril@0: } insilmaril@0: insilmaril@0: void Options::add (const QString &n, const OptionType &t=SwitchOption, 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@0: OptionList::iterator it; insilmaril@0: for ( it = optlist.begin(); it != optlist.end(); ++it ) insilmaril@0: if ((*it).getName()==s && (*it).isActive() ) insilmaril@0: return true; insilmaril@0: return false; insilmaril@0: } insilmaril@0: insilmaril@0: QString Options::getArg(const QString &s) insilmaril@0: { insilmaril@0: OptionList::iterator it; insilmaril@0: for ( it = optlist.begin(); it != optlist.end(); ++it ) insilmaril@0: { insilmaril@0: if ((*it).getName()==s) insilmaril@0: return (*it).getArg(); insilmaril@0: } insilmaril@0: return ""; insilmaril@0: }