void ribi::con3::WtConnectThreeGameDialog::ShowWinner() { assert(m_state = state_winner); assert(m_board->GetWinner() != Winner::no_winner); assert(!m_timer->isActive()); //Request all info from m_board, before deleting it const Winner winner_index = m_board->GetWinner(); const std::string text = (winner_index == Winner::draw ? "draw" : "winner"); //There is a winner this->clear(); Wt::WImage * winner = new Wt::WImage; switch(winner_index) { case Winner::player1: winner->setImageRef( m_resources ->GetPlayersFilenames()[0]); break; case Winner::player2: winner->setImageRef( m_resources ->GetPlayersFilenames()[1]); break; case Winner::player3: winner->setImageRef( m_resources ->GetPlayersFilenames()[2]); break; case Winner::draw: winner->setImageRef( m_resources ->GetEmptyFilename()); break; default: assert(!"Should not get here"); throw std::logic_error("Known value of GetCurrentPlayer in ribi::con3::WtConnectThreeGameDialog::OnValidMove"); } this->addWidget(winner); this->addWidget(new Wt::WBreak); { Wt::WText * const title = new Wt::WText(text.c_str()); title->setStyleClass("title"); this->addWidget(title); } this->addWidget(new Wt::WBreak); { Wt::WPushButton * const button(new Wt::WPushButton("Restart",this)); button->clicked().connect( this, &ribi::con3::WtConnectThreeGameDialog::RestartGame); } }