options.cpp
author insilmaril
Mon, 18 May 2009 09:41:31 +0000
changeset 770 57ce1ba6d1cb
parent 714 3368b54c7946
permissions -rw-r--r--
Fixed Standard Flags finally
insilmaril@0
     1
#include "options.h"
insilmaril@408
     2
insilmaril@0
     3
#include <iostream>
insilmaril@408
     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@474
    15
	type=Switch;
insilmaril@0
    16
	sarg="";
insilmaril@0
    17
	active=false;
insilmaril@0
    18
}
insilmaril@0
    19
insilmaril@474
    20
Option::Option (const QString &n, const Type &t, const QString &s, const QString &l)
insilmaril@408
    21
{
insilmaril@408
    22
	sName="-"+s;
insilmaril@408
    23
	lName="--"+l;
insilmaril@408
    24
	type=t;
insilmaril@408
    25
	name=n;
insilmaril@408
    26
}
insilmaril@408
    27
insilmaril@474
    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@474
    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@714
    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@714
    58
	int i=0;
insilmaril@408
    59
	for (i=0; i< arglist.size(); ++i)
insilmaril@0
    60
	{
insilmaril@0
    61
		isFile=true;
insilmaril@408
    62
		if (arglist[i].left(1)=="-")
insilmaril@0
    63
		{
insilmaril@0
    64
			// Compare given option to all defined options
insilmaril@408
    65
			for (int j=0; j < optlist.size(); ++j)
insilmaril@0
    66
			{
insilmaril@408
    67
				if (arglist.at(i)==optlist.value(j).getShort() || 
insilmaril@408
    68
					arglist.at(i)==optlist.value(j).getLong())
insilmaril@0
    69
				{	
insilmaril@408
    70
					optlist[j].setActive();
insilmaril@0
    71
					isFile=false;
insilmaril@474
    72
					if (optlist[j].getType()==Option::String)
insilmaril@0
    73
					{
insilmaril@408
    74
						i++;
insilmaril@408
    75
						if (i==arglist.size())
insilmaril@0
    76
						{
insilmaril@408
    77
							qWarning ("Error: argument to option missing");
insilmaril@0
    78
							return 1;
insilmaril@0
    79
						}
insilmaril@408
    80
						optlist[j].setArg (arglist[i]);
insilmaril@0
    81
						isFile=false;
insilmaril@0
    82
					}
insilmaril@0
    83
					break;
insilmaril@0
    84
				} 
insilmaril@0
    85
			}
insilmaril@0
    86
			if (isFile)
insilmaril@0
    87
			{
insilmaril@2
    88
				qWarning("Error: Unknown argument ");
insilmaril@0
    89
				return 1;
insilmaril@0
    90
			}
insilmaril@0
    91
		} else
insilmaril@408
    92
			filelist.append (arglist[i]);
insilmaril@0
    93
	}
insilmaril@0
    94
	return 0;
insilmaril@0
    95
}
insilmaril@0
    96
insilmaril@408
    97
void Options::add (Option o)
insilmaril@408
    98
{
insilmaril@408
    99
	optlist.append (o);
insilmaril@408
   100
}
insilmaril@408
   101
insilmaril@474
   102
void Options::add (const QString &n, const Option::Type &t=Option::Switch, const QString &s="", const QString &l="")
insilmaril@0
   103
{
insilmaril@0
   104
	Option o;
insilmaril@0
   105
	o.set (n,t,s,l);
insilmaril@0
   106
	optlist.append (o);
insilmaril@0
   107
}
insilmaril@0
   108
insilmaril@0
   109
void Options::setHelpText (const QString &s)
insilmaril@0
   110
{
insilmaril@0
   111
	helptext=s;
insilmaril@0
   112
}
insilmaril@0
   113
	
insilmaril@0
   114
QString Options::getHelpText ()
insilmaril@0
   115
{
insilmaril@0
   116
	return helptext;
insilmaril@0
   117
}
insilmaril@0
   118
insilmaril@0
   119
QString Options::getProgramName()
insilmaril@0
   120
{
insilmaril@0
   121
	return progname;
insilmaril@0
   122
}
insilmaril@0
   123
insilmaril@0
   124
QStringList Options::getFileList ()
insilmaril@0
   125
{
insilmaril@0
   126
	return filelist;
insilmaril@0
   127
}
insilmaril@0
   128
insilmaril@0
   129
bool Options::isOn(const QString &s)
insilmaril@0
   130
{
insilmaril@408
   131
	for (int i=0; i<optlist.size(); ++i)
insilmaril@408
   132
		if (optlist[i].getName()==s && optlist[i].isActive() )
insilmaril@0
   133
			return true;
insilmaril@0
   134
	return false;
insilmaril@0
   135
}
insilmaril@0
   136
insilmaril@0
   137
QString Options::getArg(const QString &s)
insilmaril@0
   138
{
insilmaril@408
   139
	for (int i=0; i<optlist.size(); ++i)
insilmaril@408
   140
		if (optlist[i].getName()==s) return optlist[i].getArg();
insilmaril@408
   141
	return QString();
insilmaril@0
   142
}