# HG changeset patch # User dag10 # Date 1358795259 18000 # Node ID d99f46b676b53688bce13c45250666562756af96 # Parent 4543cc2049af1b1319f7511e3c6defaae9098b4e Prepends an asterisk on maps, styles, and themes that are DLC. (Resolves issue 515) diff -r 4543cc2049af -r d99f46b676b5 QTfrontend/model/GameStyleModel.cpp --- a/QTfrontend/model/GameStyleModel.cpp Mon Jan 21 13:04:57 2013 -0500 +++ b/QTfrontend/model/GameStyleModel.cpp Mon Jan 21 14:07:39 2013 -0500 @@ -23,14 +23,16 @@ #include +#include "physfs.h" #include "GameStyleModel.h" void GameStyleModel::loadGameStyles() { + const QString appDir = QString(PHYSFS_getBaseDir()); + beginResetModel(); - // empty list, so that we can (re)fill it QStandardItemModel::clear(); @@ -77,11 +79,16 @@ weapons.replace("_", " "); } - QStandardItem * item = new QStandardItem(name); + // detect if script is dlc + QString scriptPath = PHYSFS_getRealDir(QString("Scripts/Multiplayer/%1.lua").arg(script).toLocal8Bit().data()); + bool isDLC = !scriptPath.startsWith(appDir); + + QStandardItem * item = new QStandardItem((isDLC ? "*" : "") + name); item->setData(script, ScriptRole); item->setData(scheme, SchemeRole); item->setData(weapons, WeaponsRole); + item->setData(isDLC, IsDlcRole); items.append(item); } diff -r 4543cc2049af -r d99f46b676b5 QTfrontend/model/GameStyleModel.h --- a/QTfrontend/model/GameStyleModel.h Mon Jan 21 13:04:57 2013 -0500 +++ b/QTfrontend/model/GameStyleModel.h Mon Jan 21 14:07:39 2013 -0500 @@ -38,7 +38,7 @@ Q_OBJECT public: - enum DataRoles { ScriptRole = Qt::UserRole+1, SchemeRole, WeaponsRole }; + enum DataRoles { ScriptRole = Qt::UserRole+1, SchemeRole, WeaponsRole, IsDlcRole }; public slots: /// reloads the themes from the DataManager diff -r 4543cc2049af -r d99f46b676b5 QTfrontend/model/MapModel.cpp --- a/QTfrontend/model/MapModel.cpp Mon Jan 21 13:04:57 2013 -0500 +++ b/QTfrontend/model/MapModel.cpp Mon Jan 21 14:07:39 2013 -0500 @@ -23,6 +23,7 @@ #include +#include "physfs.h" #include "MapModel.h" #include "HWApplication.h" @@ -32,6 +33,8 @@ void MapModel::loadMaps(MapType maptype) { + const QString appDir = QString(PHYSFS_getBaseDir()); + // this method resets the contents of this model (important to know for views). beginResetModel(); @@ -66,12 +69,13 @@ QString scheme; QString weapons; QString desc; + bool dlc; // if there is a lua file for this map, then it's a mission bool isMission = mapLuaFile.exists(); MapType type = isMission ? MissionMap : StaticMap; - // If we're supposed to ignore this type, continue + // if we're supposed to ignore this type, continue if (type != maptype) continue; // load map info from file @@ -84,7 +88,7 @@ } mapCfgFile.close(); - // Load description (if applicable) + // load description (if applicable) if (isMission) { QString locale = HWApplication::keyboardInputLocale().name(); @@ -93,6 +97,10 @@ desc = descSettings.value(locale, QString()).toString().replace("|", "\n").replace("\\,", ","); } + // detect if map is dlc + QString mapDir = PHYSFS_getRealDir(QString("Maps/%1/map.cfg").arg(map).toLocal8Bit().data()); + dlc = !mapDir.startsWith(appDir); + // let's use some semi-sane hedgehog limit, rather than none if (limit == 0) limit = 18; @@ -117,7 +125,7 @@ // we know everything there is about the map, let's get am item for it QStandardItem * item = MapModel::infoToItem( - QIcon(), caption, type, map, theme, limit, scheme, weapons, desc); + QIcon(), caption, type, map, theme, limit, scheme, weapons, desc, dlc); // append item to the list mapList.append(item); @@ -170,9 +178,10 @@ quint32 limit, QString scheme, QString weapons, - QString desc) + QString desc, + bool dlc) { - QStandardItem * item = new QStandardItem(icon, caption); + QStandardItem * item = new QStandardItem(icon, (dlc ? "*" : "") + caption); MapInfo mapInfo; QVariant qvar(QVariant::UserType); @@ -183,6 +192,7 @@ mapInfo.scheme = scheme; mapInfo.weapons = weapons; mapInfo.desc = desc.isEmpty() ? tr("No description available.") : desc; + mapInfo.dlc = dlc; qvar.setValue(mapInfo); item->setData(qvar, Qt::UserRole + 1); diff -r 4543cc2049af -r d99f46b676b5 QTfrontend/model/MapModel.h --- a/QTfrontend/model/MapModel.h Mon Jan 21 13:04:57 2013 -0500 +++ b/QTfrontend/model/MapModel.h Mon Jan 21 14:07:39 2013 -0500 @@ -64,6 +64,7 @@ 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 }; /** @@ -131,7 +132,8 @@ quint32 limit = 0, QString scheme = "", QString weapons = "", - QString desc = ""); + QString desc = "", + bool dlc = false); }; Q_DECLARE_METATYPE(MapModel::MapInfo) diff -r 4543cc2049af -r d99f46b676b5 QTfrontend/model/ThemeModel.cpp --- a/QTfrontend/model/ThemeModel.cpp Mon Jan 21 13:04:57 2013 -0500 +++ b/QTfrontend/model/ThemeModel.cpp Mon Jan 21 14:07:39 2013 -0500 @@ -21,6 +21,7 @@ * @brief ThemeModel class implementation */ +#include "physfs.h" #include "ThemeModel.h" ThemeModel::ThemeModel(QObject *parent) : @@ -49,9 +50,10 @@ void ThemeModel::loadThemes() { + const QString appDir = QString(PHYSFS_getBaseDir()); + beginResetModel(); - DataManager & datamgr = DataManager::instance(); QStringList themes = @@ -73,6 +75,10 @@ QMap dataset; + // detect if theme is dlc + QString themeDir = PHYSFS_getRealDir(QString("Themes/%1/icon.png").arg(theme).toLocal8Bit().data()); + dataset.insert(Qt::UserRole + 2, !themeDir.startsWith(appDir)); + // set icon path dataset.insert(Qt::UserRole + 1, iconpath); @@ -95,8 +101,4 @@ endResetModel(); -} - - - - +} \ No newline at end of file diff -r 4543cc2049af -r d99f46b676b5 QTfrontend/ui/widget/themeprompt.cpp --- a/QTfrontend/ui/widget/themeprompt.cpp Mon Jan 21 13:04:57 2013 -0500 +++ b/QTfrontend/ui/widget/themeprompt.cpp Mon Jan 21 14:07:39 2013 -0500 @@ -81,9 +81,10 @@ { QModelIndex index = themes->index(i, 0); QToolButton * btn = new QToolButton(); + bool dlc = themes->data(index, Qt::UserRole + 2).toBool(); btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); btn->setIcon(qVariantValue(themes->data(index, Qt::UserRole))); - btn->setText(themes->data(index, Qt::DisplayRole).toString()); + btn->setText((dlc ? "*" : "") + themes->data(index, Qt::DisplayRole).toString()); btn->setIconSize(QSize(60, 60)); btn->setProperty("themeID", QVariant(i)); btn->setStyleSheet("padding: 2px;");