21 #include "kexthighscore_tab.moc"
28 #include <QTreeWidget>
29 #include <QHeaderView>
39 namespace KExtHighscore
49 addItem(QLatin1String(
"<") + i18n(
"all") + QLatin1Char(
'>' ));
50 connect(
this, SIGNAL(activated(
int)), SLOT(activatedSlot(
int)));
53 void PlayersCombo::activatedSlot(
int i)
72 QVBoxLayout *top =
new QVBoxLayout(
this);
73 top->setMargin( KDialog::marginHint() );
74 top->setSpacing( KDialog::spacingHint() );
76 QHBoxLayout *hbox =
new QHBoxLayout;
78 QLabel *label =
new QLabel(i18n(
"Select player:"),
this);
79 hbox->addWidget(label);
81 connect(_combo, SIGNAL(playerSelected(uint)),
82 SLOT(playerSelected(uint)));
83 connect(_combo, SIGNAL(allSelected()), SLOT(allSelected()));
84 hbox->addWidget(_combo);
90 uint
id =
internal->playerInfos().id();
91 _combo->setCurrentIndex(
id);
95 void AdditionalTab::allSelected()
102 if ( n==0 || total==0 )
return QString();
103 QString s = QString::fromLatin1(
"%1%").arg(100.0 * n / total, 0,
'f', 1);
104 return (withBraces ? QLatin1Char(
'(') + s + QLatin1Char(
')' ) : s);
114 const char *StatisticsTab::COUNT_LABELS[Nb_Counts] = {
115 I18N_NOOP(
"Total:"), I18N_NOOP(
"Won:"), I18N_NOOP(
"Lost:"),
118 const char *StatisticsTab::TREND_LABELS[Nb_Trends] = {
119 I18N_NOOP(
"Current:"), I18N_NOOP(
"Max won:"), I18N_NOOP(
"Max lost:")
125 setObjectName( QLatin1String(
"statistics_tab" ));
127 QVBoxLayout *top =
static_cast<QVBoxLayout *
>(layout());
129 QHBoxLayout *hbox =
new QHBoxLayout;
130 QVBoxLayout *vbox =
new QVBoxLayout;
131 hbox->addLayout(vbox);
132 top->addLayout(hbox);
134 QGroupBox *group =
new QGroupBox(i18n(
"Game Counts"),
this);
135 vbox->addWidget(group);
136 QGridLayout *gridLay =
new QGridLayout(group);
137 gridLay->setSpacing(KDialog::spacingHint());
138 for (uint k=0; k<Nb_Counts; k++) {
140 gridLay->addWidget(
new QLabel(i18n(COUNT_LABELS[k]), group), k, 0);
141 _nbs[k] =
new QLabel(group);
142 gridLay->addWidget(_nbs[k], k, 1);
143 _percents[k] =
new QLabel(group);
144 gridLay->addWidget(_percents[k], k, 2);
147 group =
new QGroupBox(i18n(
"Trends"),
this);
148 vbox->addWidget(group);
149 gridLay =
new QGridLayout(group);
150 gridLay->setSpacing(KDialog::spacingHint());
151 for (uint k=0; k<Nb_Trends; k++) {
152 gridLay->addWidget(
new QLabel(i18n(TREND_LABELS[k]), group), k, 0);
153 _trends[k] =
new QLabel(group);
154 gridLay->addWidget(_trends[k], k, 1);
167 for (
int i=0; i<_data.size()-1; i++) {
168 _data[i].count[Total] = pi.
item(QLatin1String(
"nb games" ))->
read(i).toUInt();
169 _data[i].count[Lost] = pi.
item(QLatin1String(
"nb lost games" ))->
read(i).toUInt()
170 + pi.
item(QLatin1String(
"nb black marks" ))->
read(i).toUInt();
171 _data[i].count[Draw] = pi.
item(QLatin1String(
"nb draw games" ))->
read(i).toUInt();
172 _data[i].count[Won] = _data[i].count[Total] - _data[i].count[Lost]
173 - _data[i].count[Draw];
174 _data[i].trend[CurrentTrend] =
175 pi.
item(QLatin1String(
"current trend" ))->
read(i).toInt();
176 _data[i].trend[WonTrend] = pi.
item(QLatin1String(
"max won trend" ))->
read(i).toUInt();
177 _data[i].trend[LostTrend] =
178 -(int)pi.
item(QLatin1String(
"max lost trend" ))->
read(i).toUInt();
181 for (
int k=0; k<Nb_Counts; k++) _data[nb].count[k] = 0;
182 for (
int k=0; k<Nb_Trends; k++) _data[nb].trend[k] = 0;
183 for (
int i=0; i<_data.size()-1; i++) {
184 for (uint k=0; k<Nb_Counts; k++)
185 _data[nb].count[k] += _data[i].count[k];
186 for (uint k=0; k<Nb_Trends; k++)
187 _data[nb].trend[k] += _data[i].trend[k];
189 for (uint k=0; k<Nb_Trends; k++)
190 _data[nb].trend[k] /= (_data.size()-1);
195 QString StatisticsTab::percent(
const Data &d, Count count)
const
197 if ( count==Total )
return QString();
201 void StatisticsTab::display(uint i)
203 const Data &d = _data[i];
204 for (uint k=0; k<Nb_Counts; k++) {
206 _nbs[k]->setText(QString::number(d.count[k]));
207 _percents[k]->setText(percent(d, Count(k)));
209 for (uint k=0; k<Nb_Trends; k++) {
211 if ( d.trend[k]>0 ) s = QLatin1Char(
'+' );
212 int prec = (i==
internal->playerInfos().nbEntries() ? 1 : 0);
213 _trends[k]->setText(s + QString::number(d.trend[k],
'f', prec));
221 setObjectName( QLatin1String(
"histogram_tab" ));
223 QVBoxLayout *top =
static_cast<QVBoxLayout *
>(layout());
226 _list->setSelectionMode(QAbstractItemView::NoSelection);
229 _list->setAllColumnsShowFocus(
true);
230 _list->setSortingEnabled(
false);
231 _list->header()->setClickable(
false);
232 _list->header()->setMovable(
false);
233 top->addWidget(_list);
235 _list->headerItem()->setText(0,i18n(
"From"));
236 _list->headerItem()->setText(1,i18n(
"To"));
237 _list->headerItem()->setText(2,i18n(
"Count"));
238 _list->headerItem()->setText(3,i18n(
"Percent"));
239 for (
int i=0; i<4; i++) _list->headerItem()->setTextAlignment(i, Qt::AlignRight);
240 _list->headerItem()->setText(4,QString());
242 const Item *sitem =
internal->scoreInfos().item(QLatin1String(
"score" ))->item();
245 for (
int k=1; k<( int )pi.
histoSize(); k++) {
246 QString s1 = sitem->
pretty(0, sh[k-1]);
248 if ( k==sh.size() ) s2 = QLatin1String(
"..." );
249 else if ( sh[k]!=sh[k-1]+1 ) s2 = sitem->
pretty(0, sh[k]);
250 QStringList items; items << s1 << s2;
261 _counts.resize((n+1) * s);
263 for (uint k=0; k<s; k++) {
264 _counts[n*s + k] = 0;
265 for (uint i=0; i<n; i++) {
267 _counts[i*s + k] = nb;
268 _counts[n*s + k] += nb;
277 void HistogramTab::display(uint i)
283 for (
int k=s-1; k>=0; k--) {
284 uint nb = _counts[i*s + k];
285 item->setText(2, QString::number(nb));
286 item->setText(3,
percent(nb, _data[i]));
287 uint width = (_data[i]==0 ? 0 : qRound(150.0 * nb / _data[i]));
288 QPixmap pixmap(width, 10);
289 pixmap.fill(Qt::blue);
290 item->setData(4, Qt::DecorationRole, pixmap);
292 item = _list->topLevelItem(itemNum);
QString prettyName() const
QVariant read(uint i) const
HistogramTab(QWidget *parent)
StatisticsTab(QWidget *parent)
PlayersCombo(QWidget *parent=0)
void playerSelected(uint i)
static QString percent(uint n, uint total, bool withBraces=false)
ManagerPrivate * internal
This class defines how to convert and how to display a highscore element (such as the score...
QString histoName(int i) const
const QVector< uint > & histogram() const
PlayerInfos & playerInfos()
AdditionalTab(QWidget *parent)
virtual void display(uint i)=0
virtual QString pretty(uint i, const QVariant &value) const
const ItemContainer * item(const QString &name) const