Change filter hint text to "Games shown: X / Y" and fix user-game segfault (#3973)

This commit is contained in:
Kaitlin 2020-05-08 15:15:54 -04:00 committed by GitHub
parent 9246c190fa
commit 1988e4558f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 61 deletions

View file

@ -30,13 +30,14 @@ GameSelector::GameSelector(AbstractClient *_client,
const QMap<int, QString> &_rooms,
const QMap<int, GameTypeMap> &_gameTypes,
const bool restoresettings,
const bool showfilters,
const bool _showfilters,
QWidget *parent)
: QGroupBox(parent), client(_client), tabSupervisor(_tabSupervisor), room(_room)
: QGroupBox(parent), client(_client), tabSupervisor(_tabSupervisor), room(_room), showFilters(_showfilters)
{
gameListView = new QTreeView;
gameListModel = new GamesModel(_rooms, _gameTypes, this);
if (showfilters) {
filteredGamesLabel = new QLabel;
if (showFilters) {
gameListProxyModel = new GamesProxyModel(this, tabSupervisor);
gameListProxyModel->setSourceModel(gameListModel);
gameListProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
@ -64,7 +65,7 @@ GameSelector::GameSelector(AbstractClient *_client,
if (room)
gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId());
if (showfilters && restoresettings)
if (showFilters && restoresettings)
gameListProxyModel->loadFilterParameters(gameTypeMap);
gameListView->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
@ -76,7 +77,6 @@ GameSelector::GameSelector(AbstractClient *_client,
clearFilterButton->setIcon(QPixmap("theme:icons/clearsearch"));
clearFilterButton->setEnabled(true);
connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter()));
alteredFiltersLabel = new QLabel;
if (room) {
createButton = new QPushButton;
@ -87,10 +87,10 @@ GameSelector::GameSelector(AbstractClient *_client,
spectateButton = new QPushButton;
QHBoxLayout *buttonLayout = new QHBoxLayout;
if (showfilters) {
if (showFilters) {
buttonLayout->addWidget(filterButton);
buttonLayout->addWidget(clearFilterButton);
buttonLayout->addWidget(alteredFiltersLabel);
buttonLayout->addWidget(filteredGamesLabel);
}
buttonLayout->addStretch();
if (room)
@ -133,6 +133,7 @@ void GameSelector::processAddToListEvent(const Event_AddToList &event)
if (event.list_name() == "ignore") {
gameListProxyModel->refresh();
}
setFilteredGamesLabel();
}
void GameSelector::processRemoveFromListEvent(const Event_RemoveFromList &event)
@ -140,6 +141,7 @@ void GameSelector::processRemoveFromListEvent(const Event_RemoveFromList &event)
if (event.list_name() == "ignore") {
gameListProxyModel->refresh();
}
setFilteredGamesLabel();
}
void GameSelector::actSetFilter()
@ -161,7 +163,7 @@ void GameSelector::actSetFilter()
gameListProxyModel->setMaxPlayersFilter(dlg.getMaxPlayersFilterMin(), dlg.getMaxPlayersFilterMax());
gameListProxyModel->saveFilterParameters(gameTypeMap);
setAlteredFiltersText(gameListProxyModel->getNumberOfAlteredFilters());
setFilteredGamesLabel();
}
void GameSelector::actClearFilter()
@ -170,7 +172,8 @@ void GameSelector::actClearFilter()
gameListProxyModel->resetFilterParameters();
gameListProxyModel->saveFilterParameters(gameTypeMap);
alteredFiltersLabel->setText(tr("Filters reset to default"));
setFilteredGamesLabel();
}
void GameSelector::actCreate()
@ -182,6 +185,7 @@ void GameSelector::actCreate()
DlgCreateGame dlg(room, room->getGameTypes(), this);
dlg.exec();
setFilteredGamesLabel();
}
void GameSelector::checkResponse(const Response &response)
@ -265,17 +269,19 @@ void GameSelector::retranslateUi()
{
setTitle(tr("Games"));
filterButton->setText(tr("&Filter games"));
clearFilterButton->setText(tr("Reset fi&lters"));
setAlteredFiltersText(gameListProxyModel->getNumberOfAlteredFilters());
clearFilterButton->setText(tr("C&lear filter"));
if (createButton)
createButton->setText(tr("C&reate"));
joinButton->setText(tr("&Join"));
spectateButton->setText(tr("J&oin as spectator"));
setFilteredGamesLabel();
}
void GameSelector::processGameInfo(const ServerInfo_Game &info)
{
gameListModel->updateGameList(info);
setFilteredGamesLabel();
}
void GameSelector::actSelectedGameChanged(const QModelIndex &current, const QModelIndex & /* previous */)
@ -290,13 +296,11 @@ void GameSelector::actSelectedGameChanged(const QModelIndex &current, const QMod
joinButton->setEnabled(game.player_count() < game.max_players() || overrideRestrictions);
}
void GameSelector::setAlteredFiltersText(const int numAlteredFilters)
void GameSelector::setFilteredGamesLabel()
{
if (alteredFiltersLabel != nullptr) {
if (numAlteredFilters == 0) {
alteredFiltersLabel->setText(tr("Default filters applied"));
} else {
alteredFiltersLabel->setText(tr("%1 filter(s) applied").arg(numAlteredFilters));
}
if (showFilters) {
const int totalGames = gameListModel->rowCount();
const int shownGames = totalGames - gameListProxyModel->getNumFilteredGames();
filteredGamesLabel->setText(tr("Games shown: %1 / %2").arg(shownGames).arg(totalGames));
}
}