]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/options.cpp
New upstream version 2.9.22
[sven/vym.git] / src / options.cpp
diff --git a/src/options.cpp b/src/options.cpp
new file mode 100644 (file)
index 0000000..719c08e
--- /dev/null
@@ -0,0 +1,123 @@
+#include "options.h"
+
+#include <QApplication>
+#include <iostream>
+
+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();
+}