initial import
[vym] / options.cpp
diff --git a/options.cpp b/options.cpp
new file mode 100644 (file)
index 0000000..fcbdc16
--- /dev/null
@@ -0,0 +1,141 @@
+#include "options.h"
+
+#include <iostream>
+#include <QApplication>
+
+
+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;
+       for (int 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();
+}