kexthighscore_gui.h 5.11 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
    This file is part of the KDE games library
    Copyright (C) 2001-02 Nicolas Hadacek (hadacek@kde.org)

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.

    This library 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

#ifndef KEXTHIGHSCORE_GUI_H
#define KEXTHIGHSCORE_GUI_H

#include <QCheckBox>
24 25
#include <QDialog>
#include <QDialogButtonBox>
26
#include <QLineEdit>
27
#include <QList>
28 29
#include <QTreeWidget>

30
#include <KPageDialog>
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

#include "kexthighscore.h"

class QTabWidget;
class KUrlLabel;

namespace KExtHighscore
{

class ItemContainer;
class ItemArray;
class Score;
class AdditionalTab;

//-----------------------------------------------------------------------------
class ShowItem : public QTreeWidgetItem
{
 public:
    ShowItem(QTreeWidget *, bool highlight);

 private:
    bool _highlight;
};

class ScoresList : public QTreeWidget
{
 Q_OBJECT
 public:
Yuri Chornoivan's avatar
Yuri Chornoivan committed
59
    explicit ScoresList(QWidget *parent);
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81

    void addHeader(const ItemArray &);

 protected:
    QTreeWidgetItem *addLine(const ItemArray &, uint index, bool highlight);
    virtual QString itemText(const ItemContainer &, uint row) const = 0;

 private:
    virtual void addLineItem(const ItemArray &, uint index,
                             QTreeWidgetItem *item);
};

//-----------------------------------------------------------------------------
class HighscoresList : public ScoresList
{
 Q_OBJECT
 public:
    explicit HighscoresList(QWidget *parent);

    void load(const ItemArray &, int highlight);

 protected:
82
    QString itemText(const ItemContainer &, uint row) const override;
83 84 85 86 87 88 89 90 91 92
};

class HighscoresWidget : public QWidget
{
 Q_OBJECT
 public:
    explicit HighscoresWidget(QWidget *parent);

    void load(int rank);

93
 Q_SIGNALS:
94 95
    void tabChanged(int i);

96
 public Q_SLOTS:
97 98
    void changeTab(int i);

99
 private Q_SLOTS:
100
    void showURL(const QString &);
101
    void tabChanged() { Q_EMIT tabChanged(_tw->currentIndex()); }
102 103

 private:
104 105 106 107 108 109 110
    QTabWidget     *_tw = nullptr;
    HighscoresList *_scoresList = nullptr;
    HighscoresList *_playersList = nullptr;
    KUrlLabel      *_scoresUrl = nullptr;
    KUrlLabel *_playersUrl = nullptr;
    AdditionalTab  *_statsTab = nullptr;
    AdditionalTab *_histoTab = nullptr;
111 112 113 114 115 116 117 118
};

class HighscoresDialog : public KPageDialog
{
 Q_OBJECT
 public:
    HighscoresDialog(int rank, QWidget *parent);

119
 private Q_SLOTS:
120 121 122 123 124 125 126
    void slotUser1();
    void slotUser2();
    void tabChanged(int i) { _tab = i; }
    void highscorePageChanged(KPageWidgetItem *newpage, KPageWidgetItem *before);

 private:
    int _rank, _tab;
127
    QWidget *_current = nullptr;
128 129 130 131 132 133 134 135 136 137 138
    QList<KPageWidgetItem*> _pages;
};

//-----------------------------------------------------------------------------
class LastMultipleScoresList : public ScoresList
{
    Q_OBJECT
public:
    LastMultipleScoresList(const QVector<Score> &, QWidget *parent);

private:
139 140
    void addLineItem(const ItemArray &, uint index, QTreeWidgetItem *line) override;
    QString itemText(const ItemContainer &, uint row) const override;
141 142 143 144 145 146 147 148 149 150 151 152

private:
    const QVector<Score> &_scores;
};

class TotalMultipleScoresList : public ScoresList
{
    Q_OBJECT
public:
    TotalMultipleScoresList(const QVector<Score> &, QWidget *parent);

private:
153 154
    void addLineItem(const ItemArray &, uint index, QTreeWidgetItem *line) override;
    QString itemText(const ItemContainer &, uint row) const override;
155 156 157 158 159 160 161 162 163 164 165 166 167 168

private:
    const QVector<Score> &_scores;
};

//-----------------------------------------------------------------------------
class ConfigDialog : public QDialog
{
 Q_OBJECT
 public:
    explicit ConfigDialog(QWidget *parent);

    bool hasBeenSaved() const { return _saved; }

169
 private Q_SLOTS:
170 171
    void modifiedSlot();
    void removeSlot();
172
    void accept() override;
173 174 175 176 177
    void slotApply() { save(); }
    void nickNameChanged(const QString &);

 private:
    bool         _saved;
178 179 180 181 182 183 184
    QCheckBox   *_WWHEnabled = nullptr;
    QLineEdit   *_nickname = nullptr;
    QLineEdit *_comment = nullptr;
    QLineEdit   *_key = nullptr;
    QLineEdit *_registeredName = nullptr;
    QPushButton *_removeButton = nullptr;
    QDialogButtonBox *buttonBox = nullptr;
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    void load();
    bool save();
};

//-----------------------------------------------------------------------------
class AskNameDialog : public QDialog
{
 Q_OBJECT
 public:
    explicit AskNameDialog(QWidget *parent);

    QString name() const { return _edit->text(); }
    bool dontAskAgain() const { return _checkbox->isChecked(); }

200
 private Q_SLOTS:
201 202 203
    void nameChanged(QDialogButtonBox *box);

 private:
204 205
    QLineEdit *_edit = nullptr;
    QCheckBox *_checkbox = nullptr;
206 207 208 209 210
};

} // namespace

#endif