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 { |