QTfrontend/statsPage.cpp
author unc0rr
Fri, 01 May 2009 09:01:44 +0000
changeset 2021 a591afb43768
parent 1904 20348675b015
child 2377 f3fab2b09e0c
permissions -rw-r--r--
Some changes in try to fix issue when you enter room with painted map, but frontend shows generated one (most probably bug is triggered by template filters) Untested.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1621
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     1
/*
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     2
 * Hedgewars, a free turn based strategy game
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     3
 * Copyright (c) 2009 Andrey Korotaev <unC0Rr@gmail.com>
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     4
 *
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     8
 *
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    12
 * GNU General Public License for more details.
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    13
 *
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    17
 */
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    18
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    19
#include <QLabel>
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    20
#include <QGridLayout>
1625
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    21
#include <QGraphicsScene>
1621
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    22
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    23
#include "statsPage.h"
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    24
1636
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    25
FitGraphicsView::FitGraphicsView(QWidget* parent) : QGraphicsView(parent)
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    26
{
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    27
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    28
}
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    29
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    30
void FitGraphicsView::resizeEvent(QResizeEvent * event)
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    31
{
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    32
	fitInView(sceneRect());
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    33
}
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    34
1621
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    35
PageGameStats::PageGameStats(QWidget* parent) : AbstractPage(parent)
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    36
{
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    37
	QGridLayout * pageLayout = new QGridLayout(this);
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    38
	pageLayout->setColumnStretch(0, 1);
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    39
	pageLayout->setColumnStretch(1, 1);
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    40
	pageLayout->setColumnStretch(2, 1);
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    41
1625
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    42
	BtnBack = addButton(":/res/Exit.png", pageLayout, 2, 0, true);
1621
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    43
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    44
	labelGameStats = new QLabel(this);
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    45
	labelGameStats->setTextFormat(Qt::RichText);
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    46
	pageLayout->addWidget(labelGameStats, 0, 0, 1, 3);
1625
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    47
1636
e528696f2177 Resize health graphic when form is resized
unc0rr
parents: 1625
diff changeset
    48
	graphic = new FitGraphicsView(this);
1625
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    49
	graphic->scale(1.0, -1.0);
1637
897b37fc4966 Set black background on hp graphic
unc0rr
parents: 1636
diff changeset
    50
	graphic->setBackgroundBrush(QBrush(Qt::black));
1625
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    51
	pageLayout->addWidget(graphic, 1, 0, 1, 3);
1621
d1ded2532d3f - svn maintenance
unc0rr
parents:
diff changeset
    52
}
1622
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    53
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    54
void PageGameStats::AddStatText(const QString & msg)
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    55
{
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    56
	labelGameStats->setText(labelGameStats->text() + msg);
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    57
}
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    58
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    59
void PageGameStats::clear()
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    60
{
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    61
	labelGameStats->setText("");
1625
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    62
	healthPoints.clear();
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    63
}
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    64
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    65
void PageGameStats::renderStats()
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    66
{
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    67
	QGraphicsScene * scene = new QGraphicsScene();
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    68
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    69
	QMap<quint32, QVector<quint32> >::const_iterator i = healthPoints.constBegin();
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    70
	while (i != healthPoints.constEnd())
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    71
	{
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    72
		quint32 c = i.key();
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    73
		QColor clanColor = QColor(qRgb((c >> 16) & 255, (c >> 8) & 255, c & 255));
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    74
		QVector<quint32> hps = i.value();
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    75
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    76
		QPainterPath path;
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    77
		if (hps.size())
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    78
			path.moveTo(0, hps[0]);
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    79
		
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    80
		for(int t = 1; t < hps.size(); ++t)
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    81
			path.lineTo(t, hps[t]);
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    82
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    83
		scene->addPath(path, QPen(c));
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    84
		++i;
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    85
	}
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    86
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
    87
	graphic->setScene(scene);
1673
06bff12f8a74 - Correctly use plural form in translations
unc0rr
parents: 1637
diff changeset
    88
	graphic->fitInView(graphic->sceneRect());
1622
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    89
}
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    90
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    91
void PageGameStats::GameStats(char type, const QString & info)
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    92
{
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    93
	switch(type) {
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    94
		case 'r' : {
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    95
			AddStatText(QString("<h1 align=\"center\">%1</h1>").arg(info));
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    96
			break;
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    97
		}
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    98
		case 'D' : {
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
    99
			int i = info.indexOf(' ');
1673
06bff12f8a74 - Correctly use plural form in translations
unc0rr
parents: 1637
diff changeset
   100
			QString message = PageGameStats::tr("<p>The best shot award was won by <b>%1</b> with <b>%2</b> pts.</p>")
1622
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   101
					.arg(info.mid(i + 1), info.left(i));
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   102
			AddStatText(message);
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   103
			break;
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   104
		}
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   105
		case 'k' : {
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   106
			int i = info.indexOf(' ');
1673
06bff12f8a74 - Correctly use plural form in translations
unc0rr
parents: 1637
diff changeset
   107
			int num = info.left(i).toInt();
06bff12f8a74 - Correctly use plural form in translations
unc0rr
parents: 1637
diff changeset
   108
			QString message = PageGameStats::tr("<p>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</p>", "", num)
1622
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   109
					.arg(info.mid(i + 1), info.left(i));
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   110
			AddStatText(message);
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   111
			break;
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   112
		}
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   113
		case 'K' : {
1673
06bff12f8a74 - Correctly use plural form in translations
unc0rr
parents: 1637
diff changeset
   114
			int num = info.toInt();
06bff12f8a74 - Correctly use plural form in translations
unc0rr
parents: 1637
diff changeset
   115
			QString message = PageGameStats::tr("<p>A total of <b>%1</b> hedgehog(s) were killed during this round.</p>", "", num).arg(num);
1622
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   116
			AddStatText(message);
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   117
			break;
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   118
		}
1625
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
   119
		case 'H' : {
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
   120
			int i = info.indexOf(' ');
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
   121
			quint32 clan = info.left(i).toInt();
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
   122
			quint32 hp = info.mid(i + 1).toUInt();
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
   123
			healthPoints[clan].append(hp);
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
   124
			break;
37aae47943ce Initial health graphic implementation
unc0rr
parents: 1623
diff changeset
   125
		}
1622
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   126
	}
8e0d62727f01 Fully separate statistics code from main form code
unc0rr
parents: 1621
diff changeset
   127
}