QTfrontend/model/roomslistmodel.cpp
changeset 6983 ede55af89e78
parent 6973 582ca7e8e338
child 6987 e34415c77342
equal deleted inserted replaced
6982:8d41d22a291d 6983:ede55af89e78
    21  * @brief RoomsListModel class implementation
    21  * @brief RoomsListModel class implementation
    22  */
    22  */
    23 
    23 
    24 #include "roomslistmodel.h"
    24 #include "roomslistmodel.h"
    25 
    25 
       
    26 #include <QBrush>
       
    27 #include <QColor>
    26 #include <QIcon>
    28 #include <QIcon>
    27 
    29 
    28 RoomsListModel::RoomsListModel(QObject *parent) :
    30 RoomsListModel::RoomsListModel(QObject *parent) :
    29     QAbstractTableModel(parent),
    31     QAbstractTableModel(parent),
    30     c_nColumns(8)
    32     c_nColumns(8)
    37      << tr("T")
    39      << tr("T")
    38      << tr("Owner")
    40      << tr("Owner")
    39      << tr("Map")
    41      << tr("Map")
    40      << tr("Rules")
    42      << tr("Rules")
    41      << tr("Weapons");
    43      << tr("Weapons");
       
    44 
       
    45     m_mapModel = DataManager::instance().mapModel();
    42 }
    46 }
    43 
    47 
    44 
    48 
    45 QVariant RoomsListModel::headerData(int section, Qt::Orientation orientation, int role) const
    49 QVariant RoomsListModel::headerData(int section, Qt::Orientation orientation, int role) const
    46 {
    50 {
    71 
    75 
    72 QVariant RoomsListModel::data(const QModelIndex &index, int role) const
    76 QVariant RoomsListModel::data(const QModelIndex &index, int role) const
    73 {
    77 {
    74     int column = index.column();
    78     int column = index.column();
    75     int row = index.row();
    79     int row = index.row();
    76     
    80 
    77     if (!index.isValid() || (row < 0)
    81     // invalid index
    78             || (row >= m_data.size())
    82     if (!index.isValid())
    79             || (column >= c_nColumns)
    83         return QVariant();
    80             || ((role != Qt::DecorationRole) && (role != Qt::DisplayRole))
    84 
    81        )
    85     // invalid row
    82         return QVariant();
    86     if ((row < 0) || (row >= m_data.size()))
       
    87         return QVariant();
       
    88 
       
    89     // invalid column
       
    90     if ((column < 0) || (column >= c_nColumns))
       
    91         return QVariant();
       
    92 
       
    93     // not a role we have data for
       
    94     if (role != Qt::DisplayRole)
       
    95         // only decorate name column
       
    96         if ((role != Qt::DecorationRole) || (column != 1))
       
    97             // only dye map column
       
    98             if ((role != Qt::ForegroundRole) || (column != 5))
       
    99                 return QVariant();
    83 
   100 
    84     // decorate room name based on room state
   101     // decorate room name based on room state
    85     if (role == Qt::DecorationRole)
   102     if (role == Qt::DecorationRole)
    86     {
   103     {
    87         if (column != 1)
       
    88             return QVariant();
       
    89 
       
    90         const QIcon roomBusyIcon(":/res/iconDamage.png");
   104         const QIcon roomBusyIcon(":/res/iconDamage.png");
    91         const QIcon roomWaitingIcon(":/res/iconTime.png");
   105         const QIcon roomWaitingIcon(":/res/iconTime.png");
    92 
   106 
    93         if (m_data.at(row).at(0).isEmpty())
   107         if (m_data.at(row).at(0).isEmpty())
    94             return QVariant(roomWaitingIcon);
   108             return QVariant(roomWaitingIcon);
    96             return QVariant(roomBusyIcon);
   110             return QVariant(roomBusyIcon);
    97     }
   111     }
    98 
   112 
    99     QString content = m_data.at(row).at(column);
   113     QString content = m_data.at(row).at(column);
   100 
   114 
   101     if (column == 0)
   115     if (role == Qt::DisplayRole)
   102         return QVariant(!content.isEmpty());
   116     {
   103 
   117         // supply in progress flag as bool
   104     return content;
   118         if (column == 0)
       
   119             return QVariant(!content.isEmpty());
       
   120 
       
   121         // display room names
       
   122         if (column == 5)
       
   123         {
       
   124             // special names
       
   125             if (content[0] == '+')
       
   126             {
       
   127                 if (content == "+rnd+") return tr("Random Map");
       
   128                 if (content == "+maze+") return tr("Random Maze");
       
   129                 if (content == "+drawn+") return tr("Hand-drawn");
       
   130             }
       
   131 
       
   132             // prefix ? if map not available
       
   133             if ((m_mapModel->indexOf(content) < 0))
       
   134                 return QString ("? %1").arg(content);
       
   135         }
       
   136 
       
   137         return content;
       
   138     }
       
   139 
       
   140     // dye map names red if map not available
       
   141     if (role == Qt::ForegroundRole)
       
   142     {
       
   143         if ((m_mapModel->indexOf(content) < 0))
       
   144             return QBrush(QColor("darkred"));
       
   145         else
       
   146             return QVariant();
       
   147     }
       
   148 
       
   149     Q_ASSERT(false);
       
   150     return QVariant();
   105 }
   151 }
   106 
   152 
   107 
   153 
   108 void RoomsListModel::setRoomsList(const QStringList & rooms)
   154 void RoomsListModel::setRoomsList(const QStringList & rooms)
   109 {
   155 {