Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/inistream.h')
-rw-r--r--src/inistream.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/inistream.h b/src/inistream.h
new file mode 100644
index 0000000..724c598
--- /dev/null
+++ b/src/inistream.h
@@ -0,0 +1,105 @@
+/*
+ inistream.h
+ This file is part of the Project::OSiRiON world editor
+ and is distributed under the terms and conditions of
+ the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_EDITOR_INISTREAM__
+#define __INCLUDED_EDITOR_INISTREAM__
+
+#include <QColor>
+#include <QString>
+#include <QTextStream>
+
+namespace editor
+{
+
+/// a class to read ini streams
+/**
+ * The IniStream class is able to decode the structure of a windows-like
+ * .ini file from a text stream.
+ **/
+class IniStream
+{
+public:
+ IniStream();
+
+ ~IniStream();
+
+ /// parse one line, returns false on end-of-file
+ bool getline(QTextStream &textstream);
+
+ /// current section label
+ inline QString section() const {
+ return section_current;
+ }
+
+ /// current key
+ inline QString key() const {
+ return key_current;
+ }
+
+ /// current value
+ inline QString value() const {
+ return value_current;
+ }
+
+ /// current line number
+ inline unsigned int line() const {
+ return line_number;
+ }
+
+ /// true if the last read statement was a section header
+ bool got_section() const;
+
+ /// true if the current section matches
+ bool in_section(const char *sectionlabel) const;
+
+ /// true if the last read statement was a certain section header
+ bool got_section(const char * sectionlabel) const;
+
+ /// true if the last read statement was a key=value pair
+ bool got_key() const;
+
+ bool got_key(const char * keylabel);
+
+ /// check if the last read key=value pair matches keylabel and store the value in valuestring
+ bool got_key_string(const char * keylabel, QString & valuestring);
+
+ /// check if the last read key=value pair matches keylabel and store the value in x y and z
+ bool got_key_vector3f(const char *keylabel, float &x, float &y, float &z);
+
+ /*
+ /// check if the last read key=value pair matches keylabel and store the value in valuestring, converted to label
+ bool got_key_label(const char * keylabel, QString & labelstring);
+
+ bool got_key_color(const char * keylabel, QColor & color);
+
+ bool got_key_float(const char * keylabel, float & f);
+
+ bool got_key_angle(const char * keylabel, float & f);
+
+ bool got_key_long(const char * keylabel, long & l);
+
+ bool got_key_vector3f(const char * keylabel, math::Vector3f & v);
+
+ bool got_key_bool(const char * keylabel, bool & b);
+ */
+
+ void clear();
+
+private:
+ QString section_current;
+ QString key_current;
+ QString value_current;
+
+ bool last_read_was_key;
+ bool last_read_was_section;
+
+ unsigned int line_number;
+};
+
+} // namespace editor
+
+#endif // __INCLUDED_EDITOR_INISTREAM__