diff options
Diffstat (limited to 'ktouch/src/ktouchleveldata.h')
-rw-r--r-- | ktouch/src/ktouchleveldata.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/ktouch/src/ktouchleveldata.h b/ktouch/src/ktouchleveldata.h new file mode 100644 index 00000000..8055824d --- /dev/null +++ b/ktouch/src/ktouchleveldata.h @@ -0,0 +1,80 @@ +/*************************************************************************** + * ktouchleveldata.h * + * ----------------- * + * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai * + * ghorwin@users.sourceforge.net * + * * + * 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 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#ifndef KTOUCHLEVELDATA_H +#define KTOUCHLEVELDATA_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <qstring.h> +#include <qtextstream.h> +#include <qvaluevector.h> +#include <qdom.h> + +class QDomDocument; +class QDomElement; + +/// This class contains the data of one level in a lecture and provides +/// access to the lines of that level. +/// +/// A lecture (KTouchLecture) typically contains multiple levels. Each +/// level contains a level description, a string with the +/// newly introduced characters and several lines of training text. +/// There is ALWAYS at least one line of training text in the level!<p> +/// During a training session you might want to retrieve a certain line of +/// the level. You can use the member function line(lineNumber) to get a +/// line of the level. +/// The member function count() returns the number of lines in this level. +class KTouchLevelData { + public: + /// Default constructor, creates a default level. + KTouchLevelData() { createDefault(); } + /// Constructor for creating a new level. + KTouchLevelData(const QString& comment, const QString& newChars) + : m_comment(comment), m_newChars(newChars) { createDefault(); } + /// Returns the level description (comment). + const QString& comment() const { return m_comment; } + /// Returns the new characters string. + const QString& newChars() const { return m_newChars; } + /// Returns the line with number 'lineNumber' (0 means first line). + /// + /// If the line number is out of range, the first line will be returned. + const QString& line(unsigned int lineNumber) const; + /// Returns the number of lines. + unsigned int count() const { return m_lines.size(); } + + private: + /// Creates a default level. + void createDefault(); + /// Reads a level from the input stream. + /// @return Returns 'true', when a level could be read successfully, or 'false' otherwise. + bool readLevel(QTextStream& in); + /// Reads a level from a XML Dom Node. + /// @return Returns 'true', when a level could be read successfully, or 'false' otherwise. + bool readLevel(QDomNode in); + /// Writes the level data into the output stream. + void writeLevel(QTextStream& out) const; + /// Writes the level data into the output stream. + void writeLevel(QDomDocument& doc, QDomElement& root) const; + + QString m_comment; ///< A comment for the level. + QString m_newChars; ///< Contains the newly introduced characters in this level. + QValueVector<QString> m_lines; ///< The lines of the level. + + // so I don't have to allow access to read/write function to everybody :-) + friend class KTouchLecture; + friend class KTouchLectureEditor; +}; + +#endif // KTOUCHLEVELDATA_H |