Map container: Add question mark in front of missing theme name
/* * Hedgewars, a free turn based strategy game * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> * * 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; version 2 of the License * * 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, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *//** * @file * @brief MapModel class definition */#ifndef HEDGEWARS_MAPMODEL_H#define HEDGEWARS_MAPMODEL_H#include <QStandardItemModel>#include <QSortFilterProxyModel>#include <QStringList>#include <QTextStream>#include <QHash>#include <QMap>#include <QIcon>#include <QComboBox>#include "DataManager.h"/** * @brief A model that vertically lists available maps * * @author sheepluva * @since 0.9.18 */class MapModel : public QStandardItemModel{ Q_OBJECT public: enum MapType { Invalid, GeneratedMap, GeneratedMaze, GeneratedPerlin, HandDrawnMap, MissionMap, StaticMap, FortsMap }; /// a struct for holding the attributes of a map. struct MapInfo { MapType type; ///< The map-type QString name; ///< The internal name. QString theme; ///< The theme to be used. (can be empty) quint32 limit; ///< The maximum allowed number of hedgehogs. QString scheme; ///< Default scheme name or "locked", for mission-maps. QString weapons; ///< Default weaponset name or "locked", for missions-maps. QString desc; ///< The brief 1-2 sentence description of the mission, for mission-maps. bool dlc; ///< True if this map was not packaged with the game }; MapModel(MapType maptype, QObject *parent = 0); /** * @brief Searches maps in model to find out if one exists * @param map map of which to check existence * @return true if it exists */ bool mapExists(const QString & map); /** * @brief Finds a map index (column, row) for a map name * @param map map of which to find index+column * @return QPair<int, int> with column, index, or (-1, -1) if map not found */ //QPair<int, int> findMap(const QString & map) const; /** * @brief Finds a map index for a map name * @param map map of which to find index * @return int of index, or -1 if map not found */ int findMap(const QString & map); /** * @brief Finds and returns a map item for a map name * @param map map * @return QStandardItem of map, or NULL if map not found */ QStandardItem * getMap(const QString & map); // Static MapInfos for drawn and generated maps static MapInfo MapInfoRandom, MapInfoMaze, MapInfoPerlin, MapInfoDrawn, MapInfoForts; /// Loads the maps bool loadMaps(); /// returns this model but excluding DLC themes QSortFilterProxyModel * withoutDLC(); private: /// map index lookup table. QPair<int, int> contains: <column, index> //QHash<QString, QPair<int, int> > m_mapIndexes; QHash<QString, int> m_mapIndexes; MapType m_maptype; bool m_loaded; QSortFilterProxyModel * m_filteredNoDLC; /** * @brief Creates a QStandardItem, that holds the map info and item appearance. * The used role for the data is Qt::UserRole + 1. * @param icon the icon to be displayed (can be an empty QIcon()). * @param caption the text to be displayed. * @param type the type of the map. * @param name the internal name of the map. * @param theme the theme of the map (or empty if none). * @param limit the hedgehog limit of the map. * @param scheme mission map: default scheme name or "locked". * @param weapons mission map: default weaponset name or "locked". * @param desc mission map: description of mission. * @return pointer to item representing the map info: at Qt::UserRole + 1. */ static QStandardItem * infoToItem( const QIcon & icon, const QString caption, MapType type = Invalid, QString name = "", QString theme = "", quint32 limit = 0, QString scheme = "", QString weapons = "", QString desc = "", bool dlc = false);};Q_DECLARE_METATYPE(MapModel::MapInfo)#endif // HEDGEWARS_MAPMODEL_H