• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

libkdegames/highscore

  • sources
  • kde-4.14
  • kdegames
  • libkdegames
  • highscore
kexthighscore_internal.h
Go to the documentation of this file.
1 /*
2  This file is part of the KDE games library
3  Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License version 2 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #ifndef KEXTHIGHSCORE_INTERNAL_H
21 #define KEXTHIGHSCORE_INTERNAL_H
22 
23 #include <kglobal.h>
24 #include <kconfig.h>
25 #include <klocale.h>
26 #include <kurl.h>
27 
28 #include "khighscore.h"
29 #include "kexthighscore.h"
30 
31 #include <QtCore/QTextStream>
32 #include <QtCore/QVector>
33 #include <QtCore/QDateTime>
34 #include <kconfiggroup.h>
35 
36 class QTextStream;
37 class QDomNamedNodeMap;
38 
39 
40 namespace KExtHighscore
41 {
42 
43 class PlayerInfos;
44 class Score;
45 class Manager;
46 
47 
48 //-----------------------------------------------------------------------------
49 class RankItem : public Item
50 {
51  public:
52  RankItem()
53  : Item((uint)0, i18n("Rank"), Qt::AlignRight) {}
54 
55  QVariant read(uint i, const QVariant &value) const { Q_UNUSED(value); return i; }
56  QString pretty(uint i, const QVariant &value) const
57  { Q_UNUSED(value); return QString::number(i+1); }
58 };
59 
60 class NameItem : public Item
61 {
62  public:
63  NameItem()
64  : Item(QString(), i18n("Name"), Qt::AlignLeft) {
65  setPrettySpecial(Anonymous);
66  }
67 };
68 
69 class DateItem : public Item
70 {
71  public:
72  DateItem()
73  : Item(QDateTime(), i18n("Date"), Qt::AlignRight) {
74  setPrettyFormat(DateTime);
75  }
76 };
77 
78 class SuccessPercentageItem : public Item
79 {
80  public:
81  SuccessPercentageItem()
82  : Item((double)-1, i18n("Success"), Qt::AlignRight) {
83  setPrettyFormat(Percentage);
84  setPrettySpecial(NegativeNotDefined);
85  }
86 };
87 
88 //-----------------------------------------------------------------------------
89 class ItemContainer
90 {
91  public:
92  ItemContainer();
93  ~ItemContainer();
94 
95  void setItem(Item *item);
96  const Item *item() const { return _item; }
97  Item *item() { return _item; }
98 
99  void setName(const QString &name) { _name = name; }
100  QString name() const { return _name; }
101 
102  void setGroup(const QString &group) { _group = group; }
103  bool isStored() const { return !_group.isNull(); }
104 
105  void setSubGroup(const QString &subGroup) { _subGroup = subGroup; }
106  bool canHaveSubGroup() const { return !_subGroup.isNull(); }
107 
108  static const char ANONYMOUS[]; // name assigned to anonymous players
109  static const char ANONYMOUS_LABEL[];
110 
111  QVariant read(uint i) const;
112  QString pretty(uint i) const;
113  void write(uint i, const QVariant &value) const;
114  // for UInt QVariant (return new value)
115  uint increment(uint i) const;
116 
117  private:
118  Item *_item;
119  QString _name, _group, _subGroup;
120 
121  QString entryName() const;
122 
123  ItemContainer(const ItemContainer &);
124  ItemContainer &operator =(const ItemContainer &);
125 };
126 
127 //-----------------------------------------------------------------------------
132 class ItemArray : public QVector<ItemContainer *>
133 {
134  public:
135  ItemArray();
136  virtual ~ItemArray();
137 
138  virtual uint nbEntries() const = 0;
139 
140  const ItemContainer *item(const QString &name) const;
141  ItemContainer *item(const QString &name);
142 
143  void addItem(const QString &name, Item *, bool stored = true,
144  bool canHaveSubGroup = false);
145  void setItem(const QString &name, Item *);
146  int findIndex(const QString &name) const;
147 
148  void setGroup(const QString &group);
149  void setSubGroup(const QString &subGroup);
150 
151  void read(uint k, Score &data) const;
152  void write(uint k, const Score &data, uint maxNbLines) const;
153 
154  void exportToText(QTextStream &) const;
155 
156  private:
157  QString _group, _subGroup;
158 
159  void _setItem(uint i, const QString &name, Item *, bool stored,
160  bool canHaveSubGroup);
161 
162  ItemArray(const ItemArray &);
163  ItemArray &operator =(const ItemArray &);
164 };
165 
166 //-----------------------------------------------------------------------------
167 class ScoreInfos : public ItemArray
168 {
169  public:
170  ScoreInfos(uint maxNbEntries, const PlayerInfos &infos);
171 
172  uint nbEntries() const;
173  uint maxNbEntries() const { return _maxNbEntries; }
174 
175  private:
176  uint _maxNbEntries;
177 };
178 
179 //-----------------------------------------------------------------------------
180 class ConfigGroup : public KConfigGroup
181 {
182  public:
183  ConfigGroup(const QString &group = QLatin1String( "" ))
184  : KConfigGroup(KGlobal::config(), group) {}
185 };
186 
187 //-----------------------------------------------------------------------------
188 class PlayerInfos : public ItemArray
189 {
190  public:
191  PlayerInfos();
192 
193  bool isNewPlayer() const { return _newPlayer; }
194  bool isOldLocalPlayer() const { return _oldLocalPlayer; }
195  uint nbEntries() const;
196  QString name() const { return item(QLatin1String( "name" ))->read(_id).toString(); }
197  bool isAnonymous() const;
198  QString prettyName() const { return prettyName(_id); }
199  QString prettyName(uint id) const { return item(QLatin1String( "name" ))->pretty(id); }
200  QString registeredName() const;
201  QString comment() const { return item(QLatin1String( "comment" ))->pretty(_id); }
202  bool isWWEnabled() const;
203  QString key() const;
204  uint id() const { return _id; }
205  uint oldLocalId() const { return _oldLocalId; }
206 
207  void createHistoItems(const QVector<uint> &scores, bool bound);
208  QString histoName(int i) const;
209  int histoSize() const;
210  const QVector<uint> &histogram() const { return _histogram; }
211 
212  void submitScore(const Score &) const;
213  // return true if the nickname is already used locally
214  bool isNameUsed(const QString &name) const;
215  void modifyName(const QString &newName) const;
216  void modifySettings(const QString &newName, const QString &comment,
217  bool WWEnabled, const QString &newKey) const;
218  void removeKey();
219 
220  private:
221  bool _newPlayer, _bound, _oldLocalPlayer;
222  uint _id, _oldLocalId;
223  QVector<uint> _histogram;
224 };
225 
226 //-----------------------------------------------------------------------------
227 class ManagerPrivate
228 {
229  public:
230  ManagerPrivate(uint nbGameTypes, Manager &manager);
231  void init(uint maxNbentries);
232  ~ManagerPrivate();
233 
234  bool modifySettings(const QString &newName, const QString &comment,
235  bool WWEnabled, QWidget *widget);
236 
237  void setGameType(uint type);
238  void checkFirst();
239  int submitLocal(const Score &score);
240  int submitScore(const Score &score, QWidget *widget, bool askIfAnonymous);
241  Score readScore(uint i) const;
242 
243  uint gameType() const { return _gameType; }
244  uint nbGameTypes() const { return _nbGameTypes; }
245  bool isWWHSAvailable() const { return !serverURL.isEmpty(); }
246  ScoreInfos &scoreInfos() { return *_scoreInfos; }
247  PlayerInfos &playerInfos() { return *_playerInfos; }
248  KHighscore &hsConfig() { return *_hsConfig; }
249  enum QueryType { Submit, Register, Change, Players, Scores };
250  KUrl queryUrl(QueryType type, const QString &newName = QLatin1String("")) const;
251 
252  void exportHighscores(QTextStream &);
253 
254  Manager &manager;
255  KUrl serverURL;
256  QString version;
257  bool showStatistics, showDrawGames, trackLostGames, trackDrawGames;
258  Manager::ShowMode showMode;
259 
260  private:
261  KHighscore *_hsConfig;
262  PlayerInfos *_playerInfos;
263  ScoreInfos *_scoreInfos;
264  bool _first;
265  const uint _nbGameTypes;
266  uint _gameType;
267 
268  // return -1 if not a local best score
269  int rank(const Score &score) const;
270 
271  bool submitWorldWide(const Score &score, QWidget *parent) const;
272  static bool doQuery(const KUrl &url, QWidget *parent,
273  QDomNamedNodeMap *map = 0);
274  static bool getFromQuery(const QDomNamedNodeMap &map, const QString &name,
275  QString &value, QWidget *parent);
276  void convertToGlobal();
277 };
278 
279 } // namespace
280 
281 #endif
KExtHighscore::PlayerInfos
Definition: kexthighscore_internal.h:188
KHighscore
Class for managing highscore tables.
Definition: khighscore.h:82
KExtHighscore::ItemArray::setGroup
void setGroup(const QString &group)
Definition: kexthighscore_internal.cpp:171
KExtHighscore::RankItem
Definition: kexthighscore_internal.h:49
KExtHighscore::ItemArray::setSubGroup
void setSubGroup(const QString &subGroup)
Definition: kexthighscore_internal.cpp:179
KExtHighscore::PlayerInfos::isWWEnabled
bool isWWEnabled() const
Definition: kexthighscore_internal.cpp:379
KExtHighscore::PlayerInfos::submitScore
void submitScore(const Score &) const
Definition: kexthighscore_internal.cpp:399
KExtHighscore::PlayerInfos::prettyName
QString prettyName() const
Definition: kexthighscore_internal.h:198
QWidget
KExtHighscore::ItemContainer::read
QVariant read(uint i) const
Definition: kexthighscore_internal.cpp:75
KExtHighscore::PlayerInfos::isAnonymous
bool isAnonymous() const
Definition: kexthighscore_internal.cpp:361
KExtHighscore::ItemContainer::increment
uint increment(uint i) const
Definition: kexthighscore_internal.cpp:101
KExtHighscore::ManagerPrivate::queryUrl
KUrl queryUrl(QueryType type, const QString &newName=QLatin1String("")) const
Definition: kexthighscore_internal.cpp:543
KExtHighscore::ManagerPrivate::nbGameTypes
uint nbGameTypes() const
Definition: kexthighscore_internal.h:244
KExtHighscore::ItemContainer::name
QString name() const
Definition: kexthighscore_internal.h:100
KExtHighscore::Manager
This class manages highscores and players entries (several players can share the same highscores list...
Definition: kexthighscore.h:141
KExtHighscore::ManagerPrivate::~ManagerPrivate
~ManagerPrivate()
Definition: kexthighscore_internal.cpp:536
KExtHighscore::ItemArray::exportToText
void exportToText(QTextStream &) const
Definition: kexthighscore_internal.cpp:204
KExtHighscore::SuccessPercentageItem::SuccessPercentageItem
SuccessPercentageItem()
Definition: kexthighscore_internal.h:81
KExtHighscore::ConfigGroup::ConfigGroup
ConfigGroup(const QString &group=QLatin1String(""))
Definition: kexthighscore_internal.h:183
KExtHighscore::PlayerInfos::comment
QString comment() const
Definition: kexthighscore_internal.h:201
KExtHighscore::ItemContainer::canHaveSubGroup
bool canHaveSubGroup() const
Definition: kexthighscore_internal.h:106
KExtHighscore::Item::Anonymous
Definition: kexthighscore_item.h:72
KExtHighscore::ManagerPrivate::showDrawGames
bool showDrawGames
Definition: kexthighscore_internal.h:257
KExtHighscore::ItemContainer::item
Item * item()
Definition: kexthighscore_internal.h:97
KExtHighscore::ScoreInfos::nbEntries
uint nbEntries() const
Definition: kexthighscore_internal.cpp:248
KExtHighscore::ManagerPrivate::Players
Definition: kexthighscore_internal.h:249
KExtHighscore::ManagerPrivate::exportHighscores
void exportHighscores(QTextStream &)
Definition: kexthighscore_internal.cpp:853
KExtHighscore::ManagerPrivate::scoreInfos
ScoreInfos & scoreInfos()
Definition: kexthighscore_internal.h:246
KExtHighscore::ManagerPrivate::serverURL
KUrl serverURL
Definition: kexthighscore_internal.h:255
KExtHighscore::PlayerInfos::key
QString key() const
Definition: kexthighscore_internal.cpp:373
KExtHighscore::ManagerPrivate::gameType
uint gameType() const
Definition: kexthighscore_internal.h:243
KExtHighscore::Item::NegativeNotDefined
Definition: kexthighscore_item.h:71
KExtHighscore::PlayerInfos::histoSize
int histoSize() const
Definition: kexthighscore_internal.cpp:394
KExtHighscore::ItemContainer::setName
void setName(const QString &name)
Definition: kexthighscore_internal.h:99
KExtHighscore::ItemContainer::ANONYMOUS_LABEL
static const char ANONYMOUS_LABEL[]
Definition: kexthighscore_internal.h:109
KExtHighscore::PlayerInfos::registeredName
QString registeredName() const
Definition: kexthighscore_internal.cpp:493
KExtHighscore::NameItem
Definition: kexthighscore_internal.h:60
KExtHighscore::ManagerPrivate::modifySettings
bool modifySettings(const QString &newName, const QString &comment, bool WWEnabled, QWidget *widget)
Definition: kexthighscore_internal.cpp:695
KExtHighscore::ManagerPrivate::showStatistics
bool showStatistics
Definition: kexthighscore_internal.h:257
KExtHighscore::ItemArray::addItem
void addItem(const QString &name, Item *, bool stored=true, bool canHaveSubGroup=false)
Definition: kexthighscore_internal.cpp:151
QTextStream
KExtHighscore::ItemContainer::item
const Item * item() const
Definition: kexthighscore_internal.h:96
KExtHighscore::RankItem::read
QVariant read(uint i, const QVariant &value) const
Definition: kexthighscore_internal.h:55
QString::isNull
bool isNull() const
KExtHighscore::PlayerInfos::id
uint id() const
Definition: kexthighscore_internal.h:204
KExtHighscore::ManagerPrivate::readScore
Score readScore(uint i) const
Definition: kexthighscore_internal.cpp:679
KExtHighscore::ManagerPrivate::Change
Definition: kexthighscore_internal.h:249
KExtHighscore::ManagerPrivate
Definition: kexthighscore_internal.h:227
QVector< ItemContainer * >::data
T * data()
QDomNamedNodeMap
KExtHighscore::ManagerPrivate::submitScore
int submitScore(const Score &score, QWidget *widget, bool askIfAnonymous)
Definition: kexthighscore_internal.cpp:785
KExtHighscore::PlayerInfos::removeKey
void removeKey()
Definition: kexthighscore_internal.cpp:499
QString::number
QString number(int n, int base)
KExtHighscore::ManagerPrivate::isWWHSAvailable
bool isWWHSAvailable() const
Definition: kexthighscore_internal.h:245
KExtHighscore::Item
This class defines how to convert and how to display a highscore element (such as the score...
Definition: kexthighscore_item.h:39
KExtHighscore::PlayerInfos::prettyName
QString prettyName(uint id) const
Definition: kexthighscore_internal.h:199
KExtHighscore::Manager::ShowMode
ShowMode
Enumerate different conditions under which to show the high score dialog.
Definition: kexthighscore.h:215
KExtHighscore::PlayerInfos::histoName
QString histoName(int i) const
Definition: kexthighscore_internal.cpp:385
khighscore.h
KExtHighscore::Item::Percentage
Definition: kexthighscore_item.h:54
KExtHighscore::PlayerInfos::histogram
const QVector< uint > & histogram() const
Definition: kexthighscore_internal.h:210
KExtHighscore::ManagerPrivate::version
QString version
Definition: kexthighscore_internal.h:256
KExtHighscore::ManagerPrivate::ManagerPrivate
ManagerPrivate(uint nbGameTypes, Manager &manager)
Definition: kexthighscore_internal.cpp:522
KExtHighscore::ManagerPrivate::setGameType
void setGameType(uint type)
Definition: kexthighscore_internal.cpp:746
KExtHighscore::RankItem::pretty
QString pretty(uint i, const QVariant &value) const
Definition: kexthighscore_internal.h:56
KExtHighscore::ManagerPrivate::Register
Definition: kexthighscore_internal.h:249
KExtHighscore::ItemContainer::ANONYMOUS
static const char ANONYMOUS[]
Definition: kexthighscore_internal.h:108
KExtHighscore::ManagerPrivate::QueryType
QueryType
Definition: kexthighscore_internal.h:249
KExtHighscore::ManagerPrivate::init
void init(uint maxNbentries)
Definition: kexthighscore_internal.cpp:529
KExtHighscore::ManagerPrivate::checkFirst
void checkFirst()
Definition: kexthighscore_internal.cpp:780
KExtHighscore::ManagerPrivate::trackLostGames
bool trackLostGames
Definition: kexthighscore_internal.h:257
KExtHighscore::ItemArray::write
void write(uint k, const Score &data, uint maxNbLines) const
Definition: kexthighscore_internal.cpp:195
KExtHighscore::SuccessPercentageItem
Definition: kexthighscore_internal.h:78
KExtHighscore::ManagerPrivate::playerInfos
PlayerInfos & playerInfos()
Definition: kexthighscore_internal.h:247
KExtHighscore::NameItem::NameItem
NameItem()
Definition: kexthighscore_internal.h:63
QString
KExtHighscore::PlayerInfos::createHistoItems
void createHistoItems(const QVector< uint > &scores, bool bound)
Definition: kexthighscore_internal.cpp:352
KExtHighscore::PlayerInfos::name
QString name() const
Definition: kexthighscore_internal.h:196
KExtHighscore::ItemContainer::pretty
QString pretty(uint i) const
Definition: kexthighscore_internal.cpp:87
KExtHighscore::PlayerInfos::PlayerInfos
PlayerInfos()
Definition: kexthighscore_internal.cpp:263
KExtHighscore::Item::setPrettyFormat
void setPrettyFormat(Format format)
Set the display format.
Definition: kexthighscore_item.cpp:53
KExtHighscore::Item::DateTime
Definition: kexthighscore_item.h:55
KExtHighscore::ItemContainer::ItemContainer
ItemContainer()
Definition: kexthighscore_internal.cpp:54
KExtHighscore::ManagerPrivate::manager
Manager & manager
Definition: kexthighscore_internal.h:254
KExtHighscore::PlayerInfos::isOldLocalPlayer
bool isOldLocalPlayer() const
Definition: kexthighscore_internal.h:194
KExtHighscore::ItemContainer::setGroup
void setGroup(const QString &group)
Definition: kexthighscore_internal.h:102
KExtHighscore::PlayerInfos::isNameUsed
bool isNameUsed(const QString &name) const
Definition: kexthighscore_internal.cpp:467
KConfigGroup
KExtHighscore::ItemContainer::isStored
bool isStored() const
Definition: kexthighscore_internal.h:103
KExtHighscore::ScoreInfos::ScoreInfos
ScoreInfos(uint maxNbEntries, const PlayerInfos &infos)
Definition: kexthighscore_internal.cpp:238
KExtHighscore::PlayerInfos::modifySettings
void modifySettings(const QString &newName, const QString &comment, bool WWEnabled, const QString &newKey) const
Definition: kexthighscore_internal.cpp:481
KExtHighscore::ManagerPrivate::Submit
Definition: kexthighscore_internal.h:249
QVector
QLatin1String
KExtHighscore::PlayerInfos::oldLocalId
uint oldLocalId() const
Definition: kexthighscore_internal.h:205
KExtHighscore::DateItem::DateItem
DateItem()
Definition: kexthighscore_internal.h:72
KExtHighscore::DateItem
Definition: kexthighscore_internal.h:69
KExtHighscore::ItemArray::read
void read(uint k, Score &data) const
Definition: kexthighscore_internal.cpp:187
KExtHighscore::ItemArray::nbEntries
virtual uint nbEntries() const =0
KExtHighscore::ItemContainer
Definition: kexthighscore_internal.h:89
KExtHighscore::ItemContainer::write
void write(uint i, const QVariant &value) const
Definition: kexthighscore_internal.cpp:93
KExtHighscore::Score
This class contains data for a score.
Definition: kexthighscore_item.h:178
KExtHighscore::ItemArray::ItemArray
ItemArray()
Definition: kexthighscore_internal.cpp:109
KExtHighscore::ScoreInfos::maxNbEntries
uint maxNbEntries() const
Definition: kexthighscore_internal.h:173
KExtHighscore::ManagerPrivate::trackDrawGames
bool trackDrawGames
Definition: kexthighscore_internal.h:257
KExtHighscore::ManagerPrivate::showMode
Manager::ShowMode showMode
Definition: kexthighscore_internal.h:258
KExtHighscore::ScoreInfos
Definition: kexthighscore_internal.h:167
KExtHighscore::ItemArray::findIndex
int findIndex(const QString &name) const
Definition: kexthighscore_internal.cpp:118
KExtHighscore::PlayerInfos::nbEntries
uint nbEntries() const
Definition: kexthighscore_internal.cpp:366
KExtHighscore::ManagerPrivate::submitLocal
int submitLocal(const Score &score)
Definition: kexthighscore_internal.cpp:825
KExtHighscore::ConfigGroup
Definition: kexthighscore_internal.h:180
KExtHighscore::ManagerPrivate::hsConfig
KHighscore & hsConfig()
Definition: kexthighscore_internal.h:248
kexthighscore.h
KExtHighscore::PlayerInfos::modifyName
void modifyName(const QString &newName) const
Definition: kexthighscore_internal.cpp:476
KExtHighscore::ItemContainer::setItem
void setItem(Item *item)
Definition: kexthighscore_internal.cpp:63
KExtHighscore::Item::setPrettySpecial
void setPrettySpecial(Special special)
Set the special value for display.
Definition: kexthighscore_item.cpp:77
KExtHighscore::ItemArray::item
const ItemContainer * item(const QString &name) const
Definition: kexthighscore_internal.cpp:125
QVariant::toString
QString toString() const
KExtHighscore::ItemArray::setItem
void setItem(const QString &name, Item *)
Definition: kexthighscore_internal.cpp:141
KExtHighscore::ItemContainer::~ItemContainer
~ItemContainer()
Definition: kexthighscore_internal.cpp:58
KExtHighscore::PlayerInfos::isNewPlayer
bool isNewPlayer() const
Definition: kexthighscore_internal.h:193
KExtHighscore::ItemContainer::setSubGroup
void setSubGroup(const QString &subGroup)
Definition: kexthighscore_internal.h:105
KExtHighscore::ItemArray::~ItemArray
virtual ~ItemArray()
Definition: kexthighscore_internal.cpp:113
KExtHighscore::RankItem::RankItem
RankItem()
Definition: kexthighscore_internal.h:52
QDateTime
KExtHighscore::ManagerPrivate::Scores
Definition: kexthighscore_internal.h:249
KExtHighscore::ItemArray
Manage a bunch of Item which are saved under the same group in KHighscores config file...
Definition: kexthighscore_internal.h:132
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:46 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkdegames/highscore

Skip menu "libkdegames/highscore"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal