#include "field.h" #include "field.moc" #include #include #include #include #include #include #include #include #include "base/baseprefs.h" #include "factory.h" #include "highscores.h" #include "misc_ui.h" #include "board.h" #include "commonprefs.h" Field::Field(TQWidget *parent) : MPSimpleBoard(parent), BaseField(this) { // column 1 // score LCD scoreList = new KGameLCDList(this); showScore = new KGameLCD(6, scoreList); scoreList->append(showScore); showTime = new KGameLCDClock(scoreList); scoreList->append(showTime); lcds->addWidget(scoreList, 1, 0); lcds->setRowStretch(2, 1); // removed LCD removedList = new KGameLCDList(i18n(bfactory->mainData.removedLabel), this); lcds->addWidget(removedList, 3, 0); lcds->setRowStretch(4, 1); // level progress levelLabel = new TQLabel(this); levelLabel->setAlignment(AlignCenter); lcds->addWidget(levelLabel, 5, 0); toLevel = new KProgress(this); toLevel->setTextEnabled(true); toLevel->setFormat("1"); TQWhatsThis::add(toLevel, i18n("Display the progress to complete the current level or stage.")); lcds->addWidget(toLevel, 6, 0); lcds->setRowStretch(7, 1); // column 2 // previous player height prevHeight = new PlayerProgress(board, this, "prev_progress"); TQWhatsThis::add(prevHeight, i18n("Previous player's height")); top->addWidget(prevHeight, 1, 1, AlignHCenter); // column 3 // pending gift shower Board *b = static_cast(board); top->addWidget(b->giftPool(), 0, 2, AlignCenter); // shadow piece shadow = new Shadow(board, this); TQWhatsThis::add(shadow, i18n("Shadow of the current piece")); top->addWidget(shadow, 2, 2); // column 4 // next player height nextHeight = new PlayerProgress(board, this, "next_progress"); TQWhatsThis::add(nextHeight, i18n("Next player's height")); top->addWidget(nextHeight, 1, 3, AlignHCenter); // column 5 // next piece shower TQVBoxLayout *vbl = new TQVBoxLayout(10); top->addLayout(vbl, 1, 4); vbl->addStretch(1); labShowNext = new TQLabel(i18n("Next Tile"), this); labShowNext->setAlignment(AlignCenter); vbl->addWidget(labShowNext, 0); showNext = new ShowNextPiece(board, this); _snRootPixmap = new KCanvasRootPixmap(showNext); _snRootPixmap->start(); vbl->addWidget(showNext, 0); vbl->addStretch(4); connect(board, TQ_SIGNAL(scoreUpdated()), TQ_SLOT(scoreUpdatedSlot())); connect(board, TQ_SIGNAL(levelUpdated()), TQ_SLOT(levelUpdated())); connect(board, TQ_SIGNAL(removedUpdated()), TQ_SLOT(removedUpdated())); initVariableGUI(); } void Field::levelUpdated() { toLevel->setFormat(TQString::number(board->level())); // necessary to update string ... int p = toLevel->progress(); toLevel->setProgress(p+1); toLevel->setProgress(p); } void Field::removedUpdated() { uint nb = cfactory->cbi.nbRemovedToLevel; toLevel->setProgress(isArcade() ? board->arcadeDone() : board->nbRemoved() % nb); } void Field::showOpponents(bool show) { Board *b = static_cast(board); if (show) { prevHeight->show(); nextHeight->show(); b->giftPool()->show(); } else { prevHeight->hide(); nextHeight->hide(); b->giftPool()->hide(); } } void Field::settingsChanged() { BaseField::settingsChanged(); TQColor color = BasePrefs::fadeColor(); double s = BasePrefs::fadeIntensity(); _snRootPixmap->setFadeEffect(s, color); showNext->canvas()->setBackgroundColor(color); bool b = CommonPrefs::showNextPiece(); if (b) { showNext->show(); labShowNext->show(); } else { showNext->hide(); labShowNext->hide(); } b = CommonPrefs::showPieceShadow(); if (b) shadow->show(); else shadow->hide(); } void Field::_init(bool AI, bool multiplayer, bool server, bool first, const TQString &name) { BaseField::init(AI, multiplayer, server, first, name); showOpponents(multiplayer); static_cast(board)->setType(AI); } void Field::_initFlag(TQDataStream &s) { ServerInitData sid; s >> sid; GTInitData data; data.seed = sid.seed; data.initLevel = sid.initLevel; shadow->setDisplay(true); toLevel->setValue(0); showTime->reset(); showTime->start(); BaseField::start(data); initVariableGUI(); } void Field::initVariableGUI() { if ( board->isArcade() ) { scoreList->title()->setText(i18n("Elapsed time")); showScore->hide(); showTime->show(); TQWhatsThis::add(scoreList, i18n("Display the elapsed time.")); levelLabel->setText(i18n("Stage")); toLevel->setTotalSteps( board->arcadeTodo() ); } else { scoreList->title()->setText(i18n("Score")); showScore->show(); showTime->hide(); TQWhatsThis::add(scoreList, i18n("Display the current score.
It turns blue if it is a highscore and red if it is the best local score.
")); levelLabel->setText(i18n("Level")); toLevel->setTotalSteps(cfactory->cbi.nbRemovedToLevel); } } void Field::_playFlag(TQDataStream &s) { ServerPlayData spd; s >> spd; prevHeight->setValue(spd.prevHeight); nextHeight->setValue(spd.nextHeight); if (spd.gift) static_cast(board)->giftPool()->put(spd.gift); } void Field::_pauseFlag(bool p) { pause(p); shadow->setDisplay(!p); if (p) showTime->stop(); else showTime->start(); } void Field::_stopFlag(bool gameover) { BaseField::stop(gameover); showTime->stop(); } void Field::_dataOut(TQDataStream &s) { _cpd.height = board->firstClearLine(); _cpd.end = static_cast(board)->isGameOver(); _cpd.gift = static_cast(board)->gift(); s << _cpd; } KExtHighscore::Score Field::currentScore() const { KExtHighscore::Score score(_cpd.end ? KExtHighscore::Lost : KExtHighscore::Won); score.setScore(board->score()); score.setData("level", board->level()); score.setData("removed", board->nbRemoved()); return score; } void Field::_gameOverDataOut(TQDataStream &s) { s << currentScore(); } void Field::moveLeft() { static_cast(board)->pMoveLeft(); } void Field::moveRight() { static_cast(board)->pMoveRight(); } void Field::dropDownStart() { static_cast(board)->pDropDownStart(); } void Field::dropDownStop() { static_cast(board)->pDropDownStop(); } void Field::oneLineDown() { static_cast(board)->pOneLineDown(); } void Field::rotateLeft() { static_cast(board)->pRotateLeft(); } void Field::rotateRight() { static_cast(board)->pRotateRight(); } void Field::moveLeftTotal() { static_cast(board)->pMoveLeftTotal(); } void Field::moveRightTotal() { static_cast(board)->pMoveRightTotal();}