--- a/QTfrontend/model/roomslistmodel.cpp Fri Sep 23 12:47:47 2022 -0400
+++ b/QTfrontend/model/roomslistmodel.cpp Tue Sep 27 14:59:03 2022 +0300
@@ -27,10 +27,11 @@
#include "roomslistmodel.h"
#include "MapModel.h"
+#include "hwconsts.h"
RoomsListModel::RoomsListModel(QObject *parent) :
QAbstractTableModel(parent),
- c_nColumns(9)
+ c_nColumns(10)
{
m_headerData = QStringList();
m_headerData << tr("In progress");
@@ -44,6 +45,7 @@
m_headerData << tr("Script");
m_headerData << tr("Rules");
m_headerData << tr("Weapons");
+ m_headerData << tr("Version");
m_staticMapModel = DataManager::instance().staticMapModel();
m_missionMapModel = DataManager::instance().missionMapModel();
@@ -77,6 +79,59 @@
}
+QString RoomsListModel::protoToVersion(const QString & proto)
+{
+ bool ok;
+ uint protoNum = proto.toUInt(&ok);
+ if (!ok)
+ return "Unknown";
+ switch (protoNum) {
+ case 17: return "0.9.7-dev";
+ case 19: return "0.9.7";
+ case 20: return "0.9.8-dev";
+ case 21: return "0.9.8";
+ case 22: return "0.9.9-dev";
+ case 23: return "0.9.9";
+ case 24: return "0.9.10-dev";
+ case 25: return "0.9.10";
+ case 26: return "0.9.11-dev";
+ case 27: return "0.9.11";
+ case 28: return "0.9.12-dev";
+ case 29: return "0.9.12";
+ case 30: return "0.9.13-dev";
+ case 31: return "0.9.13";
+ case 32: return "0.9.14-dev";
+ case 33: return "0.9.14";
+ case 34: return "0.9.15-dev";
+ case 35: return "0.9.14.1";
+ case 37: return "0.9.15";
+ case 38: return "0.9.16-dev";
+ case 39: return "0.9.16";
+ case 40: return "0.9.17-dev";
+ case 41: return "0.9.17";
+ case 42: return "0.9.18-dev";
+ case 43: return "0.9.18";
+ case 44: return "0.9.19-dev";
+ case 45: return "0.9.19";
+ case 46: return "0.9.20-dev";
+ case 47: return "0.9.20";
+ case 48: return "0.9.21-dev";
+ case 49: return "0.9.21";
+ case 50: return "0.9.22-dev";
+ case 51: return "0.9.22";
+ case 52: return "0.9.23-dev";
+ case 53: return "0.9.23";
+ case 54: return "0.9.24-dev";
+ case 55: return "0.9.24";
+ case 56: return "0.9.25-dev";
+ case 57: return "0.9.25";
+ case 58: return "1.0.0-dev";
+ case 59: return "1.0.0";
+ case 60: return "1.0.1-dev";
+ default: return "Unknown";
+ }
+}
+
QVariant RoomsListModel::data(const QModelIndex &index, int role) const
{
int column = index.column();
@@ -101,9 +156,10 @@
|| ((column != PlayerCountColumn) && (column != TeamCountColumn)))
// only decorate name column
if ((role != Qt::DecorationRole) || (column != NameColumn))
- // only dye map column
- if ((role != Qt::ForegroundRole) || (column != MapColumn))
- return QVariant();
+ if ((role != Qt::ForegroundRole))
+ // UserRole is used for version column filtering
+ if ((role != Qt::UserRole))
+ return QVariant();
// decorate room name based on room state
if (role == Qt::DecorationRole)
@@ -159,6 +215,10 @@
!m_missionMapModel->mapExists(content))
return QString ("? %1").arg(content);
}
+ else if (column == VersionColumn)
+ {
+ return protoToVersion(content);
+ }
return content;
}
@@ -166,16 +226,23 @@
// dye map names red if map not available
if (role == Qt::ForegroundRole)
{
- if (content == "+rnd+" ||
- content == "+maze+" ||
- content == "+perlin+" ||
- content == "+drawn+" ||
- content == "+forts+" ||
- m_staticMapModel->mapExists(content) ||
- m_missionMapModel->mapExists(content))
- return QVariant();
- else
- return QBrush(QColor("darkred"));
+ if (m_data[row][VersionColumn] != *cProtoVer)
+ return QBrush(QColor("darkgrey"));
+
+ if (column == MapColumn)
+ {
+ if (content == "+rnd+" ||
+ content == "+maze+" ||
+ content == "+perlin+" ||
+ content == "+drawn+" ||
+ content == "+forts+" ||
+ m_staticMapModel->mapExists(content) ||
+ m_missionMapModel->mapExists(content))
+ return QVariant();
+ else
+ return QBrush(QColor("darkred"));
+ }
+ return QVariant();
}
if (role == Qt::TextAlignmentRole)
@@ -183,6 +250,9 @@
return (int)(Qt::AlignHCenter | Qt::AlignVCenter);
}
+ if (role == Qt::UserRole && column == VersionColumn)
+ return content;
+
Q_ASSERT(false);
return QVariant();
}