summaryrefslogtreecommitdiffstats
path: root/libkdegames/highscore/kexthighscore_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'libkdegames/highscore/kexthighscore_internal.h')
-rw-r--r--libkdegames/highscore/kexthighscore_internal.h277
1 files changed, 277 insertions, 0 deletions
diff --git a/libkdegames/highscore/kexthighscore_internal.h b/libkdegames/highscore/kexthighscore_internal.h
new file mode 100644
index 00000000..3b206877
--- /dev/null
+++ b/libkdegames/highscore/kexthighscore_internal.h
@@ -0,0 +1,277 @@
+/*
+ This file is part of the KDE games library
+ Copyright (C) 2001-2004 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_INTERNAL_H
+#define KEXTHIGHSCORE_INTERNAL_H
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kurl.h>
+
+#include "khighscore.h"
+#include "kexthighscore.h"
+
+class QTextStream;
+class QTabWidget;
+class QDomNamedNodeMap;
+
+
+namespace KExtHighscore
+{
+
+class PlayerInfos;
+class Score;
+class Manager;
+
+
+//-----------------------------------------------------------------------------
+class RankItem : public Item
+{
+ public:
+ RankItem()
+ : Item((uint)0, i18n("Rank"), Qt::AlignRight) {}
+
+ QVariant read(uint rank, const QVariant &) const { return rank; }
+ QString pretty(uint rank, const QVariant &) const
+ { return QString::number(rank+1); }
+};
+
+class NameItem : public Item
+{
+ public:
+ NameItem()
+ : Item(QString::null, i18n("Name"), Qt::AlignLeft) {
+ setPrettySpecial(Anonymous);
+ }
+};
+
+class DateItem : public Item
+{
+ public:
+ DateItem()
+ : Item(QDateTime(), i18n("Date"), Qt::AlignRight) {
+ setPrettyFormat(DateTime);
+ }
+};
+
+class SuccessPercentageItem : public Item
+{
+ public:
+ SuccessPercentageItem()
+ : Item((double)-1, i18n("Success"), Qt::AlignRight) {
+ setPrettyFormat(Percentage);
+ setPrettySpecial(NegativeNotDefined);
+ }
+};
+
+//-----------------------------------------------------------------------------
+class ItemContainer
+{
+ public:
+ ItemContainer();
+ ~ItemContainer();
+
+ void setItem(Item *item);
+ const Item *item() const { return _item; }
+ Item *item() { return _item; }
+
+ void setName(const QString &name) { _name = name; }
+ QString name() const { return _name; }
+
+ void setGroup(const QString &group) { _group = group; }
+ bool isStored() const { return !_group.isNull(); }
+
+ void setSubGroup(const QString &subGroup) { _subGroup = subGroup; }
+ bool canHaveSubGroup() const { return !_subGroup.isNull(); }
+
+ static const char ANONYMOUS[]; // name assigned to anonymous players
+ static const char ANONYMOUS_LABEL[];
+
+ QVariant read(uint i) const;
+ QString pretty(uint i) const;
+ void write(uint i, const QVariant &value) const;
+ // for UInt QVariant (return new value)
+ uint increment(uint i) const;
+
+ private:
+ Item *_item;
+ QString _name, _group, _subGroup;
+
+ QString entryName() const;
+
+ ItemContainer(const ItemContainer &);
+ ItemContainer &operator =(const ItemContainer &);
+};
+
+//-----------------------------------------------------------------------------
+/**
+ * Manage a bunch of @ref Item which are saved under the same group
+ * in KHighscores config file.
+ */
+class ItemArray : public QMemArray<ItemContainer *>
+{
+ public:
+ ItemArray();
+ virtual ~ItemArray();
+
+ virtual uint nbEntries() const = 0;
+
+ const ItemContainer *item(const QString &name) const;
+ ItemContainer *item(const QString &name);
+
+ void addItem(const QString &name, Item *, bool stored = true,
+ bool canHaveSubGroup = false);
+ void setItem(const QString &name, Item *);
+ int findIndex(const QString &name) const;
+
+ void setGroup(const QString &group);
+ void setSubGroup(const QString &subGroup);
+
+ void read(uint k, Score &data) const;
+ void write(uint k, const Score &data, uint maxNbLines) const;
+
+ void exportToText(QTextStream &) const;
+
+ private:
+ QString _group, _subGroup;
+
+ void _setItem(uint i, const QString &name, Item *, bool stored,
+ bool canHaveSubGroup);
+
+ ItemArray(const ItemArray &);
+ ItemArray &operator =(const ItemArray &);
+};
+
+//-----------------------------------------------------------------------------
+class ScoreInfos : public ItemArray
+{
+ public:
+ ScoreInfos(uint maxNbEntries, const PlayerInfos &infos);
+
+ uint nbEntries() const;
+ uint maxNbEntries() const { return _maxNbEntries; }
+
+ private:
+ uint _maxNbEntries;
+};
+
+//-----------------------------------------------------------------------------
+class ConfigGroup : public KConfigGroupSaver
+{
+ public:
+ ConfigGroup(const QString &group = QString::null)
+ : KConfigGroupSaver(kapp->config(), group) {}
+};
+
+//-----------------------------------------------------------------------------
+class PlayerInfos : public ItemArray
+{
+ public:
+ PlayerInfos();
+
+ bool isNewPlayer() const { return _newPlayer; }
+ bool isOldLocalPlayer() const { return _oldLocalPlayer; }
+ uint nbEntries() const;
+ QString name() const { return item("name")->read(_id).toString(); }
+ bool isAnonymous() const;
+ QString prettyName() const { return prettyName(_id); }
+ QString prettyName(uint id) const { return item("name")->pretty(id); }
+ QString registeredName() const;
+ QString comment() const { return item("comment")->pretty(_id); }
+ bool isWWEnabled() const;
+ QString key() const;
+ uint id() const { return _id; }
+ uint oldLocalId() const { return _oldLocalId; }
+
+ void createHistoItems(const QMemArray<uint> &scores, bool bound);
+ QString histoName(uint i) const;
+ uint histoSize() const;
+ const QMemArray<uint> &histogram() const { return _histogram; }
+
+ void submitScore(const Score &) const;
+ // return true if the nickname is already used locally
+ bool isNameUsed(const QString &name) const;
+ void modifyName(const QString &newName) const;
+ void modifySettings(const QString &newName, const QString &comment,
+ bool WWEnabled, const QString &newKey) const;
+ void removeKey();
+
+ private:
+ bool _newPlayer, _bound, _oldLocalPlayer;
+ uint _id, _oldLocalId;
+ QMemArray<uint> _histogram;
+};
+
+//-----------------------------------------------------------------------------
+class ManagerPrivate
+{
+ public:
+ ManagerPrivate(uint nbGameTypes, Manager &manager);
+ void init(uint maxNbentries);
+ ~ManagerPrivate();
+
+ bool modifySettings(const QString &newName, const QString &comment,
+ bool WWEnabled, QWidget *widget);
+
+ void setGameType(uint type);
+ void checkFirst();
+ int submitLocal(const Score &score);
+ int submitScore(const Score &score, QWidget *widget, bool askIfAnonymous);
+ Score readScore(uint i) const;
+
+ uint gameType() const { return _gameType; }
+ uint nbGameTypes() const { return _nbGameTypes; }
+ bool isWWHSAvailable() const { return !serverURL.isEmpty(); }
+ ScoreInfos &scoreInfos() { return *_scoreInfos; }
+ PlayerInfos &playerInfos() { return *_playerInfos; }
+ KHighscore &hsConfig() { return *_hsConfig; }
+ enum QueryType { Submit, Register, Change, Players, Scores };
+ KURL queryURL(QueryType type, const QString &newName=QString::null) const;
+
+ void exportHighscores(QTextStream &);
+
+ Manager &manager;
+ KURL serverURL;
+ QString version;
+ bool showStatistics, showDrawGames, trackLostGames, trackDrawGames;
+ Manager::ShowMode showMode;
+
+ private:
+ KHighscore *_hsConfig;
+ PlayerInfos *_playerInfos;
+ ScoreInfos *_scoreInfos;
+ bool _first;
+ const uint _nbGameTypes;
+ uint _gameType;
+
+ // return -1 if not a local best score
+ int rank(const Score &score) const;
+
+ bool submitWorldWide(const Score &score, QWidget *parent) const;
+ static bool doQuery(const KURL &url, QWidget *parent,
+ QDomNamedNodeMap *map = 0);
+ static bool getFromQuery(const QDomNamedNodeMap &map, const QString &name,
+ QString &value, QWidget *parent);
+ void convertToGlobal();
+};
+
+} // namespace
+
+#endif