Core is realy wait for work and test
Aliens create, wavetrace work, towers build, aliens move - thats all by now. I think it is time to write Graphic and Network modules.
This commit is contained in:
254
settreader.cpp
Normal file
254
settreader.cpp
Normal file
@@ -0,0 +1,254 @@
|
||||
#include <settreader.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
SettingsReader::SettingsReader(const QString & fname) {
|
||||
isFile = true;
|
||||
file = new QFile(fname);
|
||||
file->open(QIODevice::ReadWrite);
|
||||
stream = new QTextStream(file);
|
||||
parse();
|
||||
}
|
||||
|
||||
|
||||
SettingsReader::SettingsReader(QString * string) {
|
||||
isFile = false;
|
||||
str = string;
|
||||
stream = new QTextStream(string);
|
||||
parse();
|
||||
}
|
||||
|
||||
|
||||
SettingsReader::~SettingsReader() {
|
||||
settname.clear();
|
||||
settval.clear();
|
||||
settcom.clear();
|
||||
setttab.clear();
|
||||
settlines.clear();
|
||||
setttype.clear();
|
||||
all.clear();
|
||||
stream->setDevice(0);
|
||||
delete stream;
|
||||
if (isFile) {
|
||||
file->close();
|
||||
delete file;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString SettingsReader::getValue(QString vname, QString def, bool * exist) {
|
||||
for (int i = 0; i < settname.size(); i++) {
|
||||
if (settname.at(i) == vname) {
|
||||
if (exist != 0) *exist = true;
|
||||
return settval.at(i);
|
||||
}
|
||||
}
|
||||
if (exist != 0) *exist = false;
|
||||
return def;
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::addLine(const QString & name, const QString & value, const QString & type) {
|
||||
if (setttab.size() > 0 && all.size() > 0) *stream << setttab.at(setttab.size() - 1) << name << " = " << value << " #" << type << endl;
|
||||
else *stream << name << " = " << value << " #" << type << endl;
|
||||
settname.append(name);
|
||||
settval.append(value);
|
||||
settcom.append("");
|
||||
setttype.append(type);
|
||||
if (setttab.size() > 0) setttab.append(setttab.at(setttab.size() - 1));
|
||||
else setttab.append(" ");
|
||||
settlines.push_back(all.size());
|
||||
all.append(name + " = " + value + " #" + type);
|
||||
stream->flush();
|
||||
if (isFile) file->flush();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::insertLine(int number, const QString & name, const QString & value, const QString & type) {
|
||||
if (number >= settname.size()) {
|
||||
addLine(name, value, type);
|
||||
return;
|
||||
}
|
||||
settname.insert(number, name);
|
||||
settval.insert(number, value);
|
||||
settcom.insert(number, "");
|
||||
setttab.insert(number, setttab.at(number));
|
||||
setttype.insert(number, type);
|
||||
settlines.insert(number, settlines.at(number));
|
||||
for (int i = number + 1; i < settlines.size(); i++) settlines[i]++;
|
||||
all.insert(settlines.at(number), name + " = " + value + " #" + type);
|
||||
stream->flush();
|
||||
if (isFile) file->flush();
|
||||
writeAll();
|
||||
}
|
||||
|
||||
|
||||
int SettingsReader::numValues() {
|
||||
return settval.size();
|
||||
}
|
||||
|
||||
|
||||
QString SettingsReader::getValue(int number) {
|
||||
return settval.at(number);
|
||||
}
|
||||
|
||||
|
||||
QString SettingsReader::getName(int number) {
|
||||
return settname.at(number);
|
||||
}
|
||||
|
||||
|
||||
QString SettingsReader::getComment(int number) {
|
||||
return settcom.at(number);
|
||||
}
|
||||
|
||||
|
||||
char SettingsReader::getType(int number) {
|
||||
return setttype.at(number)[0].cell();
|
||||
}
|
||||
|
||||
|
||||
int SettingsReader::getNumber(const QString & name) {
|
||||
for (int i = 0; i < settname.size(); i++) {
|
||||
if (settname.at(i) == name) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::setValue(int number, const QString & value, bool write) {
|
||||
QString tmp = settname.at(number) + " = " + value + " #" + setttype.at(number) + " " + settcom.at(number);
|
||||
settval.replace(number, value);
|
||||
all.replace(settlines[number], tmp);
|
||||
if (write) writeAll();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::setValue(const QString & name, const QString & value, bool write) {
|
||||
int number = getNumber(name);
|
||||
if (number == -1) return;
|
||||
QString tmp = settname.at(number) + " = " + value + " #" + setttype.at(number) + " " + settcom.at(number);
|
||||
settval.replace(number, value);
|
||||
all.replace(settlines[number], tmp);
|
||||
if (write) writeAll();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::setName(int number, const QString & name) {
|
||||
QString tmp = name + " = " + settval.at(number) + " #" + setttype.at(number) + " " + settcom.at(number);
|
||||
settname.replace(number, name);
|
||||
all.replace(settlines[number], tmp);
|
||||
writeAll();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::setType(int number, const QString & type) {
|
||||
QString tmp = settname.at(number) + " = " + settval.at(number) + " #" + type + " " + settcom.at(number);
|
||||
setttype.replace(number, type);
|
||||
all.replace(settlines[number], tmp);
|
||||
writeAll();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::setComment(int number, const QString & comment) {
|
||||
QString tmp = settname.at(number) + " = " + settval.at(number) + " #" + setttype.at(number) + " " + comment;
|
||||
settcom.replace(number, comment);
|
||||
all.replace(settlines[number], tmp);
|
||||
writeAll();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::deleteLine(const QString & name) {
|
||||
bool exist = false;
|
||||
int i;
|
||||
for (i = 0; i < settname.size(); i++) {
|
||||
if (settname.at(i) == name) {
|
||||
exist = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!exist) return;
|
||||
deleteLine(i);
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::deleteLine(int number) {
|
||||
settname.remove(number);
|
||||
settval.remove(number);
|
||||
settcom.remove(number);
|
||||
setttab.remove(number);
|
||||
setttype.remove(number);
|
||||
all.remove(settlines[number]);
|
||||
for (int i = number; i < settlines.size(); i++) settlines[i]--;
|
||||
settlines.remove(number);
|
||||
writeAll();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::writeAll() {
|
||||
if (isFile) file->resize(0);
|
||||
else *str = "";
|
||||
stream->seek(0);
|
||||
int c = 0;
|
||||
for (int i = 0; i < all.size(); i++) {
|
||||
if (c < settlines.size() && c < setttab.size()) {
|
||||
if (settlines[c] == i) {
|
||||
*stream << setttab.at(c);
|
||||
c++;
|
||||
}
|
||||
}
|
||||
*stream << all.at(i) << endl;
|
||||
}
|
||||
if (isFile) file->flush();
|
||||
readAll();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::readAll() {
|
||||
settname.clear();
|
||||
settval.clear();
|
||||
settcom.clear();
|
||||
setttab.clear();
|
||||
settlines.clear();
|
||||
setttype.clear();
|
||||
all.clear();
|
||||
if (isFile) file->flush();
|
||||
parse();
|
||||
}
|
||||
|
||||
|
||||
void SettingsReader::parse() {
|
||||
QString str, tab, comm;
|
||||
int ind, sind;
|
||||
stream->seek(0);
|
||||
lines = 0;
|
||||
if (isFile) if (!file->exists()) return;
|
||||
while (!stream->atEnd()) {
|
||||
str = stream->readLine();
|
||||
tab = str.left(str.indexOf(str.trimmed().left(1)));
|
||||
str = str.trimmed();
|
||||
all.append(str);
|
||||
ind = str.indexOf('=');
|
||||
if ((ind > 0) && !(str.left(1) == "#")) {
|
||||
sind = str.indexOf('#');
|
||||
if (sind > 0) {
|
||||
comm = str.right(str.length() - sind - 1).trimmed();
|
||||
setttype.append(comm.left(1));
|
||||
comm = comm.right(comm.length() - 1).trimmed();
|
||||
settcom.append(comm);
|
||||
str.truncate(sind);
|
||||
} else {
|
||||
setttype.append("s");
|
||||
settcom.append("");
|
||||
}
|
||||
settname.append((str.left(ind)).trimmed());
|
||||
settval.append((str.right(str.length() - ind - 1)).trimmed());
|
||||
setttab.append(tab);
|
||||
settlines.push_back(lines);
|
||||
}
|
||||
lines++;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user