void MainWindow::onNewGame() { m_needDestroy = false; m_gameConfiguring = true; std::shared_ptr<void> finalizer(nullptr, [&](void*) { m_gameConfiguring = false; }); NewGameDialog dialog; if (dialog.exec() != QDialog::Accepted) return; const GameConfig& config = dialog.gameConfig(); if (!config.isInititialized()) return; auto rival = std::move(dialog.rival()); connect(Kg::difficulty(), SIGNAL(currentLevelChanged(const KgDifficultyLevel*)), rival.get(), SLOT(onDifficultyChanged(const KgDifficultyLevel*))); m_menu.m_undoAction->setEnabled(rival->canUndo()); connect(rival.get(), SIGNAL(needDestroy()), this, SLOT(onNeedDestroy())); m_model = std::unique_ptr<BoardModel>(new BoardModel(config, createStepQueue(config))); connect(m_menu.m_undoAction, SIGNAL(triggered(bool)), m_model.get(), SLOT(undo())); connect(m_model.get(), SIGNAL(statusUpdated(const QString&)), statusBar(), SLOT(showMessage(const QString&))); { std::unique_ptr<IBoardView> view(new BoardView(this)); connect(this, SIGNAL(preferencesUpdated()), view->getObject(), SLOT(update())); setCentralWidget(qobject_cast<QWidget*>(view->getObject())); m_model->setView(std::move(view)); } m_model->setRival(std::move(rival)); m_menu.m_endAction->setEnabled(true); if (m_needDestroy) endGame(); }
/* * The 'New Game' button in 'Go Engine' tab has been pressed. */ void MainWindow::slot_fileNew() { NewGameDialog * newGameDialog = new NewGameDialog(this); newGameDialog->exec(); delete newGameDialog; }
void Kolf::startNewGame() { NewGameDialog *dialog = 0; int firstHole = 1; if (loadedGame.isNull()) { dialog = new NewGameDialog(filename.isNull(), dummy, "New Game Dialog"); if (dialog->exec() != QDialog::Accepted) goto end; } players.clear(); delete scoreboard; scoreboard = new ScoreBoard(dummy, "Score Board"); layout->addWidget(scoreboard, 1, 0); scoreboard->show(); if (loadedGame.isNull()) { PlayerEditor *curEditor = 0; int newId = 1; for (curEditor = dialog->players()->first(); curEditor; curEditor = dialog->players()->next(), ++newId) { players.append(Player()); players.last().ball()->setColor(curEditor->color()); players.last().setName(curEditor->name()); players.last().setId(newId); } competition = dialog->competition(); filename = filename.isNull()? dialog->course() : filename; } else { KConfig config(loadedGame); config.setGroup("0 Saved Game"); if (isTutorial) filename = KGlobal::dirs()->findResource("appdata", "tutorial.kolf"); else filename = config.readEntry("Course", QString::null); if (filename.isNull()) return; competition = config.readBoolEntry("Competition", false); firstHole = config.readNumEntry("Current Hole", 1); players.clear(); KolfGame::scoresFromSaved(&config, players); } for (PlayerList::Iterator it = players.begin(); it != players.end(); ++it) scoreboard->newPlayer((*it).name()); delete spacer; spacer = 0; delete game; game = new KolfGame(obj, &players, filename, dummy); game->setStrict(competition); connect(game, SIGNAL(newHole(int)), scoreboard, SLOT(newHole(int))); connect(game, SIGNAL(scoreChanged(int, int, int)), scoreboard, SLOT(setScore(int, int, int))); connect(game, SIGNAL(parChanged(int, int)), scoreboard, SLOT(parChanged(int, int))); connect(game, SIGNAL(modifiedChanged(bool)), this, SLOT(updateModified(bool))); connect(game, SIGNAL(newPlayersTurn(Player *)), this, SLOT(newPlayersTurn(Player *))); connect(game, SIGNAL(holesDone()), this, SLOT(gameOver())); connect(game, SIGNAL(checkEditing()), this, SLOT(checkEditing())); connect(game, SIGNAL(editingStarted()), this, SLOT(editingStarted())); connect(game, SIGNAL(editingEnded()), this, SLOT(editingEnded())); connect(game, SIGNAL(inPlayStart()), this, SLOT(inPlayStart())); connect(game, SIGNAL(inPlayEnd()), this, SLOT(inPlayEnd())); connect(game, SIGNAL(maxStrokesReached(const QString &)), this, SLOT(maxStrokesReached(const QString &))); connect(game, SIGNAL(largestHole(int)), this, SLOT(updateHoleMenu(int))); connect(game, SIGNAL(titleChanged(const QString &)), this, SLOT(titleChanged(const QString &))); connect(game, SIGNAL(newStatusText(const QString &)), this, SLOT(newStatusText(const QString &))); connect(game, SIGNAL(currentHole(int)), this, SLOT(setCurrentHole(int))); connect(holeAction, SIGNAL(activated(const QString &)), game, SLOT(switchHole(const QString &))); connect(nextAction, SIGNAL(activated()), game, SLOT(nextHole())); connect(prevAction, SIGNAL(activated()), game, SLOT(prevHole())); connect(firstAction, SIGNAL(activated()), game, SLOT(firstHole())); connect(lastAction, SIGNAL(activated()), game, SLOT(lastHole())); connect(randAction, SIGNAL(activated()), game, SLOT(randHole())); connect(editingAction, SIGNAL(activated()), game, SLOT(toggleEditMode())); connect(newHoleAction, SIGNAL(activated()), game, SLOT(addNewHole())); connect(clearHoleAction, SIGNAL(activated()), game, SLOT(clearHole())); connect(resetHoleAction, SIGNAL(activated()), game, SLOT(resetHole())); connect(undoShotAction, SIGNAL(activated()), game, SLOT(undoShot())); //connect(replayShotAction, SIGNAL(activated()), game, SLOT(replay())); connect(aboutAction, SIGNAL(activated()), game, SLOT(showInfoDlg())); connect(useMouseAction, SIGNAL(toggled(bool)), game, SLOT(setUseMouse(bool))); connect(useAdvancedPuttingAction, SIGNAL(toggled(bool)), game, SLOT(setUseAdvancedPutting(bool))); connect(soundAction, SIGNAL(toggled(bool)), game, SLOT(setSound(bool))); connect(showGuideLineAction, SIGNAL(toggled(bool)), game, SLOT(setShowGuideLine(bool))); connect(showInfoAction, SIGNAL(toggled(bool)), game, SLOT(setShowInfo(bool))); game->setUseMouse(useMouseAction->isChecked()); game->setUseAdvancedPutting(useAdvancedPuttingAction->isChecked()); game->setShowInfo(showInfoAction->isChecked()); game->setShowGuideLine(showGuideLineAction->isChecked()); game->setSound(soundAction->isChecked()); layout->addWidget(game, 0, 0, AlignCenter); game->show(); game->setFocus(); setEditingEnabled(true); endAction->setEnabled(true); setHoleMovementEnabled(true); setHoleOtherEnabled(true); aboutAction->setEnabled(true); highScoreAction->setEnabled(true); printAction->setEnabled(true); saveAction->setEnabled(true); saveAsAction->setEnabled(true); saveGameAction->setEnabled(true); saveGameAsAction->setEnabled(true); clearHoleAction->setEnabled(false); newHoleAction->setEnabled(false); newAction->setEnabled(false); loadGameAction->setEnabled(false); tutorialAction->setEnabled(false); // so game can do stuff that needs to be done // after things above are connected game->startFirstHole(firstHole); end: delete dialog; }