Example #1
0
 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();
 }