statisticsdialog.cpp 5.78 KB
Newer Older
Jaison Lee's avatar
Jaison Lee committed
1
/*
2
3
 * Copyright (C) 2004 Bart Vanhauwaert <bvh-cplusplus@irule.be>
 * Copyright (C) 2005-2008 Stephan Kulow <coolo@kde.org>
Parker Coates's avatar
Parker Coates committed
4
 * Copyright (C) 2008-2009 Parker Coates <coates@kde.org>
Jaison Lee's avatar
Jaison Lee committed
5
 *
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 * License of original code:
 * -------------------------------------------------------------------------
 *   Permission to use, copy, modify, and distribute this software and its
 *   documentation for any purpose and without fee is hereby granted,
 *   provided that the above copyright notice appear in all copies and that
 *   both that copyright notice and this permission notice appear in
 *   supporting documentation.
 *
 *   This file is provided AS IS with no warranties of any kind.  The author
 *   shall have no liability with respect to the infringement of copyrights,
 *   trade secrets or any patents by this file or any part thereof.  In no
 *   event will the author be liable for any lost revenue or profits or
 *   other special, indirect and consequential damages.
 * -------------------------------------------------------------------------
 *
 * License of modifications/additions made after 2009-01-01:
 * -------------------------------------------------------------------------
 *   This program is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU General Public License as
 *   published by the Free Software Foundation; either version 2 of 
 *   the License, or (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * -------------------------------------------------------------------------
 */
37

38
#include "statisticsdialog.h"
39

40
#include "dealerinfo.h"
41
#include "dealer.h"
42
#include "kpat_debug.h"
43

44
#include <KConfigGroup>
Laurent Montel's avatar
Laurent Montel committed
45
#include <KLocalizedString>
Laurent Montel's avatar
Laurent Montel committed
46
#include <KSharedConfig>
Laurent Montel's avatar
Laurent Montel committed
47
48
49
#include <QDialogButtonBox>
#include <QPushButton>
#include <QVBoxLayout>
50
51


52
StatisticsDialog::StatisticsDialog(QWidget* aParent)
Laurent Montel's avatar
Laurent Montel committed
53
	: QDialog(aParent),
54
	  indexToIdMap()
55
{
56
57
58
	QWidget* widget = new QWidget(this);
	ui = new Ui::GameStats();
	ui->setupUi(widget);
59

60
	setWindowTitle(i18n("Statistics"));
Laurent Montel's avatar
Laurent Montel committed
61
62
63
64
65
	
        QVBoxLayout *mainLayout = new QVBoxLayout;
	setLayout(mainLayout);
	mainLayout->addWidget(widget);
	QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close|QDialogButtonBox::Reset);
Laurent Montel's avatar
Laurent Montel committed
66
67
	connect(buttonBox, &QDialogButtonBox::accepted, this, &StatisticsDialog::accept);
	connect(buttonBox, &QDialogButtonBox::rejected, this, &StatisticsDialog::reject);
Laurent Montel's avatar
Laurent Montel committed
68
69
	mainLayout->addWidget(buttonBox);
	buttonBox->button(QDialogButtonBox::Close)->setDefault(true);
70

71

72
	QMap<QString,int> nameToIdMap;
73
74
75
	foreach ( DealerInfo * game, DealerInfoList::self()->games() )
		foreach ( int id, game->distinctIds() )
			nameToIdMap.insert( game->nameForId( id ), id );
76
77
78
79

	QMap<QString,int>::const_iterator it = nameToIdMap.constBegin();
	QMap<QString,int>::const_iterator end = nameToIdMap.constEnd();
	for (; it != end; ++it)
80
	{
81
82
83
		// Map combobox indices to game IDs
		indexToIdMap[ui->GameType->count()] = it.value();
		ui->GameType->addItem(it.key());
84
	}
85

86
87
88
	ui->GameType->setFocus();
	ui->GameType->setMaxVisibleItems(indexToIdMap.size());

89
	showGameType(indexToIdMap[0]);
90

Laurent Montel's avatar
Laurent Montel committed
91
92
	connect(ui->GameType, static_cast<void (KComboBox::*)(int)>(&KComboBox::activated), this, &StatisticsDialog::selectionChanged);
	connect(buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &StatisticsDialog::resetStats);
93
94
}

Laurent Montel's avatar
Laurent Montel committed
95
96
97
98
99
StatisticsDialog::~StatisticsDialog()
{
	delete ui;
}

100
void StatisticsDialog::selectionChanged(int comboIndex)
101
{
102
	int gameIndex = indexToIdMap[comboIndex];
103
	setGameType(gameIndex);
104
105
}

106
void StatisticsDialog::showGameType(int gameIndex)
107
{
108
	int comboIndex = indexToIdMap.key(gameIndex);
109
	ui->GameType->setCurrentIndex(comboIndex);
110
111
112
	setGameType(gameIndex);
}

113
void StatisticsDialog::setGameType(int gameIndex)
114
{
Laurent Montel's avatar
Laurent Montel committed
115
	KConfigGroup cg(KSharedConfig::openConfig(), scores_group);
116
	unsigned int t = cg.readEntry(QStringLiteral("total%1").arg(gameIndex),0);
117
	ui->Played->setText(QString::number(t));
118
	unsigned int w = cg.readEntry(QStringLiteral("won%1").arg(gameIndex),0);
119
	if (t)
120
		ui->Won->setText(i18n("%1 (%2%)", w, w*100/t));
121
	else
122
		ui->Won->setText( QString::number(w));
123
124
	ui->WinStreak->setText( QString::number( cg.readEntry(QStringLiteral("maxwinstreak%1").arg(gameIndex), 0)));
	ui->LoseStreak->setText( QString::number( cg.readEntry(QStringLiteral("maxloosestreak%1").arg(gameIndex), 0)));
125
126
127
128
129
	int minMoves = cg.readEntry(QStringLiteral("minmoves%1").arg(gameIndex), -1);
	if(minMoves < 0)
		ui->MinMoves->setText("∞");
	else
		ui->MinMoves->setText(QString::number(minMoves));
130
	unsigned int l = cg.readEntry(QStringLiteral("loosestreak%1").arg(gameIndex),0);
131
	if (l)
132
		ui->CurrentStreak->setText( i18np("1 loss", "%1 losses", l) );
133
	else
134
		ui->CurrentStreak->setText( i18np("1 win", "%1 wins",
Laurent Montel's avatar
Laurent Montel committed
135
	cg.readEntry(QStringLiteral("winstreak%1").arg(gameIndex),0)) );
136
}
137

138
void StatisticsDialog::resetStats()
Stephan Kulow's avatar
Stephan Kulow committed
139
{
140
	int gameIndex = indexToIdMap[ui->GameType->currentIndex()];
141
	Q_ASSERT(gameIndex >= 0);
Laurent Montel's avatar
Laurent Montel committed
142
	KConfigGroup cg(KSharedConfig::openConfig(), scores_group);
143
144
145
146
147
148
	cg.writeEntry(QStringLiteral("total%1").arg(gameIndex),0);
	cg.writeEntry(QStringLiteral("won%1").arg(gameIndex),0);
	cg.writeEntry(QStringLiteral("maxwinstreak%1").arg(gameIndex),0);
	cg.writeEntry(QStringLiteral("maxloosestreak%1").arg(gameIndex),0);
	cg.writeEntry(QStringLiteral("loosestreak%1").arg(gameIndex),0);
	cg.writeEntry(QStringLiteral("winstreak%1").arg(gameIndex),0);
149
	cg.writeEntry(QStringLiteral("minmoves%1").arg(gameIndex),-1);
Stephan Kulow's avatar
Stephan Kulow committed
150
	cg.sync();
151

152
	setGameType(gameIndex);
Stephan Kulow's avatar
Stephan Kulow committed
153
154
}

Laurent Montel's avatar
Laurent Montel committed
155

156
157

// kate: replace-tabs off; replace-tabs-save off