diff -r 6cb7330113d8 -r fc3cb23fd26f QTfrontend/ui/page/pageroomslist.cpp --- a/QTfrontend/ui/page/pageroomslist.cpp Fri Sep 23 12:47:47 2022 -0400 +++ b/QTfrontend/ui/page/pageroomslist.cpp Tue Sep 27 14:59:03 2022 +0300 @@ -84,10 +84,14 @@ showJoinRestricted = new QAction(QAction::tr("Show join restricted"), stateMenu); showJoinRestricted->setCheckable(true); showJoinRestricted->setChecked(true); + showIncompatible = new QAction(QAction::tr("Show incompatible"), stateMenu); + showIncompatible->setCheckable(true); + showIncompatible->setChecked(true); stateMenu->addAction(showGamesInLobby); stateMenu->addAction(showGamesInProgress); stateMenu->addAction(showPassword); stateMenu->addAction(showJoinRestricted); + stateMenu->addAction(showIncompatible); btnState->setMenu(stateMenu); // Help/prompt message at top @@ -199,6 +203,7 @@ connect(showGamesInProgress, SIGNAL(triggered()), this, SLOT(onFilterChanged())); connect(showPassword, SIGNAL(triggered()), this, SLOT(onFilterChanged())); connect(showJoinRestricted, SIGNAL(triggered()), this, SLOT(onFilterChanged())); + connect(showIncompatible, SIGNAL(triggered()), this, SLOT(onFilterChanged())); connect(searchText, SIGNAL(textChanged (const QString &)), this, SLOT(onFilterChanged())); connect(this, SIGNAL(askJoinConfirmation (const QString &)), this, SLOT(onJoinConfirmation(const QString &)), Qt::QueuedConnection); @@ -232,6 +237,7 @@ { roomsModel = NULL; stateFilteredModel = NULL; + versionFilteredModel = NULL; initPage(); } @@ -554,7 +560,7 @@ void PageRoomsList::setModel(RoomsListModel * model) { // filter chain: - // model -> stateFilteredModel -> schemeFilteredModel -> + // model -> versionFilteredModel -> stateFilteredModel -> schemeFilteredModel -> // -> weaponsFilteredModel -> roomsModel (search filter+sorting) if (roomsModel == NULL) @@ -564,12 +570,17 @@ roomsModel->setSortCaseSensitivity(Qt::CaseInsensitive); roomsModel->sort(RoomsListModel::StateColumn, Qt::AscendingOrder); - stateFilteredModel = new QSortFilterProxyModel(this); + versionFilteredModel = new QSortFilterProxyModel(this); + versionFilteredModel->setDynamicSortFilter(true); + versionFilteredModel->setFilterKeyColumn(RoomsListModel::VersionColumn); + versionFilteredModel->setFilterRole(Qt::UserRole); + stateFilteredModel = new QSortFilterProxyModel(this); stateFilteredModel->setDynamicSortFilter(true); + stateFilteredModel->setFilterKeyColumn(RoomsListModel::StateColumn); + stateFilteredModel->setSourceModel(versionFilteredModel); roomsModel->setFilterKeyColumn(-1); // search in all columns - stateFilteredModel->setFilterKeyColumn(RoomsListModel::StateColumn); roomsModel->setFilterCaseSensitivity(Qt::CaseInsensitive); @@ -585,7 +596,7 @@ connect(roomsList->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(roomSelectionChanged(const QModelIndex &, const QModelIndex &))); } - stateFilteredModel->setSourceModel(model); + versionFilteredModel->setSourceModel(model); QHeaderView * h = roomsList->horizontalHeader(); @@ -638,6 +649,12 @@ bool stateProgress = showGamesInProgress->isChecked(); bool statePassword = showPassword->isChecked(); bool stateJoinRestricted = showJoinRestricted->isChecked(); + bool stateIncompatible = showIncompatible->isChecked(); + + if (!stateIncompatible) + versionFilteredModel->setFilterFixedString(*cProtoVer); + else + versionFilteredModel->setFilterFixedString(""); QString filter; if (!stateLobby && !stateProgress)