File indexing completed on 2024-04-28 04:05:21
0001 /* 0002 SPDX-FileCopyrightText: 2015 Jakob Gruber <jakob.gruber@gmail.com> 0003 SPDX-FileCopyrightText: 2011 Julian Helfferich <julian.helfferich@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef LEVELLOADER_H 0009 #define LEVELLOADER_H 0010 0011 #include <QImage> 0012 #include <QList> 0013 #include <QPixmap> 0014 #include <QString> 0015 #include <QSharedPointer> 0016 0017 #include "src/logic/board.h" 0018 0019 class QDomDocument; 0020 class QDomElement; 0021 class LevelLoader; 0022 0023 class Level 0024 { 0025 friend class LevelLoader; 0026 public: 0027 Level(); 0028 0029 QString name() const; 0030 QString author() const; 0031 QString levelset() const { return m_levelset; } 0032 int difficulty() const { return m_difficulty; } 0033 int width() const { return m_width; } 0034 int height() const { return m_height; } 0035 QList<Board::State> map() const { return m_map; } 0036 QPixmap preview() const { return m_preview; } 0037 0038 QString visibleName() const; 0039 bool solved() const { return m_solved; } 0040 int solvedTime() const { return m_solved_time; } 0041 void setSolved(int seconds); 0042 0043 bool operator==(const Level &that) const; 0044 0045 private: 0046 void finalize(); /* needs to be called by loader when done constructing */ 0047 void constructPreview(); 0048 void readSettings(); 0049 void writeSettings(int seconds); 0050 QString key() const; 0051 0052 QString m_name, m_author, m_levelset; 0053 int m_difficulty; 0054 int m_width, m_height; 0055 QList<Board::State> m_map; 0056 bool m_solved; 0057 int m_solved_time; 0058 QPixmap m_preview; 0059 }; 0060 0061 class LevelLoader 0062 { 0063 public: 0064 explicit LevelLoader(const QString &filename); 0065 0066 QList<QSharedPointer<Level> > loadLevels(); 0067 static QList<QSharedPointer<Level> > load(); 0068 0069 private: 0070 void setLevelset(const QString& levelname); 0071 QSharedPointer<Level> loadLevel(const QDomElement &node) const; 0072 QList<Board::State> loadRow(const QDomElement &node) const; 0073 QImage openXPM(const QDomElement &node) const; 0074 QList<Board::State> loadXPM(const QImage &xpm) const; 0075 0076 QSharedPointer<QDomDocument> m_levelset; 0077 QString m_levelsetname; 0078 0079 const QString m_filename; 0080 0081 bool m_valid; 0082 }; 0083 0084 #endif // LEVELLOADER_H