libkdegames Library API Documentation

kexthighscore.cpp

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., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #include "kexthighscore.h" 00021 00022 #include <qlayout.h> 00023 00024 #include <kdebug.h> 00025 00026 #include "kexthighscore_internal.h" 00027 #include "kexthighscore_gui.h" 00028 00029 00030 namespace KExtHighscore 00031 { 00032 00033 //----------------------------------------------------------------------------- 00034 ManagerPrivate *internal = 0; 00035 00036 uint gameType() 00037 { 00038 internal->checkFirst(); 00039 return internal->gameType(); 00040 } 00041 00042 void setGameType(uint type) 00043 { 00044 internal->setGameType(type); 00045 } 00046 00047 bool configure(QWidget *parent) 00048 { 00049 internal->checkFirst(); 00050 ConfigDialog *cd = new ConfigDialog(parent); 00051 cd->exec(); 00052 bool saved = cd->hasBeenSaved(); 00053 delete cd; 00054 return saved; 00055 } 00056 00057 void show(QWidget *parent, int rank) 00058 { 00059 HighscoresDialog *hd = new HighscoresDialog(rank, parent); 00060 hd->exec(); 00061 delete hd; 00062 } 00063 00064 void submitScore(const Score &score, QWidget *widget) 00065 { 00066 int rank = internal->submitScore(score, widget, 00067 internal->showMode!=Manager::NeverShow); 00068 00069 switch (internal->showMode) { 00070 case Manager::AlwaysShow: 00071 show(widget, -1); 00072 break; 00073 case Manager::ShowForHigherScore: 00074 if ( rank!=-1) show(widget, rank); 00075 break; 00076 case Manager::ShowForHighestScore: 00077 if ( rank==0 ) show(widget, rank); 00078 break; 00079 case Manager::NeverShow: 00080 break; 00081 } 00082 } 00083 00084 void show(QWidget *widget) 00085 { 00086 internal->checkFirst(); 00087 show(widget, -1); 00088 } 00089 00090 Score lastScore() 00091 { 00092 internal->checkFirst(); 00093 internal->hsConfig().readCurrentConfig(); 00094 uint nb = internal->scoreInfos().maxNbEntries(); 00095 return internal->readScore(nb-1); 00096 } 00097 00098 Score firstScore() 00099 { 00100 internal->checkFirst(); 00101 internal->hsConfig().readCurrentConfig(); 00102 return internal->readScore(0); 00103 } 00104 00105 00106 //----------------------------------------------------------------------------- 00107 Manager::Manager(uint nbGameTypes, uint maxNbEntries) 00108 { 00109 Q_ASSERT(nbGameTypes); 00110 Q_ASSERT(maxNbEntries); 00111 if (internal) 00112 kdFatal(11002) << "A highscore object already exists" << endl; 00113 internal = new ManagerPrivate(nbGameTypes, *this); 00114 internal->init(maxNbEntries); 00115 } 00116 00117 Manager::~Manager() 00118 { 00119 delete internal; 00120 internal = 0; 00121 } 00122 00123 void Manager::setTrackLostGames(bool track) 00124 { 00125 internal->trackLostGames = track; 00126 } 00127 00128 void Manager::setTrackDrawGames(bool track) 00129 { 00130 internal->trackDrawGames = track; 00131 } 00132 00133 void Manager::setShowStatistics(bool show) 00134 { 00135 internal->showStatistics = show; 00136 } 00137 00138 void Manager::showStatistics(bool show) 00139 { 00140 internal->showStatistics = show; 00141 } 00142 00143 void Manager::setShowDrawGamesStatistic(bool show) 00144 { 00145 internal->showDrawGames = show; 00146 } 00147 00148 void Manager::setWWHighscores(const KURL &url, const QString &version) 00149 { 00150 Q_ASSERT( url.isValid() ); 00151 internal->serverURL = url; 00152 const char *HS_WW_URL = "ww hs url"; 00153 ConfigGroup cg; 00154 if ( cg.config()->hasKey(HS_WW_URL) ) 00155 internal->serverURL = cg.config()->readEntry(HS_WW_URL); 00156 else cg.config()->writeEntry(HS_WW_URL, url.url()); 00157 internal->version = version; 00158 } 00159 00160 void Manager::setScoreHistogram(const QMemArray<uint> &scores, 00161 ScoreTypeBound type) 00162 { 00163 Q_ASSERT( scores.size()>=2 ); 00164 for (uint i=0; i<scores.size()-1; i++) 00165 Q_ASSERT( scores[i]<scores[i+1] ); 00166 internal->playerInfos().createHistoItems(scores, type==ScoreBound); 00167 } 00168 00169 void Manager::setShowMode(ShowMode mode) 00170 { 00171 internal->showMode = mode; 00172 } 00173 00174 void Manager::setScoreType(ScoreType type) 00175 { 00176 switch (type) { 00177 case Normal: 00178 return; 00179 case MinuteTime: { 00180 Item *item = createItem(ScoreDefault); 00181 item->setPrettyFormat(Item::MinuteTime); 00182 setScoreItem(0, item); 00183 00184 item = createItem(MeanScoreDefault); 00185 item->setPrettyFormat(Item::MinuteTime); 00186 setPlayerItem(MeanScore, item); 00187 00188 item = createItem(BestScoreDefault); 00189 item->setPrettyFormat(Item::MinuteTime); 00190 setPlayerItem(BestScore, item); 00191 return; 00192 } 00193 } 00194 } 00195 00196 void Manager::submitLegacyScore(const Score &score) const 00197 { 00198 internal->submitLocal(score); 00199 } 00200 00201 bool Manager::isStrictlyLess(const Score &s1, const Score &s2) const 00202 { 00203 return s1.score()<s2.score(); 00204 } 00205 00206 Item *Manager::createItem(ItemType type) 00207 { 00208 Item *item = 0; 00209 switch (type) { 00210 case ScoreDefault: 00211 item = new Item((uint)0, i18n("Score"), Qt::AlignRight); 00212 break; 00213 case MeanScoreDefault: 00214 item = new Item((double)0, i18n("Mean Score"), Qt::AlignRight); 00215 item->setPrettyFormat(Item::OneDecimal); 00216 item->setPrettySpecial(Item::DefaultNotDefined); 00217 break; 00218 case BestScoreDefault: 00219 item = new Item((uint)0, i18n("Best Score"), Qt::AlignRight); 00220 item->setPrettySpecial(Item::DefaultNotDefined); 00221 break; 00222 case ElapsedTime: 00223 item = new Item((uint)0, i18n("Elapsed Time"), Qt::AlignRight); 00224 item->setPrettyFormat(Item::MinuteTime); 00225 item->setPrettySpecial(Item::ZeroNotDefined); 00226 break; 00227 } 00228 return item; 00229 } 00230 00231 void Manager::setScoreItem(uint worstScore, Item *item) 00232 { 00233 item->setDefaultValue(worstScore); 00234 internal->scoreInfos().setItem("score", item); 00235 internal->playerInfos().item("mean score") 00236 ->item()->setDefaultValue(double(worstScore)); 00237 internal->playerInfos().item("best score") 00238 ->item()->setDefaultValue(worstScore); 00239 } 00240 00241 void Manager::addScoreItem(const QString &name, Item *item) 00242 { 00243 internal->scoreInfos().addItem(name, item, true); 00244 } 00245 00246 void Manager::setPlayerItem(PlayerItemType type, Item *item) 00247 { 00248 const Item *scoreItem = internal->scoreInfos().item("score")->item(); 00249 uint def = scoreItem->defaultValue().toUInt(); 00250 QString name; 00251 switch (type) { 00252 case MeanScore: 00253 name = "mean score"; 00254 item->setDefaultValue(double(def)); 00255 break; 00256 case BestScore: 00257 name = "best score"; 00258 item->setDefaultValue(def); 00259 break; 00260 } 00261 internal->playerInfos().setItem(name, item); 00262 } 00263 00264 QString Manager::gameTypeLabel(uint gameType, LabelType type) const 00265 { 00266 if ( gameType!=0 ) 00267 kdFatal(11002) << "You need to reimplement KExtHighscore::Manager for " 00268 << "multiple game types" << endl; 00269 switch (type) { 00270 case Icon: 00271 case Standard: 00272 case I18N: break; 00273 case WW: return "normal"; 00274 } 00275 return QString::null; 00276 } 00277 00278 void Manager::addToQueryURL(KURL &url, const QString &item, 00279 const QString &content) 00280 { 00281 Q_ASSERT( !item.isEmpty() && url.queryItem(item).isNull() ); 00282 00283 QString query = url.query(); 00284 if ( !query.isEmpty() ) query += '&'; 00285 query += item + '=' + KURL::encode_string(content); 00286 url.setQuery(query); 00287 } 00288 00289 } // namescape
KDE Logo
This file is part of the documentation for libkdegames Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Aug 26 00:21:38 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003