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