25 #include <QColor> |
25 #include <QColor> |
26 #include <QIcon> |
26 #include <QIcon> |
27 |
27 |
28 #include "roomslistmodel.h" |
28 #include "roomslistmodel.h" |
29 #include "MapModel.h" |
29 #include "MapModel.h" |
|
30 #include "hwconsts.h" |
30 |
31 |
31 RoomsListModel::RoomsListModel(QObject *parent) : |
32 RoomsListModel::RoomsListModel(QObject *parent) : |
32 QAbstractTableModel(parent), |
33 QAbstractTableModel(parent), |
33 c_nColumns(9) |
34 c_nColumns(10) |
34 { |
35 { |
35 m_headerData = QStringList(); |
36 m_headerData = QStringList(); |
36 m_headerData << tr("In progress"); |
37 m_headerData << tr("In progress"); |
37 m_headerData << tr("Room Name"); |
38 m_headerData << tr("Room Name"); |
38 //: Caption of the column for the number of connected clients in the list of rooms |
39 //: Caption of the column for the number of connected clients in the list of rooms |
42 m_headerData << tr("Owner"); |
43 m_headerData << tr("Owner"); |
43 m_headerData << tr("Map"); |
44 m_headerData << tr("Map"); |
44 m_headerData << tr("Script"); |
45 m_headerData << tr("Script"); |
45 m_headerData << tr("Rules"); |
46 m_headerData << tr("Rules"); |
46 m_headerData << tr("Weapons"); |
47 m_headerData << tr("Weapons"); |
|
48 m_headerData << tr("Version"); |
47 |
49 |
48 m_staticMapModel = DataManager::instance().staticMapModel(); |
50 m_staticMapModel = DataManager::instance().staticMapModel(); |
49 m_missionMapModel = DataManager::instance().missionMapModel(); |
51 m_missionMapModel = DataManager::instance().missionMapModel(); |
50 } |
52 } |
51 |
53 |
74 return 0; |
76 return 0; |
75 else |
77 else |
76 return c_nColumns; |
78 return c_nColumns; |
77 } |
79 } |
78 |
80 |
|
81 |
|
82 QString RoomsListModel::protoToVersion(const QString & proto) |
|
83 { |
|
84 bool ok; |
|
85 uint protoNum = proto.toUInt(&ok); |
|
86 if (!ok) |
|
87 return "Unknown"; |
|
88 switch (protoNum) { |
|
89 case 17: return "0.9.7-dev"; |
|
90 case 19: return "0.9.7"; |
|
91 case 20: return "0.9.8-dev"; |
|
92 case 21: return "0.9.8"; |
|
93 case 22: return "0.9.9-dev"; |
|
94 case 23: return "0.9.9"; |
|
95 case 24: return "0.9.10-dev"; |
|
96 case 25: return "0.9.10"; |
|
97 case 26: return "0.9.11-dev"; |
|
98 case 27: return "0.9.11"; |
|
99 case 28: return "0.9.12-dev"; |
|
100 case 29: return "0.9.12"; |
|
101 case 30: return "0.9.13-dev"; |
|
102 case 31: return "0.9.13"; |
|
103 case 32: return "0.9.14-dev"; |
|
104 case 33: return "0.9.14"; |
|
105 case 34: return "0.9.15-dev"; |
|
106 case 35: return "0.9.14.1"; |
|
107 case 37: return "0.9.15"; |
|
108 case 38: return "0.9.16-dev"; |
|
109 case 39: return "0.9.16"; |
|
110 case 40: return "0.9.17-dev"; |
|
111 case 41: return "0.9.17"; |
|
112 case 42: return "0.9.18-dev"; |
|
113 case 43: return "0.9.18"; |
|
114 case 44: return "0.9.19-dev"; |
|
115 case 45: return "0.9.19"; |
|
116 case 46: return "0.9.20-dev"; |
|
117 case 47: return "0.9.20"; |
|
118 case 48: return "0.9.21-dev"; |
|
119 case 49: return "0.9.21"; |
|
120 case 50: return "0.9.22-dev"; |
|
121 case 51: return "0.9.22"; |
|
122 case 52: return "0.9.23-dev"; |
|
123 case 53: return "0.9.23"; |
|
124 case 54: return "0.9.24-dev"; |
|
125 case 55: return "0.9.24"; |
|
126 case 56: return "0.9.25-dev"; |
|
127 case 57: return "0.9.25"; |
|
128 case 58: return "1.0.0-dev"; |
|
129 case 59: return "1.0.0"; |
|
130 case 60: return "1.0.1-dev"; |
|
131 default: return "Unknown"; |
|
132 } |
|
133 } |
79 |
134 |
80 QVariant RoomsListModel::data(const QModelIndex &index, int role) const |
135 QVariant RoomsListModel::data(const QModelIndex &index, int role) const |
81 { |
136 { |
82 int column = index.column(); |
137 int column = index.column(); |
83 int row = index.row(); |
138 int row = index.row(); |
99 // only custom-align counters |
154 // only custom-align counters |
100 if ((role != Qt::TextAlignmentRole) |
155 if ((role != Qt::TextAlignmentRole) |
101 || ((column != PlayerCountColumn) && (column != TeamCountColumn))) |
156 || ((column != PlayerCountColumn) && (column != TeamCountColumn))) |
102 // only decorate name column |
157 // only decorate name column |
103 if ((role != Qt::DecorationRole) || (column != NameColumn)) |
158 if ((role != Qt::DecorationRole) || (column != NameColumn)) |
104 // only dye map column |
159 if ((role != Qt::ForegroundRole)) |
105 if ((role != Qt::ForegroundRole) || (column != MapColumn)) |
160 // UserRole is used for version column filtering |
106 return QVariant(); |
161 if ((role != Qt::UserRole)) |
|
162 return QVariant(); |
107 |
163 |
108 // decorate room name based on room state |
164 // decorate room name based on room state |
109 if (role == Qt::DecorationRole) |
165 if (role == Qt::DecorationRole) |
110 { |
166 { |
111 const QIcon roomBusyIcon(":/res/iconDamage.png"); |
167 const QIcon roomBusyIcon(":/res/iconDamage.png"); |
157 // prefix ? if map not available |
213 // prefix ? if map not available |
158 if (!m_staticMapModel->mapExists(content) && |
214 if (!m_staticMapModel->mapExists(content) && |
159 !m_missionMapModel->mapExists(content)) |
215 !m_missionMapModel->mapExists(content)) |
160 return QString ("? %1").arg(content); |
216 return QString ("? %1").arg(content); |
161 } |
217 } |
|
218 else if (column == VersionColumn) |
|
219 { |
|
220 return protoToVersion(content); |
|
221 } |
162 |
222 |
163 return content; |
223 return content; |
164 } |
224 } |
165 |
225 |
166 // dye map names red if map not available |
226 // dye map names red if map not available |
167 if (role == Qt::ForegroundRole) |
227 if (role == Qt::ForegroundRole) |
168 { |
228 { |
169 if (content == "+rnd+" || |
229 if (m_data[row][VersionColumn] != *cProtoVer) |
170 content == "+maze+" || |
230 return QBrush(QColor("darkgrey")); |
171 content == "+perlin+" || |
231 |
172 content == "+drawn+" || |
232 if (column == MapColumn) |
173 content == "+forts+" || |
233 { |
174 m_staticMapModel->mapExists(content) || |
234 if (content == "+rnd+" || |
175 m_missionMapModel->mapExists(content)) |
235 content == "+maze+" || |
176 return QVariant(); |
236 content == "+perlin+" || |
177 else |
237 content == "+drawn+" || |
178 return QBrush(QColor("darkred")); |
238 content == "+forts+" || |
|
239 m_staticMapModel->mapExists(content) || |
|
240 m_missionMapModel->mapExists(content)) |
|
241 return QVariant(); |
|
242 else |
|
243 return QBrush(QColor("darkred")); |
|
244 } |
|
245 return QVariant(); |
179 } |
246 } |
180 |
247 |
181 if (role == Qt::TextAlignmentRole) |
248 if (role == Qt::TextAlignmentRole) |
182 { |
249 { |
183 return (int)(Qt::AlignHCenter | Qt::AlignVCenter); |
250 return (int)(Qt::AlignHCenter | Qt::AlignVCenter); |
184 } |
251 } |
|
252 |
|
253 if (role == Qt::UserRole && column == VersionColumn) |
|
254 return content; |
185 |
255 |
186 Q_ASSERT(false); |
256 Q_ASSERT(false); |
187 return QVariant(); |
257 return QVariant(); |
188 } |
258 } |
189 |
259 |