diff options
Diffstat (limited to 'libkdegames/highscore/kscoredialog.cpp')
-rw-r--r-- | libkdegames/highscore/kscoredialog.cpp | 411 |
1 files changed, 0 insertions, 411 deletions
diff --git a/libkdegames/highscore/kscoredialog.cpp b/libkdegames/highscore/kscoredialog.cpp deleted file mode 100644 index e799883b..00000000 --- a/libkdegames/highscore/kscoredialog.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/**************************************************************** -Copyright (c) 1998 Sandro Sigala <ssigala@globalnet.it>. -Copyright (c) 2001 Waldo Bastian <bastian@kde.org> -All rights reserved. - -Permission to use, copy, modify, and distribute this software -and its documentation for any purpose and without fee is hereby -granted, provided that the above copyright notice appear in all -copies and that both that the copyright notice and this -permission notice and warranty disclaimer appear in supporting -documentation, and that the name of the author not be used in -advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -The author disclaim all warranties with regard to this -software, including all implied warranties of merchantability -and fitness. In no event shall the author be liable for any -special, indirect or consequential damages or any damages -whatsoever resulting from loss of use, data or profits, whether -in an action of contract, negligence or other tortious action, -arising out of or in connection with the use or performance of -this software. -****************************************************************/ - -#include "config.h" - -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqlineedit.h> -#include <tqwidgetstack.h> -#include <tqtimer.h> -#include <tqevent.h> -#include <tqptrvector.h> - -#include <kapplication.h> -#include <kconfig.h> -#include <klocale.h> -#include <kseparator.h> - -#include "kscoredialog.h" - -class KScoreDialog::KScoreDialogPrivate -{ -public: - TQPtrList<FieldInfo> scores; - TQWidget *page; - TQGridLayout *tqlayout; - TQLineEdit *edit; - TQPtrVector<TQWidgetStack> stack; - TQPtrVector<TQLabel> labels; - TQLabel *commentLabel; - TQString comment; - int fields; - int newName; - int latest; - int nrCols; - bool loaded; - TQString configGroup; - - TQMap<int, int> col; - TQMap<int, TQString> header; - TQMap<int, TQString> key; - TQString player; -}; - - -KScoreDialog::KScoreDialog(int fields, TQWidget *parent, const char *oname) - : KDialogBase(parent, oname, true, i18n("High Scores"), Ok, Ok, true) -{ - d = new KScoreDialogPrivate(); - d->edit = 0; - d->fields = fields; - d->newName = -1; - d->latest = -1; - d->loaded = false; - d->nrCols = 0; - d->configGroup = "High Score"; - - d->scores.setAutoDelete(true); - d->header[Name] = i18n("Name"); - d->key[Name] = "Name"; - - d->header[Date] = i18n("Date"); - d->key[Date] = "Date"; - - d->header[Level] = i18n("Level"); - d->key[Level] = "Level"; - - d->header[Score] = i18n("Score"); - d->key[Score] = "Score"; - d->page = makeMainWidget(); - - connect(this, TQT_SIGNAL(okClicked()), TQT_SLOT(slotGotName())); -} - -KScoreDialog::~KScoreDialog() -{ - delete d; -} - -void KScoreDialog::setConfigGroup(const TQString &group) -{ - d->configGroup = group; - d->loaded = false; -} - -void KScoreDialog::setComment(const TQString &comment) -{ - d->comment = comment; -} - -void KScoreDialog::addField(int field, const TQString &header, const TQString &key) -{ - d->fields |= field; - d->header[field] = header; - d->key[field] = key; -} - -void KScoreDialog::setupDialog() -{ - d->nrCols = 1; - - for(int field = 1; field < d->fields; field = field * 2) - { - if (d->fields & field) - d->col[field] = d->nrCols++; - } - - d->tqlayout = new TQGridLayout(d->page, 15, d->nrCols, marginHint() + 20, spacingHint()); - d->tqlayout->addRowSpacing(4, 15); - - d->commentLabel = new TQLabel(d->page); - d->commentLabel->tqsetAlignment(AlignVCenter | AlignHCenter); - d->tqlayout->addMultiCellWidget(d->commentLabel, 1, 1, 0, d->nrCols-1); - - TQFont bold = font(); - bold.setBold(true); - - TQLabel *label; - d->tqlayout->addColSpacing(0, 50); - label = new TQLabel(i18n("Rank"), d->page); - d->tqlayout->addWidget(label, 3, 0); - label->setFont(bold); - - for(int field = 1; field < d->fields; field = field * 2) - { - if (d->fields & field) - { - d->tqlayout->addColSpacing(d->col[field], 50); - - label = new TQLabel(d->header[field], d->page); - d->tqlayout->addWidget(label, 3, d->col[field], field <= Name ? AlignLeft : AlignRight); - label->setFont(bold); - } - } - - KSeparator *sep = new KSeparator(Qt::Horizontal, d->page); - d->tqlayout->addMultiCellWidget(sep, 4, 4, 0, d->nrCols-1); - - d->labels.resize(d->nrCols * 10); - d->stack.resize(10); - - TQString num; - for (int i = 1; i <= 10; ++i) { - TQLabel *label; - num.setNum(i); - label = new TQLabel(i18n("#%1").tqarg(num), d->page); - d->labels.insert((i-1)*d->nrCols + 0, label); - d->tqlayout->addWidget(label, i+4, 0); - if (d->fields & Name) - { - TQWidgetStack *stack = new TQWidgetStack(d->page); - d->stack.insert(i-1, stack); - d->tqlayout->addWidget(stack, i+4, d->col[Name]); - label = new TQLabel(d->page); - d->labels.insert((i-1)*d->nrCols + d->col[Name], label); - stack->addWidget(label); - stack->raiseWidget(label); - } - for(int field = Name * 2; field < d->fields; field = field * 2) - { - if (d->fields & field) - { - label = new TQLabel(d->page); - d->labels.insert((i-1)*d->nrCols + d->col[field], label); - d->tqlayout->addWidget(label, i+4, d->col[field], AlignRight); - } - } - } -} - -void KScoreDialog::aboutToShow() -{ - if (!d->loaded) - loadScores(); - - if (!d->nrCols) - setupDialog(); - - d->commentLabel->setText(d->comment); - if (d->comment.isEmpty()) - { - d->commentLabel->setMinimumSize(TQSize(1,1)); - d->commentLabel->hide(); - d->tqlayout->addRowSpacing(0, -15); - d->tqlayout->addRowSpacing(2, -15); - } - else - { - d->commentLabel->setMinimumSize(d->commentLabel->tqsizeHint()); - d->commentLabel->show(); - d->tqlayout->addRowSpacing(0, -10); - d->tqlayout->addRowSpacing(2, 10); - } - d->comment = TQString(); - - TQFont normal = font(); - TQFont bold = normal; - bold.setBold(true); - - TQString num; - for (int i = 1; i <= 10; ++i) { - TQLabel *label; - num.setNum(i); - FieldInfo *score = d->scores.at(i-1); - label = d->labels[(i-1)*d->nrCols + 0]; - if (i == d->latest) - label->setFont(bold); - else - label->setFont(normal); - - if (d->fields & Name) - { - if (d->newName == i) - { - TQWidgetStack *stack = d->stack[i-1]; - d->edit = new TQLineEdit(d->player, stack); - d->edit->setMinimumWidth(40); - stack->addWidget(d->edit); - stack->raiseWidget(d->edit); - d->edit->setFocus(); - connect(d->edit, TQT_SIGNAL(returnPressed()), - this, TQT_SLOT(slotGotReturn())); - } - else - { - label = d->labels[(i-1)*d->nrCols + d->col[Name]]; - if (i == d->latest) - label->setFont(bold); - else - label->setFont(normal); - label->setText((*score)[Name]); - } - - } - for(int field = Name * 2; field < d->fields; field = field * 2) - { - if (d->fields & field) - { - label = d->labels[(i-1)*d->nrCols + d->col[field]]; - if (i == d->latest) - label->setFont(bold); - else - label->setFont(normal); - label->setText((*score)[field]); - } - } - } - d->latest = -1; - setFixedSize(tqminimumSizeHint()); -} - -void KScoreDialog::loadScores() -{ - TQString key, value; - d->loaded = true; - d->scores.clear(); - KConfigGroup config(kapp->config(), d->configGroup.utf8()); - - d->player = config.readEntry("LastPlayer"); - - TQString num; - for (int i = 1; i <= 10; ++i) { - num.setNum(i); - FieldInfo *score = new FieldInfo(); - for(int field = 1; field < d->fields; field = field * 2) - { - if (d->fields & field) - { - key = "Pos" + num + d->key[field]; - (*score)[field] = config.readEntry(key, "-"); - } - } - d->scores.append(score); - } -} - -void KScoreDialog::saveScores() -{ - TQString key, value; - KConfigGroup config(kapp->config(), d->configGroup.utf8()); - - config.writeEntry("LastPlayer", d->player); - - TQString num; - for (int i = 1; i <= 10; ++i) { - num.setNum(i); - FieldInfo *score = d->scores.at(i-1); - for(int field = 1; field < d->fields; field = field * 2) - { - if (d->fields & field) - { - key = "Pos" + num + d->key[field]; - config.writeEntry(key, (*score)[field]); - } - } - } - kapp->config()->sync(); -} - -int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName) -{ - return addScore(newScore, newInfo, askName, false); -} - -int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName, bool lessIsMore) -{ - if (!d->loaded) - loadScores(); - FieldInfo *score = d->scores.first(); - int i = 1; - for(; score; score = d->scores.next(), i++) - { - bool ok; - int num_score = (*score)[Score].toLong(&ok); - if (lessIsMore && !ok) - num_score = 1 << 30; - if (((newScore > num_score) && !lessIsMore) || - ((newScore < num_score) && lessIsMore)) - { - score = new FieldInfo(newInfo); - (*score)[Score].setNum(newScore); - d->scores.insert(i-1, score); - d->scores.remove(10); - d->latest = i; - if (askName) - d->newName = i; - else - saveScores(); - if (i == 1) - d->comment = i18n("Excellent!\nYou have a new high score!"); - else - d->comment = i18n("Well done!\nYou made it to the high score list!"); - return i; - } - } - return 0; -} - -void KScoreDialog::show() -{ - aboutToShow(); - KDialogBase::show(); -} - -void KScoreDialog::slotGotReturn() -{ - TQTimer::singleShot(0, this, TQT_SLOT(slotGotName())); -} - -void KScoreDialog::slotGotName() -{ - if (d->newName == -1) return; - - d->player = d->edit->text(); - - (*d->scores.at(d->newName-1))[Name] = d->player; - saveScores(); - - TQFont bold = font(); - bold.setBold(true); - - TQLabel *label = d->labels[(d->newName-1)*d->nrCols + d->col[Name]]; - label->setFont(bold); - label->setText(d->player); - d->stack[(d->newName-1)]->raiseWidget(label); - delete d->edit; - d->edit = 0; - d->newName = -1; -} - -int KScoreDialog::highScore() -{ - if (!d->loaded) - loadScores(); - - return (*d->scores.first())[Score].toInt(); -} - -void KScoreDialog::keyPressEvent( TQKeyEvent *ev) -{ - if ((d->newName != -1) && (ev->key() == Key_Return)) - { - ev->ignore(); - return; - } - KDialogBase::keyPressEvent(ev); -} - - -#include "kscoredialog.moc" |