#include "field.h" #include #include #include #include #include #include #include #include #include "factory.h" #include "board.h" #include "baseprefs.h" const char *BaseField::BUTTON_TEXTS[NB_BUTTON_TYPE] = { I18N_NOOP("Start"), I18N_NOOP("Resume"), I18N_NOOP("Proceed") }; BaseField::BaseField(TQWidget *w) : _widget(w), _boardLayout(0), _label(0), _button(0) { top = new TQGridLayout(w, 3, 5, 10); lcds = new TQGridLayout(7, 1, 5); top->addLayout(lcds, 1, 0); lcds->setRowStretch(1, 0); board = bfactory->createBoard(true, w); _boardRootPixmap = new KCanvasRootPixmap(board); _boardRootPixmap->start(); top->addWidget(board, 1, 2); } void BaseField::init(bool AI, bool multiplayer, bool server, bool first, const TQString &name) { _flags.AI = AI; _flags.multiplayer = multiplayer; _flags.server = server; _flags.first = first; TQString text = (AI ? i18n("%1\n(AI player)").arg(name) : (multiplayer ? i18n("%1\n(Human player)").arg(name) : TQString())); if ( first && !server ) text += i18n("\nWaiting for server"); setMessage(text, (first && server ? StartButton : NoButton)); showScore->resetColor(); board->init(false); } void BaseField::setArcade() { board->init(true); setMessage(i18n("Stage #1"), StartButton); } bool BaseField::isArcade() const { return board->isArcade(); } void BaseField::setMessage(const TQString &label, ButtonType type) { delete _label; _label = 0; delete _button; _button = 0; delete _boardLayout; _boardLayout = 0; if ( label.isEmpty() && type==NoButton ) { _widget->setFocus(); return; } _boardLayout = new TQVBoxLayout(board); _boardLayout->addStretch(3); if ( !label.isEmpty() ) { TQString str = (isArcade() ? i18n("Arcade game") + '\n' : TQString()) + label; _label = new TQLabel(str, board); _label->setAlignment(TQt::AlignCenter); _label->setFrameStyle( TQFrame::Panel | TQFrame::Sunken ); _boardLayout->addWidget(_label, 0, TQt::AlignCenter); _label->show(); } _boardLayout->addStretch(1); if ( type!=NoButton ) { _button = new TQPushButton(i18n(BUTTON_TEXTS[type]), board); _button->setFocus(); const char *slot = (type==ResumeButton ? TQ_SLOT(pause()) : TQ_SLOT(start())); _button->connect(_button, TQ_SIGNAL(clicked()), _widget->parent(), slot); _boardLayout->addWidget(_button, 0, TQt::AlignCenter); _button->show(); } _boardLayout->addStretch(3); } void BaseField::start(const GTInitData &data) { _firstScore = KExtHighscore::firstScore(); _lastScore = KExtHighscore::lastScore(); hideMessage(); board->start(data); } void BaseField::pause(bool pause) { if (pause) { board->pause(); setMessage(i18n("Game paused"), ResumeButton); } else { board->unpause(); hideMessage(); } } void BaseField::stop(bool gameover) { board->stop(); ButtonType button = StartButton; TQString msg = (gameover ? i18n("Game over") : TQString()); if ( board->isArcade() && board->arcadeStageDone() ) { if ( board->arcadeStage()==bfactory->bbi.nbArcadeStages ) msg = i18n("The End"); else { msg = i18n("Stage #%1 done").arg(board->arcadeStage()); button = ProceedButton; } } setMessage(msg, button); } void BaseField::gameOver(const KExtHighscore::Score &score, TQWidget *parent) { KNotifyClient::event(parent->winId(), "game over", i18n("Game Over")); KExtHighscore::submitScore(score, parent); } void BaseField::scoreUpdated() { showScore->display( (int)board->score() ); if (_flags.multiplayer) return; TQColor color; if ( _firstScoresetColor(color); } void BaseField::settingsChanged() { TQColor color = BasePrefs::fadeColor(); double s = BasePrefs::fadeIntensity(); _boardRootPixmap->setFadeEffect(s, color); board->canvas()->setBackgroundColor(color); board->settingsChanged(); }