diff --git a/src/gui/qt/gamelobbydialog.ui b/src/gui/qt/gamelobbydialog.ui
index bd6c2b7c..3e0b2b86 100644
--- a/src/gui/qt/gamelobbydialog.ui
+++ b/src/gui/qt/gamelobbydialog.ui
@@ -29,7 +29,7 @@
4
- -
+
-
@@ -65,7 +65,7 @@
- -
+
-
false
@@ -368,7 +368,7 @@
- -
+
-
6
@@ -415,7 +415,7 @@
- -
+
-
@@ -423,6 +423,12 @@
0
+
+
+ 16777215
+ 230
+
+
Lobby-Chat
@@ -442,7 +448,7 @@
- -
+
-
-
@@ -494,7 +500,7 @@ p, li { white-space: pre-wrap; }
- -
+
-
@@ -522,6 +528,70 @@ p, li { white-space: pre-wrap; }
+ -
+
+
-
+
+ 0 - No game list filter
+
+
+ -
+
+ 1 - Show open games
+
+
+ -
+
+ 2 - Show open & non-full games
+
+
+ -
+
+ 3 - Show open & non-full & non-private games
+
+
+ -
+
+ 4 - Show open & non-full & private games
+
+
+ -
+
+ 5 - Show open & non-private games
+
+
+ -
+
+ 6 - Show open & private games
+
+
+ -
+
+ 7 - Show non-full games
+
+
+ -
+
+ 8 - Show non-full & non-private games
+
+
+ -
+
+ 9 - Show non-full & private games
+
+
+ -
+
+ 10 - Show non-private games
+
+
+ -
+
+ 11 - Show private games
+
+
+
+
diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp
index b015acac..bba00062 100644
--- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp
+++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp
@@ -10,6 +10,7 @@
//
//
#include "gamelobbydialogimpl.h"
+#include "mygamelistsortfilterproxymodel.h"
#include "startwindowimpl.h"
#include "lobbychat.h"
#include "changecompleteblindsdialogimpl.h"
@@ -45,7 +46,7 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c)
waitStartGameMsgBoxTimer->setSingleShot(TRUE);
myGameListModel = new QStandardItemModel(this);
- myGameListSortFilterProxyModel = new QSortFilterProxyModel(this);
+ myGameListSortFilterProxyModel = new MyGameListSortFilterProxyModel(this);
myGameListSortFilterProxyModel->setSourceModel(myGameListModel);
myGameListSortFilterProxyModel->setDynamicSortFilter(TRUE);
treeView_GameList->setModel(myGameListSortFilterProxyModel);
@@ -63,7 +64,7 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c)
treeView_GameList->setStyleSheet("QTreeView {background-color: white; background-image: url(\""+myAppDataPath +"gfx/gui/misc/background_gamelist.png\"); background-attachment: fixed; background-position: top center ; background-repeat: no-repeat;}");
treeView_GameList->setAutoFillBackground(TRUE);
-
+
connect( pushButton_CreateGame, SIGNAL( clicked() ), this, SLOT( createGame() ) );
connect( pushButton_JoinGame, SIGNAL( clicked() ), this, SLOT( joinGame() ) );
connect( pushButton_joinAnyGame, SIGNAL( clicked() ), this, SLOT( joinAnyGame() ) );
@@ -78,8 +79,8 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c)
connect( lineEdit_ChatInput, SIGNAL( textChanged (QString) ), myChat, SLOT( checkInputLength(QString) ) );
connect( lineEdit_ChatInput, SIGNAL( textEdited (QString) ), myChat, SLOT( setChatTextEdited() ) );
connect( waitStartGameMsgBoxTimer, SIGNAL(timeout()), this, SLOT( showWaitStartGameMsgBox() ));
-
-
+ connect( comboBox_gameListFilter, SIGNAL(currentIndexChanged(int)), this, SLOT(changeGameListFilter(int)));
+
lineEdit_ChatInput->installEventFilter(this);
clearDialog();
@@ -198,6 +199,8 @@ void gameLobbyDialogImpl::joinGame()
void gameLobbyDialogImpl::joinAnyGame() {
+ if(comboBox_gameListFilter->currentIndex() != 3 && comboBox_gameListFilter->currentIndex() != 0) comboBox_gameListFilter->setCurrentIndex(0);
+
bool found = FALSE;
int it = 0;
@@ -208,12 +211,11 @@ void gameLobbyDialogImpl::joinAnyGame() {
int players = myGameListModel->item(it, 1)->data(Qt::DisplayRole).toString().section("/",0,0).toInt();
int maxPlayers = myGameListModel->item(it, 1)->data(Qt::DisplayRole).toString().section("/",1,1).toInt();
- if (myGameListModel->item(it, 2)->data(Qt::DisplayRole) == tr("open") && myGameListModel->item(it, 3)->data(Qt::DisplayRole) == "" && players < maxPlayers)
+ if (myGameListModel->item(it, 2)->data(16) == "open" && myGameListModel->item(it, 3)->data(16) == "nonpriv" && players < maxPlayers)
{
if(players > mostConnectedPlayers) {
mostConnectedPlayers = players;
gameToJoinId = it;
- qDebug() << mostConnectedPlayers << gameToJoinId;
}
found = TRUE;
}
@@ -223,8 +225,7 @@ void gameLobbyDialogImpl::joinAnyGame() {
if(found) {
treeView_GameList->setCurrentIndex(myGameListSortFilterProxyModel->mapFromSource(myGameListModel->item(gameToJoinId)->index()));
joinGame();
- }
-
+ }
}
void gameLobbyDialogImpl::refresh(int actionID) {
@@ -232,6 +233,14 @@ void gameLobbyDialogImpl::refresh(int actionID) {
if (actionID == MSG_NET_GAME_CLIENT_START)
{
myGameListModel->clear();
+ QStringList headerList;
+ headerList << tr("Game") << tr("Players") << tr("State") << tr("Private");
+ myGameListModel->setHorizontalHeaderLabels(headerList);
+ treeView_GameList->setColumnWidth(0,185);
+ treeView_GameList->setColumnWidth(1,65);
+ treeView_GameList->setColumnWidth(2,65);
+ treeView_GameList->setColumnWidth(3,65);
+
this->accept();
myW->show();
}
@@ -292,18 +301,26 @@ void gameLobbyDialogImpl::updateGameItem(QList itemList, unsign
QString playerStr;
playerStr.sprintf("%u/%u", (unsigned)info.players.size(), (unsigned)info.data.maxNumberOfPlayers);
itemList.at(1)->setData(playerStr, Qt::DisplayRole);
-
- if (info.mode == GAME_MODE_STARTED)
+ if((unsigned)info.players.size() == (unsigned)info.data.maxNumberOfPlayers) { itemList.at(1)->setData("totalfull", 16); }
+ else { itemList.at(1)->setData("nonfull", 16); }\
+
+ if (info.mode == GAME_MODE_STARTED) {
itemList.at(2)->setData(tr("running"), Qt::DisplayRole);
- else
+ itemList.at(2)->setData("running", 16);
+ }
+ else {
itemList.at(2)->setData(tr("open"), Qt::DisplayRole);
+ itemList.at(2)->setData("open", 16);
+ }
if (info.isPasswordProtected) {
itemList.at(3)->setIcon(QIcon(myAppDataPath+"gfx/gui/misc/lock.png"));
itemList.at(3)->setData(" ", Qt::DisplayRole);
+ itemList.at(3)->setData("private", 16);
}
else {
itemList.at(3)->setData("", Qt::DisplayRole);
+ itemList.at(3)->setData("nonpriv", 16);
}
// treeView_GameList->sortByColumn(myConfig->readConfigInt("DlgGameLobbyGameListSortingSection"), (Qt::SortOrder)myConfig->readConfigInt("DlgGameLobbyGameListSortingOrder") );
@@ -367,8 +384,8 @@ void gameLobbyDialogImpl::refreshGameStats() {
int it = 0;
while (myGameListModel->item(it)) {
- if (myGameListModel->item(it, 2)->data(Qt::DisplayRole) == tr("running")) { runningGamesCounter++; }
- if (myGameListModel->item(it, 2)->data(Qt::DisplayRole) == tr("open")) { openGamesCounter++; }
+ if (myGameListModel->item(it, 2)->data(16) == "running") { runningGamesCounter++; }
+ if (myGameListModel->item(it, 2)->data(16) == "open") { openGamesCounter++; }
++it;
}
@@ -812,7 +829,7 @@ void gameLobbyDialogImpl::joinAnyGameButtonRefresh() {
int players = myGameListModel->item(it, 1)->data(Qt::DisplayRole).toString().section("/",0,0).toInt();
int maxPlayers = myGameListModel->item(it, 1)->data(Qt::DisplayRole).toString().section("/",1,1).toInt();
- if (myGameListModel->item(it, 2)->data(Qt::DisplayRole) == tr("open") && myGameListModel->item(it, 3)->data(Qt::DisplayRole) == "" && players < maxPlayers) {
+ if (myGameListModel->item(it, 2)->data(16) == "open" && myGameListModel->item(it, 3)->data(16) == "nonpriv" && players < maxPlayers) {
openNonPrivateNonFullGamesCounter++;
}
++it;
@@ -845,8 +862,88 @@ void gameLobbyDialogImpl::writeDialogSettings()
void gameLobbyDialogImpl::readDialogSettings()
{
-// qDebug() << myConfig->readConfigInt("DlgGameLobbyGameListSortingSection") << (Qt::SortOrder)myConfig->readConfigInt("DlgGameLobbyGameListSortingOrder");
-// myGameListSortFilterProxyModel->sort(myConfig->readConfigInt("DlgGameLobbyGameListSortingSection"), (Qt::SortOrder)myConfig->readConfigInt("DlgGameLobbyGameListSortingOrder") );
treeView_GameList->sortByColumn(myConfig->readConfigInt("DlgGameLobbyGameListSortingSection"), (Qt::SortOrder)myConfig->readConfigInt("DlgGameLobbyGameListSortingOrder") );
}
+
+void gameLobbyDialogImpl::changeGameListFilter(int index) {
+
+ switch(index) {
+ case 0: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp());
+ }
+ break;
+ case 1: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp("open", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp());
+ }
+ break;
+ case 2: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp("nonfull", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp("open", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp());
+ }
+ break;
+ case 3: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp("nonfull", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp("open", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("nonpriv", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ case 4: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp("nonfull", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp("open", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("private", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ case 5: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp("open", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("nonpriv", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ case 6: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp("open", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("private", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ case 7: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp("nonfull", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp());
+ }
+ break;
+ case 8: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp("nonfull", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("nonpriv", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ case 9: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp("nonfull", Qt::CaseInsensitive, QRegExp::FixedString));
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("private", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ case 10: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("nonpriv", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ case 11: {
+ myGameListSortFilterProxyModel->setColumn1RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn2RegExp(QRegExp());
+ myGameListSortFilterProxyModel->setColumn3RegExp(QRegExp("private", Qt::CaseInsensitive, QRegExp::FixedString));
+ }
+ break;
+ default:;
+ }
+ myGameListSortFilterProxyModel->setFilterRegExp(QString());
+ myGameListSortFilterProxyModel->setFilterKeyColumn(0);
+
+}
diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h
index 5c981e51..4ec91d9f 100644
--- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h
+++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h
@@ -28,10 +28,12 @@ class Session;
class ConfigFile;
class LobbyChat;
class startWindowImpl;
+class MyGameListSortFilterProxyModel;
/**
@author FThauer FHammer
*/
+
class gameLobbyDialogImpl: public QDialog, public Ui::gameLobbyDialog {
Q_OBJECT
public:
@@ -106,6 +108,8 @@ public slots:
void closeEvent(QCloseEvent *event);
void writeDialogSettings();
void readDialogSettings();
+ void changeGameListFilter(int);
+
private:
gameTableImpl* myW;
@@ -124,7 +128,7 @@ private:
QTimer *waitStartGameMsgBoxTimer;
QStandardItemModel *myGameListModel;
QItemSelectionModel *myGameListSelectionModel;
- QSortFilterProxyModel *myGameListSortFilterProxyModel;
+ MyGameListSortFilterProxyModel *myGameListSortFilterProxyModel;
protected:
bool eventFilter(QObject *obj, QEvent *event);
diff --git a/src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.cpp b/src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.cpp
new file mode 100644
index 00000000..7c434754
--- /dev/null
+++ b/src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.cpp
@@ -0,0 +1,20 @@
+#include "mygamelistsortfilterproxymodel.h"
+#include
+#include
+
+MyGameListSortFilterProxyModel::MyGameListSortFilterProxyModel(QObject *parent)
+ : QSortFilterProxyModel(parent)
+{
+}
+
+bool MyGameListSortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
+
+ QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
+ QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);
+ QModelIndex index3 = sourceModel()->index(sourceRow, 3, sourceParent);
+
+ return (sourceModel()->data(index1, 16).toString().contains(column1RegExp)
+ && sourceModel()->data(index2, 16).toString().contains(column2RegExp)
+ && sourceModel()->data(index3, 16).toString().contains(column3RegExp));
+}
+
diff --git a/src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.h b/src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.h
new file mode 100644
index 00000000..c4eb2cfb
--- /dev/null
+++ b/src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.h
@@ -0,0 +1,26 @@
+#ifndef MYGAMELISTSORTFILTERPROXYMODEL_H
+#define MYGAMELISTSORTFILTERPROXYMODEL_H
+
+#include
+
+class MyGameListSortFilterProxyModel : public QSortFilterProxyModel
+{
+Q_OBJECT
+
+ public:
+ MyGameListSortFilterProxyModel(QObject *parent = 0);
+ void setColumn1RegExp(QRegExp column1) { column1RegExp = column1; }
+ void setColumn2RegExp(QRegExp column2) { column2RegExp = column2; }
+ void setColumn3RegExp(QRegExp column3) { column3RegExp = column3; }
+
+ protected:
+ bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
+
+ private:
+ QRegExp column1RegExp;
+ QRegExp column2RegExp;
+ QRegExp column3RegExp;
+
+};
+
+#endif // MYGAMELISTSORTFILTERPROXYMODEL_H