]> git.sven.stormbind.net Git - sven/vym.git/blob - src/options.cpp
New upstream version 2.9.22
[sven/vym.git] / src / options.cpp
1 #include "options.h"
2
3 #include <QApplication>
4 #include <iostream>
5
6 using namespace std;
7
8 Option::Option()
9 {
10     name = "";
11     sName = "";
12     lName = "";
13     type = Switch;
14     sarg = "";
15     active = false;
16 }
17
18 Option::Option(const QString &n, const Type &t, const QString &s,
19                const QString &l)
20 {
21     sName = "-" + s;
22     lName = "--" + l;
23     type = t;
24     name = n;
25 }
26
27 void Option::set(const QString &n, const Type &t, const QString &s,
28                  const QString &l)
29 {
30     sName = "-" + s;
31     lName = "--" + l;
32     type = t;
33     name = n;
34 }
35
36 QString Option::getName() { return name; }
37 QString Option::getShort() { return sName; }
38 QString Option::getLong() { return lName; }
39 Option::Type Option::getType() { return type; }
40 void Option::setArg(const QString &s) { sarg = s; }
41 QString Option::getArg() { return sarg; }
42 void Option::setActive() { active = true; }
43 bool Option::isActive() { return active; }
44
45 ///////////////////////////////////////////////////////////////
46 Options::Options() {}
47
48 int Options::parse()
49 {
50     QStringList arglist = qApp->arguments();
51
52     // Get program name
53     progname = arglist.first();
54     arglist.pop_front();
55
56     // Work through rest of options
57     bool isFile;
58     int i = 0;
59     for (i = 0; i < arglist.size(); ++i) {
60         isFile = true;
61         if (arglist[i].left(1) == "-") {
62             // Compare given option to all defined options
63             for (int j = 0; j < optlist.size(); ++j) {
64                 if (arglist.at(i) == optlist.value(j).getShort() ||
65                     arglist.at(i) == optlist.value(j).getLong()) {
66                     optlist[j].setActive();
67                     isFile = false;
68                     if (optlist[j].getType() == Option::String) {
69                         i++;
70                         if (i == arglist.size()) {
71                             qWarning("Error: argument to option missing");
72                             return 1;
73                         }
74                         optlist[j].setArg(arglist[i]);
75                         isFile = false;
76                     }
77                     break;
78                 }
79             }
80             if (isFile) {
81                 qWarning("Error: Unknown argument ");
82                 return 1;
83             }
84         }
85         else
86             filelist.append(arglist[i]);
87     }
88     return 0;
89 }
90
91 void Options::add(Option o) { optlist.append(o); }
92
93 void Options::add(const QString &n, const Option::Type &t = Option::Switch,
94                   const QString &s = "", const QString &l = "")
95 {
96     Option o;
97     o.set(n, t, s, l);
98     optlist.append(o);
99 }
100
101 void Options::setHelpText(const QString &s) { helptext = s; }
102
103 QString Options::getHelpText() { return helptext; }
104
105 QString Options::getProgramName() { return progname; }
106
107 QStringList Options::getFileList() { return filelist; }
108
109 bool Options::isOn(const QString &s)
110 {
111     for (int i = 0; i < optlist.size(); ++i)
112         if (optlist[i].getName() == s && optlist[i].isActive())
113             return true;
114     return false;
115 }
116
117 QString Options::getArg(const QString &s)
118 {
119     for (int i = 0; i < optlist.size(); ++i)
120         if (optlist[i].getName() == s)
121             return optlist[i].getArg();
122     return QString();
123 }