Initial Commit
[HECS.git] / ConfigParser.cpp
blobf6e07fd06b85666e6841c1a07cd3ac0fce708193
3 #include "ConfigParser.h"
6 const char STARTBRACKET = '[';
7 const char ENDBRACKET = ']';
8 const char COMMENT = '#';
9 const char NEWLINE = '\n';
11 ConfigParser::ConfigParser () { }
13 ConfigParser::~ConfigParser () { }
16 ConfigParser::ConfigParser (const QString& fileName)
18 fileStr = fileName;
19 openFile();
23 void ConfigParser::openFile ()
26 QString secStr, tokStr;
27 QFile file(fileStr);
30 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
32 fileExists = false;
33 return;
36 fileExists = true;
37 QTextStream in(&file);
38 QString line = "";
40 while (!line.isNull())
42 line = in.readLine();
43 tokStr = line.trimmed();
45 if (tokStr.startsWith(STARTBRACKET))
47 secStr = parseSection(tokStr);
48 continue;
51 else if (tokStr.startsWith(COMMENT))
52 continue ;
53 else if (tokStr.isEmpty())
54 continue ;
55 else if (secStr.startsWith("HLE"))
56 parseHleEntry(secStr,tokStr);
57 else
58 parseEntry(secStr,tokStr);
62 bool ConfigParser::getFileExists()
64 return fileExists;
68 //Parse Tokens of line
70 QString ConfigParser::parseSection (const QString& lineStrIn)
73 QString lineStr;
74 lineStr = lineStrIn.trimmed();
75 lineStr = lineStr.remove (STARTBRACKET);
76 lineStr = lineStr.remove (ENDBRACKET);
78 //qDebug ("" + lineStr.toLatin1());
79 return lineStr;
82 void ConfigParser::parseEntry (const QString& secName, const QString& token)
84 QString keyname, value;
86 keyname = token.section('=', 0, 0);
87 keyname = keyname.trimmed();
88 keyname = secName+ ":" + keyname;
90 value = token.section('=', 1, 1);
91 value = value.trimmed();
93 inputData[keyname] = value;
97 void ConfigParser::parseHleEntry (const QString& secName, const QString& token)
99 QString keyname, value;
101 keyname = token.section('=', 0, 0);
102 keyname = keyname.trimmed();
103 value = token.section('=', 1, 1);
104 value = value.trimmed();
106 if (keyname == "name")
107 m_currentElemName = value;
109 //HLEGarage:name = door
110 keyname = secName+ ":" + m_currentElemName + ":" + keyname;
113 //Stick in a StringList to use elsewhere
114 elementKeyNames << keyname;
116 inputData[keyname] = value;
120 QMap <QString, QString> ConfigParser::getInputData() const
122 return inputData;
125 double ConfigParser::getValueDouble (const QString& key)
127 QString value;
129 //If key doesn't exist silently return 0.00
130 if (!inputData.contains(key))
131 return 0.00;
133 value = inputData[key];
134 return value.toDouble();
137 int ConfigParser::getValueInt (const QString& key)
139 QString value;
141 //If key doesn't exist silently return 0
142 if (!inputData.contains(key))
143 return 0;
145 value = inputData[key];
146 return value.toInt();
150 QString ConfigParser::getValueString (const QString& key)
152 QString value;
154 //If key doesn't exist silently return 0
155 if (!inputData.contains(key))
156 return " ";
158 value = inputData[key];
159 return value;
162 bool ConfigParser::getValueBool (const QString& key)
164 QString value;
166 //If key doesn't exist silently return 0
167 if (!inputData.contains(key))
168 return 0;
170 value = inputData[key];
171 //return value.toBool();
172 return ' ';
175 QStringList ConfigParser::getElementKeyNames() const
177 return elementKeyNames;
180 QStringList ConfigParser::findHleEntries ()
182 QMapIterator <QString, QString> i(inputData);
183 QStringList valsOut;
184 QString item,lastElement,currElement;
186 while (i.hasNext())
188 i.next();
189 item = i.key();
190 if (item.startsWith("HLE"))
192 //Chop HLE Bit
193 item.remove(0, 3);
194 currElement = item.section(':',0,0);
196 if (currElement == lastElement)
197 continue;
198 else
200 valsOut << currElement;
201 lastElement = currElement;
205 return valsOut;