• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

libkdegames/highscore

kexthighscore.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of the KDE games library
00003     Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License version 2 as published by the Free Software Foundation.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public License
00015     along with this library; see the file COPYING.LIB.  If not, write to
00016     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017     Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include "kexthighscore.h"
00021 
00022 #include <QLayout>
00023 //Added by qt3to4:
00024 #include <QVector>
00025 
00026 #include <kdebug.h>
00027 
00028 #include "kexthighscore_internal.h"
00029 #include "kexthighscore_gui.h"
00030 
00031 
00032 namespace KExtHighscore
00033 {
00034 
00035 //-----------------------------------------------------------------------------
00036 ManagerPrivate *internal = 0;
00037 
00038 uint gameType()
00039 {
00040     internal->checkFirst();
00041     return internal->gameType();
00042 }
00043 
00044 void setGameType(uint type)
00045 {
00046     internal->setGameType(type);
00047 }
00048 
00049 bool configure(QWidget *parent)
00050 {
00051     internal->checkFirst();
00052     ConfigDialog *cd = new ConfigDialog(parent);
00053     cd->exec();
00054     bool saved = cd->hasBeenSaved();
00055     delete cd;
00056     return saved;
00057 }
00058 
00059 void show(QWidget *parent, int rank)
00060 {
00061     HighscoresDialog *hd = new HighscoresDialog(rank, parent);
00062     hd->exec();
00063     delete hd;
00064 }
00065 
00066 void submitScore(const Score &score, QWidget *widget)
00067 {
00068     int rank = internal->submitScore(score, widget,
00069                                      internal->showMode!=Manager::NeverShow);
00070 
00071     switch (internal->showMode) {
00072     case Manager::AlwaysShow:
00073         show(widget, -1);
00074         break;
00075     case Manager::ShowForHigherScore:
00076         if ( rank!=-1) show(widget, rank);
00077         break;
00078     case Manager::ShowForHighestScore:
00079         if ( rank==0 ) show(widget, rank);
00080         break;
00081     case Manager::NeverShow:
00082         break;
00083     }
00084 }
00085 
00086 void show(QWidget *widget)
00087 {
00088     internal->checkFirst();
00089     show(widget, -1);
00090 }
00091 
00092 Score lastScore()
00093 {
00094     internal->checkFirst();
00095     internal->hsConfig().readCurrentConfig();
00096     uint nb = internal->scoreInfos().maxNbEntries();
00097     return internal->readScore(nb-1);
00098 }
00099 
00100 Score firstScore()
00101 {
00102     internal->checkFirst();
00103     internal->hsConfig().readCurrentConfig();
00104     return internal->readScore(0);
00105 }
00106 
00107 
00108 //-----------------------------------------------------------------------------
00109 Manager::Manager(uint nbGameTypes, uint maxNbEntries)
00110 {
00111     Q_ASSERT(nbGameTypes);
00112     Q_ASSERT(maxNbEntries);
00113     if (internal)
00114         kFatal(11002) << "A highscore object already exists";
00115     internal = new ManagerPrivate(nbGameTypes, *this);
00116     internal->init(maxNbEntries);
00117 }
00118 
00119 Manager::~Manager()
00120 {
00121     delete internal;
00122     internal = 0;
00123 }
00124 
00125 void Manager::setTrackLostGames(bool track)
00126 {
00127     internal->trackLostGames = track;
00128 }
00129 
00130 void Manager::setTrackDrawGames(bool track)
00131 {
00132     internal->trackDrawGames = track;
00133 }
00134 
00135 void Manager::setShowStatistics(bool show)
00136 {
00137     internal->showStatistics = show;
00138 }
00139 
00140 void Manager::setShowDrawGamesStatistic(bool show)
00141 {
00142     internal->showDrawGames = show;
00143 }
00144 
00145 void Manager::setWWHighscores(const KUrl &url, const QString &version)
00146 {
00147     Q_ASSERT( url.isValid() );
00148     internal->serverURL = url;
00149     const char *HS_WW_URL = "ww hs url";
00150     ConfigGroup cg;
00151     if ( cg.hasKey(HS_WW_URL) )
00152         internal->serverURL = cg.readEntry(HS_WW_URL);
00153     else cg.writeEntry(HS_WW_URL, url.url());
00154     internal->version = version;
00155 }
00156 
00157 void Manager::setScoreHistogram(const QVector<uint> &scores,
00158                                 ScoreTypeBound type)
00159 {
00160     Q_ASSERT( scores.size()>=2 );
00161     for (int i=0; i<scores.size()-1; i++)
00162         Q_ASSERT( scores[i]<scores[i+1] );
00163     internal->playerInfos().createHistoItems(scores, type==ScoreBound);
00164 }
00165 
00166 void Manager::setShowMode(ShowMode mode)
00167 {
00168     internal->showMode = mode;
00169 }
00170 
00171 void Manager::setScoreType(ScoreType type)
00172 {
00173     switch (type) {
00174     case Normal:
00175         return;
00176     case MinuteTime: {
00177         Item *item = createItem(ScoreDefault);
00178         item->setPrettyFormat(Item::MinuteTime);
00179         setScoreItem(0, item);
00180 
00181         item = createItem(MeanScoreDefault);
00182         item->setPrettyFormat(Item::MinuteTime);
00183         setPlayerItem(MeanScore, item);
00184 
00185         item = createItem(BestScoreDefault);
00186         item->setPrettyFormat(Item::MinuteTime);
00187         setPlayerItem(BestScore, item);
00188         return;
00189     }
00190     }
00191 }
00192 
00193 void Manager::submitLegacyScore(const Score &score) const
00194 {
00195     internal->submitLocal(score);
00196 }
00197 
00198 bool Manager::isStrictlyLess(const Score &s1, const Score &s2) const
00199 {
00200     return s1.score()<s2.score();
00201 }
00202 
00203 Item *Manager::createItem(ItemType type)
00204 {
00205     Item *item = 0;
00206     switch (type) {
00207     case ScoreDefault:
00208         item = new Item((uint)0, i18n("Score"), Qt::AlignRight);
00209         break;
00210     case MeanScoreDefault:
00211         item = new Item((double)0, i18n("Mean Score"), Qt::AlignRight);
00212         item->setPrettyFormat(Item::OneDecimal);
00213         item->setPrettySpecial(Item::DefaultNotDefined);
00214         break;
00215     case BestScoreDefault:
00216         item = new Item((uint)0, i18n("Best Score"), Qt::AlignRight);
00217         item->setPrettySpecial(Item::DefaultNotDefined);
00218         break;
00219     case ElapsedTime:
00220         item = new Item((uint)0, i18n("Elapsed Time"), Qt::AlignRight);
00221         item->setPrettyFormat(Item::MinuteTime);
00222         item->setPrettySpecial(Item::ZeroNotDefined);
00223         break;
00224     }
00225     return item;
00226 }
00227 
00228 void Manager::setScoreItem(uint worstScore, Item *item)
00229 {
00230     item->setDefaultValue(worstScore);
00231     internal->scoreInfos().setItem("score", item);
00232     internal->playerInfos().item("mean score")
00233         ->item()->setDefaultValue(double(worstScore));
00234     internal->playerInfos().item("best score")
00235         ->item()->setDefaultValue(worstScore);
00236 }
00237 
00238 void Manager::addScoreItem(const QString &name, Item *item)
00239 {
00240     internal->scoreInfos().addItem(name, item, true);
00241 }
00242 
00243 void Manager::setPlayerItem(PlayerItemType type, Item *item)
00244 {
00245     const Item *scoreItem = internal->scoreInfos().item("score")->item();
00246     uint def = scoreItem->defaultValue().toUInt();
00247     QString name;
00248     switch (type) {
00249     case MeanScore:
00250         name = "mean score";
00251         item->setDefaultValue(double(def));
00252         break;
00253     case BestScore:
00254         name = "best score";
00255         item->setDefaultValue(def);
00256         break;
00257     }
00258     internal->playerInfos().setItem(name, item);
00259 }
00260 
00261 QString Manager::gameTypeLabel(uint gameType, LabelType type) const
00262 {
00263     if ( gameType!=0 )
00264         kFatal(11002) << "You need to reimplement KExtHighscore::Manager for "
00265                        << "multiple game types";
00266     switch (type) {
00267     case Icon:
00268     case Standard:
00269     case I18N:     break;
00270     case WW:       return "normal";
00271     }
00272     return QString();
00273 }
00274 
00275 void Manager::addToQueryURL(KUrl &url, const QString &item,
00276                                const QString &content)
00277 {
00278     Q_ASSERT( !item.isEmpty() && url.queryItem(item).isNull() );
00279 
00280     QString query = url.query();
00281     if ( !query.isEmpty() ) query += '&';
00282     query += item + '=' + QUrl::toPercentEncoding( content );
00283     url.setQuery(query);
00284 }
00285 
00286 } // namescape

libkdegames/highscore

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

API Reference

Skip menu "API Reference"
  • kblackbox
  • kgoldrunner
  • kmahjongg
  • ksquares
  • libkdegames
  •   highscore
  •   kgame
  •   kggzgames
  •   kggzmod
  •   kggznet
  • libkmahjongg
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal