From ee3117986428f7ae12b3bde2645ce487e5a8b706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Teuli=C3=A8re?= Date: Tue, 17 Jul 2012 22:23:33 +0200 Subject: [PATCH] StatsWidget: add the players ranking --- qt/stats_widget.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/qt/stats_widget.cpp b/qt/stats_widget.cpp index b182688..dd2f72e 100644 --- a/qt/stats_widget.cpp +++ b/qt/stats_widget.cpp @@ -89,7 +89,7 @@ void StatsWidget::refresh() unsigned histSize = m_game == NULL ? 0 : m_game->getHistory().getSize(); unsigned nbPlayers = m_game == NULL ? 0 : m_game->getNbPlayers(); - setModelSize(nbPlayers + 1, histSize + 8); + setModelSize(nbPlayers + 1, histSize + 9); // Some fields are displayed only in some cases const bool isArbit = m_game != NULL && @@ -118,6 +118,7 @@ void StatsWidget::refresh() setModelHeader(col++, _q("Total"), false); setModelHeader(col++, _q("Diff"), false); setModelHeader(col++, _q("Game %"), false); + setModelHeader(col++, _q("Ranking"), false); // Define the header for the Game pseudo-player setModelHeader(0, _q("Game"), true); @@ -146,8 +147,10 @@ void StatsWidget::refresh() col += 3; setModelText(getIndex(row, col++), score, true); // Skip the diff column - col += 1; + ++col; setModelText(getIndex(row, col++), locale.toString((double)100, 'f', 1) + "%", true); + // Skip the ranking column + ++col; gameTotal = score; } @@ -191,6 +194,18 @@ void StatsWidget::refresh() setModelText(getIndex(i + 1, col++), locale.toString(100. * score / gameTotal, 'f', 1) + "%", score >= gameTotal); + + // Ranking + // FIXME: quadratic complexity, we can probably do better + int rank = 1; + for (unsigned j = 0; j < nbPlayers; ++j) + { + if (i == j) + continue; + if (player.getPoints() < m_game->getPlayer(j).getPoints()) + ++rank; + } + setModelText(getIndex(i + 1, col++), rank, rank == 1); } // Resize