QTfrontend/model/roomslistmodel.cpp
changeset 15900 fc3cb23fd26f
parent 12474 42da9d8d82ab
child 15901 4c58b320056c
equal deleted inserted replaced
15899:6cb7330113d8 15900:fc3cb23fd26f
    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