diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp index c4ea6927..96fc47bd 100644 --- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp +++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp @@ -626,6 +626,16 @@ void gameLobbyDialogImpl::gameAddPlayer(unsigned gameId, unsigned playerId) } it++; } + + //mark player as active + int it1 = 0; + while (myNickListModel->item(it1)) { + if (myNickListModel->item(it1, 0)->data(Qt::UserRole) == playerId) { + myNickListModel->item(it1, 0)->setData("active", 34); + break; + } + ++it1; + } } void gameLobbyDialogImpl::gameRemovePlayer(unsigned gameId, unsigned playerId) @@ -653,6 +663,16 @@ void gameLobbyDialogImpl::gameRemovePlayer(unsigned gameId, unsigned playerId) } ++it; } + + //mark player as idle again + int it1 = 0; + while (myNickListModel->item(it1)) { + if (myNickListModel->item(it1, 0)->data(Qt::UserRole) == playerId) { + myNickListModel->item(it1, 0)->setData("idle", 34); + break; + } + ++it1; + } } void gameLobbyDialogImpl::updateStats(ServerStats /*stats*/) @@ -878,6 +898,11 @@ void gameLobbyDialogImpl::updatePlayer(unsigned playerId, QString newPlayerName) else { myNickListModel->item(it1, 0)->setIcon(QIcon(QString(":/cflags/cflags/%1.png").arg(countryString))); } + + unsigned gameIdOfPlayer = mySession->getGameIdOfPlayer(playerId); + if(gameIdOfPlayer) { myNickListModel->item(it1, 0)->setData("active", 34); } + else { myNickListModel->item(it1, 0)->setData("idle", 34); } + break; } @@ -902,6 +927,7 @@ void gameLobbyDialogImpl::removePlayer(unsigned playerId, QString) { } checkPlayerQuantity(); + } void gameLobbyDialogImpl::playerLeftLobby(unsigned playerId) @@ -934,6 +960,11 @@ void gameLobbyDialogImpl::playerJoinedLobby(unsigned playerId, QString /*playerN item->setIcon(QIcon(QString(":/cflags/cflags/%1.png").arg(countryString))); } + unsigned gameIdOfPlayer = mySession->getGameIdOfPlayer(playerId); + if(gameIdOfPlayer) { item->setData("active", 34); } + else { item->setData("idle", 34); } + + myNickListModel->appendRow(item); refreshPlayerStats(); @@ -1361,6 +1392,9 @@ void gameLobbyDialogImpl::changeNickListFilter(int state) myNickListSortFilterProxyModel->setFilterState(state); myNickListModel->sort(0, Qt::DescendingOrder); + myNickListSortFilterProxyModel->setFilterRegExp(QString()); + myNickListSortFilterProxyModel->setFilterKeyColumn(0); + // switch(state) { // case 0: { // diff --git a/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp b/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp index 4abe186e..54c7de04 100644 --- a/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp +++ b/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp @@ -21,7 +21,8 @@ bool MyNickListSortFilterProxyModel::filterAcceptsRow(int sourceRow, const QMode } break; case 2: { - return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); + QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); + return sourceModel()->data(index0, 34).toString().contains("idle") && QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); } break;