libkdegames Library API Documentation

kexthighscore.cpp

00001 /* 00002 This file is part of the KDE games library 00003 Copyright (C) 2001-02 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::showStatistics(bool show) 00129 { 00130 internal->showStatistics = show; 00131 } 00132 00133 void Manager::setWWHighscores(const KURL &url, const QString &version) 00134 { 00135 Q_ASSERT( url.isValid() ); 00136 internal->serverURL = url; 00137 const char *HS_WW_URL = "ww hs url"; 00138 ConfigGroup cg; 00139 if ( cg.config()->hasKey(HS_WW_URL) ) 00140 internal->serverURL = cg.config()->readEntry(HS_WW_URL); 00141 else cg.config()->writeEntry(HS_WW_URL, url.url()); 00142 internal->version = version; 00143 } 00144 00145 void Manager::setScoreHistogram(const QMemArray<uint> &scores, 00146 ScoreTypeBound type) 00147 { 00148 Q_ASSERT( scores.size()>=2 ); 00149 for (uint i=0; i<scores.size()-1; i++) 00150 Q_ASSERT( scores[i]<scores[i+1] ); 00151 internal->playerInfos().createHistoItems(scores, type==ScoreBound); 00152 } 00153 00154 void Manager::setShowMode(ShowMode mode) 00155 { 00156 internal->showMode = mode; 00157 } 00158 00159 void Manager::setScoreType(ScoreType type) 00160 { 00161 switch (type) { 00162 case Normal: 00163 return; 00164 case MinuteTime: { 00165 Item *item = createItem(ScoreDefault); 00166 item->setPrettyFormat(Item::MinuteTime); 00167 setScoreItem(0, item); 00168 00169 item = createItem(MeanScoreDefault); 00170 item->setPrettyFormat(Item::MinuteTime); 00171 setPlayerItem(MeanScore, item); 00172 00173 item = createItem(BestScoreDefault); 00174 item->setPrettyFormat(Item::MinuteTime); 00175 setPlayerItem(BestScore, item); 00176 return; 00177 } 00178 } 00179 } 00180 00181 void Manager::submitLegacyScore(const Score &score) const 00182 { 00183 internal->submitLocal(score); 00184 } 00185 00186 bool Manager::isStrictlyLess(const Score &s1, const Score &s2) const 00187 { 00188 return s1.score()<s2.score(); 00189 } 00190 00191 Item *Manager::createItem(ItemType type) 00192 { 00193 Item *item = 0; 00194 switch (type) { 00195 case ScoreDefault: 00196 item = new Item((uint)0, i18n("Score"), Qt::AlignRight); 00197 break; 00198 case MeanScoreDefault: 00199 item = new Item((double)0, i18n("Mean Score"), Qt::AlignRight); 00200 item->setPrettyFormat(Item::OneDecimal); 00201 item->setPrettySpecial(Item::DefaultNotDefined); 00202 break; 00203 case BestScoreDefault: 00204 item = new Item((uint)0, i18n("Best Score"), Qt::AlignRight); 00205 item->setPrettySpecial(Item::DefaultNotDefined); 00206 break; 00207 case ElapsedTime: 00208 item = new Item((uint)0, i18n("Elapsed Time"), Qt::AlignRight); 00209 item->setPrettyFormat(Item::MinuteTime); 00210 item->setPrettySpecial(Item::ZeroNotDefined); 00211 break; 00212 } 00213 return item; 00214 } 00215 00216 void Manager::setScoreItem(uint worstScore, Item *item) 00217 { 00218 item->setDefaultValue(worstScore); 00219 internal->scoreInfos().setItem("score", item); 00220 internal->playerInfos().item("mean score") 00221 ->item()->setDefaultValue(double(worstScore)); 00222 internal->playerInfos().item("best score") 00223 ->item()->setDefaultValue(worstScore); 00224 } 00225 00226 void Manager::addScoreItem(const QString &name, Item *item) 00227 { 00228 internal->scoreInfos().addItem(name, item, true); 00229 } 00230 00231 void Manager::setPlayerItem(PlayerItemType type, Item *item) 00232 { 00233 const Item *scoreItem = internal->scoreInfos().item("score")->item(); 00234 uint def = scoreItem->defaultValue().toUInt(); 00235 QString name; 00236 switch (type) { 00237 case MeanScore: 00238 name = "mean score"; 00239 item->setDefaultValue(double(def)); 00240 break; 00241 case BestScore: 00242 name = "best score"; 00243 item->setDefaultValue(def); 00244 break; 00245 } 00246 internal->playerInfos().setItem(name, item); 00247 } 00248 00249 QString Manager::gameTypeLabel(uint gameType, LabelType type) const 00250 { 00251 if ( gameType!=0 ) 00252 kdFatal(11002) << "You need to reimplement KExtHighscore::Manager for " 00253 << "multiple game types" << endl; 00254 switch (type) { 00255 case Icon: 00256 case Standard: 00257 case I18N: break; 00258 case WW: return "normal"; 00259 } 00260 return QString::null; 00261 } 00262 00263 void Manager::addToQueryURL(KURL &url, const QString &item, 00264 const QString &content) 00265 { 00266 Q_ASSERT( !item.isEmpty() && url.queryItem(item).isNull() ); 00267 00268 QString query = url.query(); 00269 if ( !query.isEmpty() ) query += '&'; 00270 query += item + '=' + KURL::encode_string(content); 00271 url.setQuery(query); 00272 } 00273 00274 } // namescape
KDE Logo
This file is part of the documentation for libkdegames Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Sep 21 12:08:02 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003