kexthighscore.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <config.h>
00021
00022 #include "kexthighscore.h"
00023
00024 #include <qlayout.h>
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 kdFatal(11002) << "A highscore object already exists" << endl;
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::showStatistics(bool show)
00141 {
00142 internal->showStatistics = show;
00143 }
00144
00145 void Manager::setShowDrawGamesStatistic(bool show)
00146 {
00147 internal->showDrawGames = show;
00148 }
00149
00150 void Manager::setWWHighscores(const KURL &url, const QString &version)
00151 {
00152 Q_ASSERT( url.isValid() );
00153 internal->serverURL = url;
00154 const char *HS_WW_URL = "ww hs url";
00155 ConfigGroup cg;
00156 if ( cg.config()->hasKey(HS_WW_URL) )
00157 internal->serverURL = cg.config()->readEntry(HS_WW_URL);
00158 else cg.config()->writeEntry(HS_WW_URL, url.url());
00159 internal->version = version;
00160 }
00161
00162 void Manager::setScoreHistogram(const QMemArray<uint> &scores,
00163 ScoreTypeBound type)
00164 {
00165 Q_ASSERT( scores.size()>=2 );
00166 for (uint i=0; i<scores.size()-1; i++)
00167 Q_ASSERT( scores[i]<scores[i+1] );
00168 internal->playerInfos().createHistoItems(scores, type==ScoreBound);
00169 }
00170
00171 void Manager::setShowMode(ShowMode mode)
00172 {
00173 internal->showMode = mode;
00174 }
00175
00176 void Manager::setScoreType(ScoreType type)
00177 {
00178 switch (type) {
00179 case Normal:
00180 return;
00181 case MinuteTime: {
00182 Item *item = createItem(ScoreDefault);
00183 item->setPrettyFormat(Item::MinuteTime);
00184 setScoreItem(0, item);
00185
00186 item = createItem(MeanScoreDefault);
00187 item->setPrettyFormat(Item::MinuteTime);
00188 setPlayerItem(MeanScore, item);
00189
00190 item = createItem(BestScoreDefault);
00191 item->setPrettyFormat(Item::MinuteTime);
00192 setPlayerItem(BestScore, item);
00193 return;
00194 }
00195 }
00196 }
00197
00198 void Manager::submitLegacyScore(const Score &score) const
00199 {
00200 internal->submitLocal(score);
00201 }
00202
00203 bool Manager::isStrictlyLess(const Score &s1, const Score &s2) const
00204 {
00205 return s1.score()<s2.score();
00206 }
00207
00208 Item *Manager::createItem(ItemType type)
00209 {
00210 Item *item = 0;
00211 switch (type) {
00212 case ScoreDefault:
00213 item = new Item((uint)0, i18n("Score"), Qt::AlignRight);
00214 break;
00215 case MeanScoreDefault:
00216 item = new Item((double)0, i18n("Mean Score"), Qt::AlignRight);
00217 item->setPrettyFormat(Item::OneDecimal);
00218 item->setPrettySpecial(Item::DefaultNotDefined);
00219 break;
00220 case BestScoreDefault:
00221 item = new Item((uint)0, i18n("Best Score"), Qt::AlignRight);
00222 item->setPrettySpecial(Item::DefaultNotDefined);
00223 break;
00224 case ElapsedTime:
00225 item = new Item((uint)0, i18n("Elapsed Time"), Qt::AlignRight);
00226 item->setPrettyFormat(Item::MinuteTime);
00227 item->setPrettySpecial(Item::ZeroNotDefined);
00228 break;
00229 }
00230 return item;
00231 }
00232
00233 void Manager::setScoreItem(uint worstScore, Item *item)
00234 {
00235 item->setDefaultValue(worstScore);
00236 internal->scoreInfos().setItem("score", item);
00237 internal->playerInfos().item("mean score")
00238 ->item()->setDefaultValue(double(worstScore));
00239 internal->playerInfos().item("best score")
00240 ->item()->setDefaultValue(worstScore);
00241 }
00242
00243 void Manager::addScoreItem(const QString &name, Item *item)
00244 {
00245 internal->scoreInfos().addItem(name, item, true);
00246 }
00247
00248 void Manager::setPlayerItem(PlayerItemType type, Item *item)
00249 {
00250 const Item *scoreItem = internal->scoreInfos().item("score")->item();
00251 uint def = scoreItem->defaultValue().toUInt();
00252 QString name;
00253 switch (type) {
00254 case MeanScore:
00255 name = "mean score";
00256 item->setDefaultValue(double(def));
00257 break;
00258 case BestScore:
00259 name = "best score";
00260 item->setDefaultValue(def);
00261 break;
00262 }
00263 internal->playerInfos().setItem(name, item);
00264 }
00265
00266 QString Manager::gameTypeLabel(uint gameType, LabelType type) const
00267 {
00268 if ( gameType!=0 )
00269 kdFatal(11002) << "You need to reimplement KExtHighscore::Manager for "
00270 << "multiple game types" << endl;
00271 switch (type) {
00272 case Icon:
00273 case Standard:
00274 case I18N: break;
00275 case WW: return "normal";
00276 }
00277 return QString::null;
00278 }
00279
00280 void Manager::addToQueryURL(KURL &url, const QString &item,
00281 const QString &content)
00282 {
00283 Q_ASSERT( !item.isEmpty() && url.queryItem(item).isNull() );
00284
00285 QString query = url.query();
00286 if ( !query.isEmpty() ) query += '&';
00287 query += item + '=' + KURL::encode_string(content);
00288 url.setQuery(query);
00289 }
00290
00291 }
This file is part of the documentation for libkdegames Library Version 3.4.3.