From e0afbfdd1520d99498285605c71c89ae5778035c Mon Sep 17 00:00:00 2001 From: doitux Date: Sun, 29 Aug 2010 21:50:18 +0000 Subject: [PATCH] lobby: add sort by flag option, align player names in available players list --- pokerth_game.pro | 20 +++--- src/gui/qt/gamelobbydialog.ui | 27 +++++-- .../gamelobbydialog/gamelobbydialogimpl.cpp | 45 ++++++++++-- .../qt/gamelobbydialog/gamelobbydialogimpl.h | 4 +- .../mynicklistsortfilterproxymodel.cpp | 67 ++++++++++++++++++ .../mynicklistsortfilterproxymodel.h | 26 +++++++ src/gui/qt/gametable/gametableimpl.cpp | 6 +- src/gui/qt/resources/cflags/ch.png | Bin 367 -> 367 bytes src/gui/qt/resources/cflags/np.png | Bin 443 -> 436 bytes src/gui/qt/resources/cflags/undefined.png | Bin 0 -> 143 bytes src/gui/qt/resources/pokerth.qrc | 5 +- 11 files changed, 174 insertions(+), 26 deletions(-) create mode 100644 src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp create mode 100644 src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.h create mode 100644 src/gui/qt/resources/cflags/undefined.png diff --git a/pokerth_game.pro b/pokerth_game.pro index 7c4b78c6..31b5a65f 100644 --- a/pokerth_game.pro +++ b/pokerth_game.pro @@ -195,7 +195,8 @@ HEADERS += src/game.h \ src/gui/qt/settingsdialog/mystylelistitem.h \ src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.h \ src/gui/qt/internetgamelogindialog/internetgamelogindialogimpl.h \ - src/engine/local_engine/replay.h + src/engine/local_engine/replay.h \ + src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.h FORMS += src/gui/qt/gametable.ui \ src/gui/qt/aboutpokerth.ui \ src/gui/qt/connecttoserverdialog.ui \ @@ -262,8 +263,9 @@ SOURCES += src/pokerth.cpp \ src/gui/qt/settingsdialog/mystylelistitem.cpp \ src/gui/qt/gamelobbydialog/mygamelistsortfilterproxymodel.cpp \ src/gui/qt/internetgamelogindialog/internetgamelogindialogimpl.cpp \ - src/engine/local_engine/replay.cpp -TRANSLATIONS = ts/pokerth_af.ts \ + src/engine/local_engine/replay.cpp \ + src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp +TRANSLATIONS = ts/pokerth_af.ts \ ts/pokerth_bg.ts \ ts/pokerth_zhcn.ts \ ts/pokerth_ca.ts \ @@ -330,12 +332,12 @@ win32 { -lidn LIBS += -lcurl LIBS += -lz - LIBS += -lboost_thread-mgw45-mt-1_44.dll - LIBS += -lboost_filesystem-mgw45-mt-1_44.dll - LIBS += -lboost_regex-mgw45-mt-1_44 - LIBS += -lboost_system-mgw45-mt-1_44.dll - LIBS += -lboost_iostreams-mgw45-mt-1_44.dll - LIBS += -lboost_zlib-mgw45-mt-1_44.dll + LIBS += -lboost_thread-mgw45-mt-1_44.dll + LIBS += -lboost_filesystem-mgw45-mt-1_44.dll + LIBS += -lboost_regex-mgw45-mt-1_44 + LIBS += -lboost_system-mgw45-mt-1_44.dll + LIBS += -lboost_iostreams-mgw45-mt-1_44.dll + LIBS += -lboost_zlib-mgw45-mt-1_44.dll } LIBS += -lgdi32 \ -lcomdlg32 \ diff --git a/src/gui/qt/gamelobbydialog.ui b/src/gui/qt/gamelobbydialog.ui index ffd439e2..9353cb61 100644 --- a/src/gui/qt/gamelobbydialog.ui +++ b/src/gui/qt/gamelobbydialog.ui @@ -175,7 +175,7 @@ 0 0 248 - 178 + 170 @@ -672,12 +672,12 @@ - + 400 - 0 + 223 @@ -714,7 +714,7 @@ - + @@ -842,6 +842,25 @@ p, li { white-space: pre-wrap; } + + + + + No sorting / filtering + + + + + Sort by flag + + + + + Filter idle players + + + + diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp index 001cff90..c4ea6927 100644 --- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp +++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp @@ -12,6 +12,7 @@ // #include "gamelobbydialogimpl.h" #include "mygamelistsortfilterproxymodel.h" +#include "mynicklistsortfilterproxymodel.h" #include "startwindowimpl.h" #include "chattools.h" #include "changecompleteblindsdialogimpl.h" @@ -85,7 +86,7 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c) treeView_GameList->setAutoFillBackground(TRUE); myNickListModel = new QStandardItemModel(this); - myNickListSortFilterProxyModel = new QSortFilterProxyModel(this); + myNickListSortFilterProxyModel = new MyNickListSortFilterProxyModel(this); myNickListSortFilterProxyModel->setSourceModel(myNickListModel); myNickListSortFilterProxyModel->setDynamicSortFilter(TRUE); myNickListSortFilterProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); @@ -126,6 +127,7 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c) connect( blinkingButtonAnimationTimer, SIGNAL(timeout()), this, SLOT( blinkingStartButtonAnimation() )); connect( showInfoMsgBoxTimer, SIGNAL(timeout()), this, SLOT( showInfoMsgBox() )); connect( comboBox_gameListFilter, SIGNAL(currentIndexChanged(int)), this, SLOT(changeGameListFilter(int))); + connect( comboBox_nickListFilter, SIGNAL(currentIndexChanged(int)), this, SLOT(changeNickListFilter(int))); connect( treeView_NickList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT( showNickListContextMenu(QPoint) ) ); connect( nickListInviteAction, SIGNAL(triggered()), this, SLOT( invitePlayerToCurrentGame() )); connect( nickListIgnorePlayerAction, SIGNAL(triggered()), this, SLOT( putPlayerOnIgnoreList() )); @@ -866,12 +868,15 @@ void gameLobbyDialogImpl::updatePlayer(unsigned playerId, QString newPlayerName) if (myNickListModel->item(it1, 0)->data(Qt::UserRole) == playerId) { oldNick = myNickListModel->item(it1, 0)->text(); myNickListModel->item(it1, 0)->setText(newPlayerName); + PlayerInfo playerInfo(mySession->getClientPlayerInfo(playerId)); - if(!playerInfo.isGuest) { - myNickListModel->item(it1, 0)->setIcon(QIcon(QString(":/cflags/cflags/%1.png").arg(QString::fromUtf8(mySession->getClientPlayerInfo(playerId).countryCode.c_str()).toLower()))); + QString countryString = QString::fromUtf8(playerInfo.countryCode.c_str()).toLower(); + myNickListModel->item(it1, 0)->setData(countryString, 33); + if(playerInfo.isGuest || countryString.isEmpty()) { + myNickListModel->item(it1, 0)->setIcon(QIcon(":/cflags/cflags/undefined.png")); } else { - myNickListModel->item(it1, 0)->setIcon(QIcon()); + myNickListModel->item(it1, 0)->setIcon(QIcon(QString(":/cflags/cflags/%1.png").arg(countryString))); } break; } @@ -916,11 +921,19 @@ void gameLobbyDialogImpl::playerLeftLobby(unsigned playerId) void gameLobbyDialogImpl::playerJoinedLobby(unsigned playerId, QString /*playerName TODO remove*/) { PlayerInfo playerInfo(mySession->getClientPlayerInfo(playerId)); + QString countryString = QString::fromUtf8(playerInfo.countryCode.c_str()).toLower(); QStandardItem *item = new QStandardItem; item->setText(QString::fromUtf8(playerInfo.playerName.c_str())); item->setData(playerId, Qt::UserRole); - item->setIcon(QIcon(QString(":/cflags/cflags/%1.png").arg(QString::fromUtf8(mySession->getClientPlayerInfo(playerId).countryCode.c_str()).toLower()))); + item->setData(countryString, 33); + if(playerInfo.isGuest || countryString.isEmpty()) { + item->setIcon(QIcon(":/cflags/cflags/undefined.png")); + } + else { + item->setIcon(QIcon(QString(":/cflags/cflags/%1.png").arg(countryString))); + } + myNickListModel->appendRow(item); refreshPlayerStats(); @@ -1343,6 +1356,28 @@ void gameLobbyDialogImpl::changeGameListFilter(int index) { } +void gameLobbyDialogImpl::changeNickListFilter(int state) +{ + myNickListSortFilterProxyModel->setFilterState(state); + myNickListModel->sort(0, Qt::DescendingOrder); + +// switch(state) { +// case 0: { +// +// } +// break; +// case 1: { +// +// } +// break; +// case 2: { +// +// } +// break; +// } + +} + void gameLobbyDialogImpl::changeGameListSorting() { writeDialogSettings(0); diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h index 6bd4844b..9e297b1e 100644 --- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h +++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h @@ -29,6 +29,7 @@ class ConfigFile; class ChatTools; class startWindowImpl; class MyGameListSortFilterProxyModel; +class MyNickListSortFilterProxyModel; /** @author FThauer FHammer @@ -99,6 +100,7 @@ public slots: void writeDialogSettings(int); void readDialogSettings(); void changeGameListFilter(int); + void changeNickListFilter(int); void changeGameListSorting(); void registeredUserMode(); void guestUserMode(); @@ -151,7 +153,7 @@ private: QStandardItemModel *myNickListModel; QItemSelectionModel *myNickListSelectionModel; - QSortFilterProxyModel *myNickListSortFilterProxyModel; + MyNickListSortFilterProxyModel *myNickListSortFilterProxyModel; protected: bool eventFilter(QObject *obj, QEvent *event); diff --git a/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp b/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp new file mode 100644 index 00000000..4abe186e --- /dev/null +++ b/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.cpp @@ -0,0 +1,67 @@ +#include "mynicklistsortfilterproxymodel.h" +#include +#include + +MyNickListSortFilterProxyModel::MyNickListSortFilterProxyModel(QObject *parent) + : QSortFilterProxyModel(parent), filterState(0) +{ +} + +bool MyNickListSortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const +{ + + switch(filterState) { + + case 0: { + return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); + } + break; + case 1: { + return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); + } + break; + case 2: { + return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); + } + break; + + } + +// QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); +// QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent); +// QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent); +// QModelIndex index3 = sourceModel()->index(sourceRow, 3, sourceParent); +// QModelIndex index4 = sourceModel()->index(sourceRow, 4, sourceParent); +// +// return ((sourceModel()->data(index1, 16).toString().contains(column1RegExp) +// && sourceModel()->data(index2, 16).toString().contains(column2RegExp) +// && sourceModel()->data(index3, 16).toString().contains(column3RegExp) +// && sourceModel()->data(index4, 16).toString().contains(column4RegExp)) || sourceModel()->data(index0, 16) == "MeInThisGame"); +} + +bool MyNickListSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const +{ + switch(filterState) { + + case 0: { + return QSortFilterProxyModel::lessThan(left, right); + } + break; + case 1: { + QString leftCountryAndName(sourceModel()->data(left, 33).toString().toUpper()+sourceModel()->data(left, Qt::DisplayRole).toString().toLower()); + QString rightCountryAndName(sourceModel()->data(right, 33).toString().toUpper()+sourceModel()->data(right, Qt::DisplayRole).toString().toLower()); + return leftCountryAndName < rightCountryAndName; + } + break; + case 2: { + return QSortFilterProxyModel::lessThan(left, right); + } + break; + } +} + +void MyNickListSortFilterProxyModel::setFilterState(int state) +{ + filterState = state; +} + diff --git a/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.h b/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.h new file mode 100644 index 00000000..bdae0094 --- /dev/null +++ b/src/gui/qt/gamelobbydialog/mynicklistsortfilterproxymodel.h @@ -0,0 +1,26 @@ +#ifndef MYNICKLISTSORTFILTERPROXYMODEL_H +#define MYNICKLISTSORTFILTERPROXYMODEL_H + +#include + +class MyNickListSortFilterProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT + +public: + MyNickListSortFilterProxyModel(QObject *parent = 0); + + void setFilterState(int state); + +protected: + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; + bool lessThan(const QModelIndex &left, const QModelIndex &right) const; + +private: + + int filterState; + + +}; + +#endif // MYGAMELISTSORTFILTERPROXYMODEL_H diff --git a/src/gui/qt/gametable/gametableimpl.cpp b/src/gui/qt/gametable/gametableimpl.cpp index b5582413..855994c3 100755 --- a/src/gui/qt/gametable/gametableimpl.cpp +++ b/src/gui/qt/gametable/gametableimpl.cpp @@ -2051,12 +2051,9 @@ void gameTableImpl::postRiverRunAnimation2() { //Wenn einmal umgedreht dann fertig!! flipHolecardsAllInAlreadyDone = TRUE; } - else { - int tempCardsIntArray[2]; + else { for (it_c=currentHand->getActivePlayerList()->begin(); it_c!=currentHand->getActivePlayerList()->end(); it_c++) { - (*it_c)->getMyCards(tempCardsIntArray); if((*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { - //set Player value (logging) for all in already shown cards (*it_c)->setMyCardsFlip(1,3); } @@ -2321,7 +2318,6 @@ void gameTableImpl::showHoleCards(unsigned playerId, bool allIn) } } //set Player value (logging) - qDebug() << "currentHand->getCurrentRound()" << currentHand->getCurrentRound(); if(currentHand->getCurrentRound() < 3 || allIn) { (*it_c)->setMyCardsFlip(1,2); //for bero before postriver or allin just log the hole cards } diff --git a/src/gui/qt/resources/cflags/ch.png b/src/gui/qt/resources/cflags/ch.png index 242ec01aaf5ad351cb978a4eb650ad801a438b09..605eb3d08f164fc3f04c7a70435bddf7dc4a0f1b 100755 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3HGD9`RZNDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#Xv2>Ak4@xYmNj^kiEpy*OmPihpaH4u7;oO4xrF`PZ!4!jq|mW z_7)yC;Ayo#mTA<)b@riVjobm(O>O5F@A%AjPh(~9%RVIsJMl058kz@XrR46hKM-uJ z<~X9ll{>|=&Y@z@e)G`f!L3uBIJUZ_2`C?&+iP8CXFf@+;lg+RCp^=+gJiva*Rq!0 zP1?k^V3F3jpQ_U)NP4lQaUU=?S|QV~wN&Hznm3W}^o)bOJRe(R*~omc{=6zyvE^3b zt=dW1&$ekFiRgY`zlnk8@cjm+7Kw{_?C)Mw)pl-=PH}tj`#+=f_gC8@Z`-O)xwNX2 z_rY12UF)3e_B%8g3jNyWx0R_P?h1p}=I+_?50rm*zGIuS^~$RAPjdDHz0Tn2>gTe~ HDWM4fP9~1! literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHEa{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+AuIMGJ3i=hE&{2`g6X4;eWtQ0TuxV z9fi13(+NNRzn525R_^%t+x&39d{6y9ga1E2r+>?7U|?FE@Zm|i>fBlzF zc~M_qKf%h=bAcoS;}NE7f8|yFe%B9?;;8%o@BeG_!|(4qhyo=(h-XBmKHXpc{~y!A z`THH3fsDVeudko)ARzm9UL&JI!+~uEM*rBES1=kd6zV%LH0J*N$gIQAc0y}k9qTFv z4h1oVG?rB#zNY^8{QUp5wE>>R#S4NZQd1i@F)*?OF@6y}@zmk^!Gr7L9asuAf!ae1 z{{CbBBHAk4@xYmNj^kiEpy*OmPihpe!yc>mg^Gk~U;c)B=-Xq=xq zaj&;ip+xKa)vnW)q$(<=dMj`VikO(N3+gGl1P9l*n`~imtac8*a!G1uOMr8t^A@&= zvuYOv+!gAn-u=&SHS5HAZzaziK3%CBWi(f3#`Jl03{%$!*IAwQ`4nUJ;^w9^H&Pbf z^E-Z>%QyHqbDNgv>t_q}EoPlEwGxu}e6S%``S?M3j)-#g;Jq6=W7p?4Uawg?@%&@% z)(@?RLy`>p@~{6<{#g1~bwiY*;l712mfeigp7mF(zjt}VY7agmy?p=M*YX|1wQEdQ z?>O+`nOf!dt|NYPw;$JC{Z{{o`?S#0X-}tk6?M6aUe0V?wE9&-vzG5|w)4#A7h4M@ z?%(EKkl>gbE6{u971Ngun-+PgEjGTO`9eVC#r(_rmD$+ERcjk#RGL#9*f=LlX!%|F cbMa?hxAqB#x6E5n2@FyOPgg&ebxsLQ080_D5dZ)H literal 443 zcmV;s0Yv_ZP)KAO>U2WB)$@6+CBT{3ok>^7H@y{~6FRKmalQ{r8#S z4^Xx6Je&%q%J2@E@iKAb=Rv<(vO+e^|@#56B5{*~0Mg zAk4@xYmNj^kiEpy*OmPihpeywTfpYu>OdiWPZ!4!jq}L~ f60D08A{ZE$PBSpxY)}6Ilw$C7^>bP0l+XkKgvBB2 literal 0 HcmV?d00001 diff --git a/src/gui/qt/resources/pokerth.qrc b/src/gui/qt/resources/pokerth.qrc index 0cdb07f9..63b6fba2 100644 --- a/src/gui/qt/resources/pokerth.qrc +++ b/src/gui/qt/resources/pokerth.qrc @@ -95,7 +95,6 @@ cflags/cd.png cflags/cf.png cflags/cg.png - cflags/ch.png cflags/ci.png cflags/ck.png cflags/cl.png @@ -219,7 +218,6 @@ cflags/ni.png cflags/nl.png cflags/no.png - cflags/np.png cflags/nr.png cflags/nu.png cflags/nz.png @@ -301,5 +299,8 @@ cflags/za.png cflags/zm.png cflags/zw.png + cflags/ch.png + cflags/np.png + cflags/undefined.png