# HG changeset patch
# User burp
# Date 1283198741 -7200
# Node ID 46e6fa2cdbc62b72a92414d30cf6f0e34455d832
# Parent dd9345e74b66831c5d617c84f112011fdd719b92# Parent 9aa8a832e29684fffaaa9e2b33522c4f9ac8544a
o0 merge
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/hedgewars.qrc
--- a/QTfrontend/hedgewars.qrc Mon Aug 30 06:33:56 2010 +0200
+++ b/QTfrontend/hedgewars.qrc Mon Aug 30 22:05:41 2010 +0200
@@ -96,5 +96,18 @@
res/follow.png
res/info.png
res/kick.png
+ res/StatsMedal1.png
+ res/StatsMedal2.png
+ res/StatsMedal3.png
+ res/StatsMedal4.png
+ res/StatsR.png
+ res/StatsH.png
+ res/StatsD.png
+ res/StatsBestKiller.png
+ res/StatsBestShot.png
+ res/StatsHedgehogsKilled.png
+ res/StatsMostSelfDamage.png
+ res/StatsSelfKilled.png
+ res/StatsSkipped.png
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/pages.cpp
--- a/QTfrontend/pages.cpp Mon Aug 30 06:33:56 2010 +0200
+++ b/QTfrontend/pages.cpp Mon Aug 30 22:05:41 2010 +0200
@@ -1063,22 +1063,81 @@
roomsList->setAlternatingRowColors(true);
pageLayout->addWidget(roomsList, 1, 0, 3, 1);
pageLayout->setRowStretch(2, 100);
+
+ QHBoxLayout * filterLayout = new QHBoxLayout();
+
+ QLabel * stateLabel = new QLabel(this);
+ stateLabel->setText(tr("State:"));
+ CBState = new QComboBox(this);
+ CBState->addItem(QComboBox::tr("Any"));
+ CBState->addItem(QComboBox::tr("In lobby"));
+ CBState->addItem(QComboBox::tr("In progress"));
+ filterLayout->addWidget(stateLabel);
+ filterLayout->addWidget(CBState);
+ filterLayout->addSpacing(30);
+
+ QLabel * ruleLabel = new QLabel(this);
+ ruleLabel->setText(tr("Rules:"));
+ CBRules = new QComboBox(this);
+ CBRules->addItem(QComboBox::tr("Any"));
+ CBRules->addItem(QComboBox::tr("Default"));
+ CBRules->addItem(QComboBox::tr("Pro mode"));
+ CBRules->addItem(QComboBox::tr("Shoppa"));
+ CBRules->addItem(QComboBox::tr("Basketball"));
+ CBRules->addItem(QComboBox::tr("Minefield"));
+ CBRules->addItem(QComboBox::tr("Barrel mayhem"));
+ CBRules->addItem(QComboBox::tr("Tunnel hogs"));
+ filterLayout->addWidget(ruleLabel);
+ filterLayout->addWidget(CBRules);
+ filterLayout->addSpacing(30);
+
+ QLabel * weaponLabel = new QLabel(this);
+ weaponLabel->setText(tr("Weapons:"));
+ CBWeapons = new QComboBox(this);
+ CBWeapons->addItem(QComboBox::tr("Any"));
+ CBWeapons->addItem(QComboBox::tr("Basketball"));
+ CBWeapons->addItem(QComboBox::tr("Crazy"));
+ CBWeapons->addItem(QComboBox::tr("Default"));
+ CBWeapons->addItem(QComboBox::tr("Minefield"));
+ CBWeapons->addItem(QComboBox::tr("Pro mode"));
+ CBWeapons->addItem(QComboBox::tr("Shoppa"));
+ filterLayout->addWidget(weaponLabel);
+ filterLayout->addWidget(CBWeapons);
+ filterLayout->addSpacing(30);
+
+ QLabel * searchLabel = new QLabel(this);
+ searchLabel->setText(tr("Search:"));
+ searchText = new QLineEdit(this);
+ searchText->setMaxLength(60);
+ filterLayout->addWidget(searchLabel);
+ filterLayout->addWidget(searchText);
+
+ pageLayout->addLayout(filterLayout, 4, 0);
chatWidget = new HWChatWidget(this, gameSettings, sdli, false);
- pageLayout->addWidget(chatWidget, 4, 0, 1, 2);
- pageLayout->setRowStretch(4, 350);
+ pageLayout->addWidget(chatWidget, 5, 0, 1, 2);
+ pageLayout->setRowStretch(5, 350);
BtnCreate = addButton(tr("Create"), pageLayout, 0, 1);
BtnJoin = addButton(tr("Join"), pageLayout, 1, 1);
BtnRefresh = addButton(tr("Refresh"), pageLayout, 3, 1);
+ BtnClear = addButton(tr("Clear"), pageLayout, 4, 1);
- BtnBack = addButton(":/res/Exit.png", pageLayout, 5, 0, true);
- BtnAdmin = addButton(tr("Admin features"), pageLayout, 5, 1);
+ BtnBack = addButton(":/res/Exit.png", pageLayout, 6, 0, true);
+ BtnAdmin = addButton(tr("Admin features"), pageLayout, 6, 1);
connect(BtnCreate, SIGNAL(clicked()), this, SLOT(onCreateClick()));
connect(BtnJoin, SIGNAL(clicked()), this, SLOT(onJoinClick()));
connect(BtnRefresh, SIGNAL(clicked()), this, SLOT(onRefreshClick()));
+ connect(BtnClear, SIGNAL(clicked()), this, SLOT(onClearClick()));
connect(roomsList, SIGNAL(doubleClicked (const QModelIndex &)), this, SLOT(onJoinClick()));
+ connect(CBState, SIGNAL(currentIndexChanged (int)), this, SLOT(onRefreshClick()));
+ connect(CBRules, SIGNAL(currentIndexChanged (int)), this, SLOT(onRefreshClick()));
+ connect(CBWeapons, SIGNAL(currentIndexChanged (int)), this, SLOT(onRefreshClick()));
+ connect(searchText, SIGNAL(textChanged (const QString &)), this, SLOT(onRefreshClick()));
+ connect(this, SIGNAL(askJoinConfirmation (const QString &)), this, SLOT(onJoinConfirmation(const QString &)), Qt::QueuedConnection);
+
+ gameInLobby = false;
}
void PageRoomsList::setAdmin(bool flag)
@@ -1088,6 +1147,8 @@
void PageRoomsList::setRoomsList(const QStringList & list)
{
+ listFromServer = list;
+
roomsList->clear();
roomsList->setColumnCount(7);
roomsList->setHorizontalHeaderLabels(
@@ -1113,12 +1174,45 @@
// set resize modes
// roomsList->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
+ bool gameCanBeJoined = true;
+
if (list.size() % 8)
return;
roomsList->setRowCount(list.size() / 8);
for(int i = 0, r = 0; i < list.size(); i += 8, r++)
{
+ // if we are joining a game
+ if (gameInLobby) {
+ if (gameInLobbyName == list[i + 1]) {
+ gameCanBeJoined = list[i].compare("True");
+ }
+ }
+
+ // check filter settings
+ #define NO_FILTER_MATCH roomsList->setRowCount(roomsList->rowCount() - 1); --r; continue
+
+ if (list[i].compare("True") && CBState->currentIndex() == 2) { NO_FILTER_MATCH; }
+ if (list[i].compare("False") && CBState->currentIndex() == 1) { NO_FILTER_MATCH; }
+ if (CBRules->currentIndex() != 0 && list[i + 6].compare(CBRules->currentText())) { NO_FILTER_MATCH; }
+ if (CBWeapons->currentIndex() != 0 && list[i + 7].compare(CBWeapons->currentText())) { NO_FILTER_MATCH; }
+ bool found = list[i + 1].contains(searchText->text(), Qt::CaseInsensitive);
+ if (!found) {
+ for (int a = 4; a <= 7; ++a) {
+ QString compString = list[i + a];
+ if (a == 5 && compString == "+rnd+") {
+ compString = "Random Map";
+ } else if (a == 5 && compString == "+maze+") {
+ compString = "Random Maze";
+ }
+ if (compString.contains(searchText->text(), Qt::CaseInsensitive)) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!searchText->text().isEmpty() && !found) { NO_FILTER_MATCH; }
+
QTableWidgetItem * item;
item = new QTableWidgetItem(list[i + 1]); // room name
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
@@ -1191,6 +1285,15 @@
roomsList->horizontalHeader()->setResizeMode(5, QHeaderView::ResizeToContents);
roomsList->horizontalHeader()->setResizeMode(6, QHeaderView::ResizeToContents);
+ if (gameInLobby) {
+ gameInLobby = false;
+ if (gameCanBeJoined) {
+ emit askForJoinRoom(gameInLobbyName);
+ } else {
+ emit askJoinConfirmation(gameInLobbyName);
+ }
+ }
+
// roomsList->resizeColumnsToContents();
}
@@ -1214,9 +1317,22 @@
tr("Error"),
tr("Please select room from the list"),
tr("OK"));
- return ;
+ return;
}
- emit askForJoinRoom(curritem->data(Qt::DisplayRole).toString());
+
+ for (int i = 0; i < listFromServer.size(); i += 8) {
+ if (listFromServer[i + 1] == curritem->data(Qt::DisplayRole).toString()) {
+ gameInLobby = listFromServer[i].compare("True");
+ break;
+ }
+ }
+
+ if (gameInLobby) {
+ gameInLobbyName = curritem->data(Qt::DisplayRole).toString();
+ emit askForRoomList();
+ } else {
+ emit askForJoinRoom(curritem->data(Qt::DisplayRole).toString());
+ }
}
void PageRoomsList::onRefreshClick()
@@ -1224,6 +1340,24 @@
emit askForRoomList();
}
+void PageRoomsList::onClearClick()
+{
+ CBState->setCurrentIndex(0);
+ CBRules->setCurrentIndex(0);
+ CBWeapons->setCurrentIndex(0);
+ searchText->clear();
+}
+
+void PageRoomsList::onJoinConfirmation(const QString & room)
+{
+ if (QMessageBox::warning(this,
+ tr("Warning"),
+ tr("The game you are trying to join has started.\nDo you still want to join the room?"),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
+ {
+ emit askForJoinRoom(room);
+ }
+}
PageConnecting::PageConnecting(QWidget* parent) :
AbstractPage(parent)
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/pages.h
--- a/QTfrontend/pages.h Mon Aug 30 06:33:56 2010 +0200
+++ b/QTfrontend/pages.h Mon Aug 30 22:05:41 2010 +0200
@@ -397,14 +397,24 @@
PageRoomsList(QWidget* parent, QSettings * config, SDLInteraction * sdli);
QLineEdit * roomName;
+ QLineEdit * searchText;
QTableWidget * roomsList;
QPushButton * BtnBack;
QPushButton * BtnCreate;
QPushButton * BtnJoin;
QPushButton * BtnRefresh;
QPushButton * BtnAdmin;
+ QPushButton * BtnClear;
+ QComboBox * CBState;
+ QComboBox * CBRules;
+ QComboBox * CBWeapons;
HWChatWidget * chatWidget;
+private:
+ bool gameInLobby;
+ QString gameInLobbyName;
+ QStringList listFromServer;
+
public slots:
void setRoomsList(const QStringList & list);
void setAdmin(bool);
@@ -413,11 +423,14 @@
void onCreateClick();
void onJoinClick();
void onRefreshClick();
+ void onClearClick();
+ void onJoinConfirmation(const QString &);
signals:
void askForCreateRoom(const QString &);
void askForJoinRoom(const QString &);
void askForRoomList();
+ void askJoinConfirmation(const QString &);
};
class PageConnecting : public AbstractPage
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsBestKiller.png
Binary file QTfrontend/res/StatsBestKiller.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsBestShot.png
Binary file QTfrontend/res/StatsBestShot.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsD.png
Binary file QTfrontend/res/StatsD.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsH.png
Binary file QTfrontend/res/StatsH.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsHedgehogsKilled.png
Binary file QTfrontend/res/StatsHedgehogsKilled.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsMedal1.png
Binary file QTfrontend/res/StatsMedal1.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsMedal2.png
Binary file QTfrontend/res/StatsMedal2.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsMedal3.png
Binary file QTfrontend/res/StatsMedal3.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsMedal4.png
Binary file QTfrontend/res/StatsMedal4.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsMostSelfDamage.png
Binary file QTfrontend/res/StatsMostSelfDamage.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsR.png
Binary file QTfrontend/res/StatsR.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsSelfKilled.png
Binary file QTfrontend/res/StatsSelfKilled.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/res/StatsSkipped.png
Binary file QTfrontend/res/StatsSkipped.png has changed
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/statsPage.cpp
--- a/QTfrontend/statsPage.cpp Mon Aug 30 06:33:56 2010 +0200
+++ b/QTfrontend/statsPage.cpp Mon Aug 30 22:05:41 2010 +0200
@@ -19,7 +19,8 @@
#include
#include
#include
-
+#include
+#include
#include "statsPage.h"
#include "team.h"
@@ -36,20 +37,59 @@
PageGameStats::PageGameStats(QWidget* parent) : AbstractPage(parent)
{
QGridLayout * pageLayout = new QGridLayout(this);
+ pageLayout->setSpacing(20);
pageLayout->setColumnStretch(0, 1);
pageLayout->setColumnStretch(1, 1);
- pageLayout->setColumnStretch(2, 1);
+
+ BtnBack = addButton(":/res/Exit.png", pageLayout, 3, 0, true);
+ BtnBack->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- BtnBack = addButton(":/res/Exit.png", pageLayout, 2, 0, true);
+ QGroupBox * gb = new QGroupBox(this);
+ QVBoxLayout * gbl = new QVBoxLayout;
+ // details
labelGameStats = new QLabel(this);
+ QLabel * l = new QLabel(this);
+ l->setTextFormat(Qt::RichText);
+ l->setText(PageGameStats::tr(" Details
"));
+ l->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
labelGameStats->setTextFormat(Qt::RichText);
- pageLayout->addWidget(labelGameStats, 0, 0, 1, 3);
-
- graphic = new FitGraphicsView(this);
+ labelGameStats->setAlignment(Qt::AlignTop);
+ gbl->addWidget(l);
+ gbl->addWidget(labelGameStats);
+ gb->setLayout(gbl);
+ pageLayout->addWidget(gb, 1, 1);
+
+ // graph
+ graphic = new FitGraphicsView(gb);
+ l = new QLabel(this);
+ l->setTextFormat(Qt::RichText);
+ l->setText(PageGameStats::tr("
Health graph
"));
+ l->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ gbl->addWidget(l);
+ gbl->addWidget(graphic);
graphic->scale(1.0, -1.0);
graphic->setBackgroundBrush(QBrush(Qt::black));
- pageLayout->addWidget(graphic, 1, 0, 1, 3);
+
+ labelGameWin = new QLabel(this);
+ labelGameWin->setTextFormat(Qt::RichText);
+ pageLayout->addWidget(labelGameWin, 0, 0, 1, 2);
+
+ // ranking box
+ gb = new QGroupBox(this);
+ gbl = new QVBoxLayout;
+ labelGameRank = new QLabel(gb);
+ l = new QLabel(this);
+ l->setTextFormat(Qt::RichText);
+ l->setText(PageGameStats::tr(" Ranking
"));
+ l->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ gbl->addWidget(l);
+ gbl->addWidget(labelGameRank);
+ gb->setLayout(gbl);
+
+ labelGameRank->setTextFormat(Qt::RichText);
+ labelGameRank->setAlignment(Qt::AlignTop);
+ pageLayout->addWidget(gb, 1, 0);
}
void PageGameStats::AddStatText(const QString & msg)
@@ -61,6 +101,9 @@
{
labelGameStats->setText("");
healthPoints.clear();
+ labelGameRank->setText("");
+ playerPosition = 0;
+ lastColor = 0;
}
void PageGameStats::renderStats()
@@ -93,12 +136,12 @@
{
switch(type) {
case 'r' : {
- AddStatText(QString("%1
").arg(info));
+ labelGameWin->setText(QString("%1
").arg(info));
break;
}
case 'D' : {
int i = info.indexOf(' ');
- QString message = PageGameStats::tr("The best shot award was won by %1 with %2 pts.
")
+ QString message = PageGameStats::tr(" The best shot award was won by %1 with %2 pts.
")
.arg(info.mid(i + 1), info.left(i));
AddStatText(message);
break;
@@ -106,14 +149,14 @@
case 'k' : {
int i = info.indexOf(' ');
int num = info.left(i).toInt();
- QString message = PageGameStats::tr("The best killer is %1 with %2 kills in a turn.
", "", num)
+ QString message = PageGameStats::tr(" The best killer is %1 with %2 kills in a turn.
", "", num)
.arg(info.mid(i + 1), info.left(i));
AddStatText(message);
break;
}
case 'K' : {
int num = info.toInt();
- QString message = PageGameStats::tr("A total of %1 hedgehog(s) were killed during this round.
", "", num).arg(num);
+ QString message = PageGameStats::tr(" A total of %1 hedgehog(s) were killed during this round.
", "", num).arg(num);
AddStatText(message);
break;
}
@@ -136,6 +179,74 @@
team.Wins++; // should draws count as wins?
//team.SaveToFile(); // don't save yet
}
+ break;
}
+
+ case 'P' : {
+ int i = info.indexOf(' ');
+ playerPosition++;
+ QString color = info.left(i);
+ quint32 c = color.toInt();
+ QColor clanColor = QColor(qRgb((c >> 16) & 255, (c >> 8) & 255, c & 255));
+
+ QString playerinfo = info.mid(i + 1);
+
+ i = playerinfo.indexOf(' ');
+
+ QString kills = playerinfo.left(i);
+ QString playername = playerinfo.mid(i + 1);
+ QString image;
+
+ if (lastColor == c && playerPosition <= 2) playerPosition = 1;
+ lastColor = c;
+
+ switch (playerPosition)
+ {
+ case 1:
+ image = "";
+ break;
+ case 2:
+ image = "";
+ break;
+ case 3:
+ image = "";
+ break;
+ default:
+ image = "";
+ break;
+ }
+
+ QString message;
+ if (kills.toInt() == 1)
+ {
+ message = PageGameStats::tr("%1 %2. %3 (%4 kill).
").arg(image, QString::number(playerPosition), playername, kills, clanColor.name());
+ } else {
+ message = PageGameStats::tr("%1 %2. %3 (%4 kills).
").arg(image, QString::number(playerPosition), playername, kills, clanColor.name());
+ }
+ labelGameRank->setText(labelGameRank->text() + message);
+ break;
+ }
+ case 's' : {
+ int i = info.indexOf(' ');
+ QString message = PageGameStats::tr(" %1 thought it's good to shoot his own hedgehogs with %2 pts.
")
+ .arg(info.mid(i + 1), info.left(i));
+ AddStatText(message);
+ break;
+ }
+ case 'S' : {
+ int i = info.indexOf(' ');
+ QString message = PageGameStats::tr(" %1 killed %2 of his own hedgehogs.
")
+ .arg(info.mid(i + 1), info.left(i));
+ AddStatText(message);
+ break;
+ }
+ case 'B' : {
+ int i = info.indexOf(' ');
+ QString message = PageGameStats::tr(" %1 was scared and skipped turn %2 times.
")
+ .arg(info.mid(i + 1), info.left(i));
+ AddStatText(message);
+ break;
+ }
+
}
}
diff -r dd9345e74b66 -r 46e6fa2cdbc6 QTfrontend/statsPage.h
--- a/QTfrontend/statsPage.h Mon Aug 30 06:33:56 2010 +0200
+++ b/QTfrontend/statsPage.h Mon Aug 30 22:05:41 2010 +0200
@@ -44,6 +44,8 @@
QPushButton *BtnBack;
QLabel *labelGameStats;
+ QLabel *labelGameWin;
+ QLabel *labelGameRank;
FitGraphicsView * graphic;
public slots:
@@ -55,6 +57,8 @@
void AddStatText(const QString & msg);
QMap > healthPoints;
+ unsigned int playerPosition;
+ quint32 lastColor;
};
#endif // STATSPAGE_H