diff options
Diffstat (limited to 'general/Ini.cpp')
| -rw-r--r-- | general/Ini.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/general/Ini.cpp b/general/Ini.cpp new file mode 100644 index 00000000..61de9836 --- /dev/null +++ b/general/Ini.cpp @@ -0,0 +1,220 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: general/Ini.cpp +// Purpose: Define sections for data files +// Author: Ben Boeckel +// Modified by: Ben Boeckel +// Created: Fri May 4 23:27:37 2007 +// Copyright: ©2007 Nerdy Productions +// Licence: +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see <http://www.gnu.org/licenses/>. +///////////////////////////////////////////////////////////////////////////// + +#include "Ini.h" + +PokeGen::Ini::Ini(const QString& n) : + name(n) +{ +} + +PokeGen::Ini::Ini(QFile& f) +{ + Load(f); +} + +void PokeGen::Ini::Export(const QString& p) const +{ + QFile fout(p); + fout.open(QIODevice::WriteOnly); + Export(fout); + fout.close(); +} + +void PokeGen::Ini::Export(QFile& file) const +{ + QTextStream fout(&file); + fout << '[' << name << "]\n"; + for (QMap<QString, QString>::ConstIterator i = fields.begin(); i != fields.end(); ++i) + fout << i.key() << '=' << i.value() << '\n'; + fout << '\n'; +} + +void PokeGen::Ini::AddField(const QString& n, const bool v) +{ + fields[n] = v ? "true" : "false"; +} + +void PokeGen::Ini::AddField(const QString& n, const unsigned char v) +{ + fields[n] = QString("%1").arg(v); +} + +void PokeGen::Ini::AddField(const QString& n, const int v) +{ + fields[n] = QString("%1").arg(v); +} + +void PokeGen::Ini::AddField(const QString& n, const unsigned v) +{ + fields[n] = QString("%1").arg(v); +} + +void PokeGen::Ini::AddField(const QString& n, const float v) +{ + fields[n] = QString("%1").arg(v); +} + +void PokeGen::Ini::AddField(const QString& n, const double v) +{ + fields[n] = QString("%1").arg(v); +} + +void PokeGen::Ini::AddField(const QString& n, const QString& v) +{ + fields[n] = v; +} + +QString PokeGen::Ini::GetName() const +{ + return name; +} + +void PokeGen::Ini::GetValue(const QString& field, bool& val, const bool def) +{ + if (!fields.count(field)) + { + val = def; + return; + } + if (fields[field] == "true") + val = true; + else if (fields[field] == "false") + val = false; + else + val = def; +} + +void PokeGen::Ini::GetValue(const QString& field, unsigned char& val, const unsigned char def) +{ + if (!fields.count(field)) + { + val = def; + return; + } + bool ok; + unsigned temp; + temp = fields[field].toUInt(&ok); + if (ok && (temp <= UCHAR_MAX)) + val = temp; + else + val = def; +} + +void PokeGen::Ini::GetValue(const QString& field, int& val, const int def) +{ + if (!fields.count(field)) + { + val = def; + return; + } + bool ok; + val = fields[field].toInt(&ok); + if (!ok) + val = def; +} + +void PokeGen::Ini::GetValue(const QString& field, unsigned& val, const unsigned def) +{ + if (!fields.count(field)) + { + val = def; + return; + } + bool ok; + val = fields[field].toUInt(&ok); + if (!ok) + val = def; +} + +void PokeGen::Ini::GetValue(const QString& field, float& val, const float def) +{ + if (!fields.count(field)) + { + val = def; + return; + } + bool ok; + val = fields[field].toFloat(&ok); + if (!ok) + val = def; +} + +void PokeGen::Ini::GetValue(const QString& field, double& val, const double def) +{ + if (!fields.count(field)) + { + val = def; + return; + } + bool ok; + val = fields[field].toDouble(&ok); + if (!ok) + val = def; +} + +void PokeGen::Ini::GetValue(const QString& field, QString& val, const QString& def) +{ + if (!fields.count(field)) + { + val = def; + return; + } + val = fields[field]; +} + +bool PokeGen::Ini::IsValid() const +{ + return isValid; +} + +bool PokeGen::Ini::Load(QFile& file) +{ + QTextStream fin(&file); + QString line = fin.readLine(); + QString field; + QString value; + fields.clear(); + int pos; + name = ""; + isValid = true; + if (line.at(0) != '[') + return (isValid = false); + if (line.at(line.length() - 1) != ']') + return (isValid = false); + name = line.mid(1, line.length() - 2); + line = fin.readLine(); + while (!fin.atEnd()) + { + if (line.at(0) == '[') + return (isValid = false); + pos = line.indexOf('='); + if (pos == -1) + return (isValid = false); + field = line.mid(0, pos - 1); + value = line.mid(pos + 1, line.length() - pos); + if (field.isEmpty()) + return (isValid = false); + line = fin.readLine(); + } + return true; +} |
