ribi::tictactoe::WtTicTacToeMenuDialog::WtTicTacToeMenuDialog()
{
  this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WLabel * const title = new Wt::WLabel("TicTacToe");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    //Using CSS styleclass is the best (only?) way to display the menu well
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        new WtTicTacToeGameDialog(false));
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }
}
ribi::con3::WtMenuDialog::WtMenuDialog(
    const Resources& resources
  )
  : m_game{},
    m_menu{},
    m_select(new WtSelectPlayerWidget(resources)),
    m_resources(resources)
{
  assert(m_select);
  this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WLabel * const title = new Wt::WLabel("ConnectThree");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  this->addWidget(new Wt::WBreak);
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    m_menu = new Wt::WMenu(contents,Wt::Horizontal);
    //Using CSS styleclass is the best (only?) way to display the menu well
    m_menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      m_menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Select players",
        CreateNewSelectPlayersDialog());
      m_menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        CreateNewGameDialog());
      m_menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      m_menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(m_menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
    m_menu->itemSelected().connect(
      this,&ribi::con3::WtMenuDialog::OnMenuItemChanged);
  }
  m_select->m_signal_on_clicked.connect(
    boost::bind(
      &ribi::con3::WtMenuDialog::OnSelectClicked,
      this));
}
//---------------------------------------------------------------------------
WtTestToggleButtonMenuDialog::WtTestToggleButtonMenuDialog()
{
  //Create resources
  {
    std::vector<std::string> image_names;
    image_names.push_back("ToolTestToggleButtonWelcome.png");

    BOOST_FOREACH(const std::string& filename,image_names)
    {
      if (!(QFile::exists(filename.c_str())))
      {
        QFile f( (std::string(":/images/") + filename).c_str() );
        f.copy(filename.c_str());
      }
      if (!QFile::exists(filename.c_str()))
      {
        std::cerr << "File not found: " << filename << '\n';
      }
      assert(boost::filesystem::exists(filename.c_str()));
    }
  }

  this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WLabel * const title = new Wt::WLabel("TestToggleButton");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    //Using CSS styleclass is the best (only?) way to display the menu well
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        CreateNewMainDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }
}
ribi::tent::WtMenuDialog::WtMenuDialog(
  boost::shared_ptr<const IpAddress> ip_address)
{
  {
    std::vector<std::string> image_names;
    image_names.push_back("TestEntranceWelcome.png");

    BOOST_FOREACH(const std::string& filename,image_names)
    {
      if (!(QFile::exists(filename.c_str())))
      {
        QFile f( (std::string(":/TestEntrance/images/") + filename).c_str() );
        f.copy(filename.c_str());
      }
      if (!boost::filesystem::exists(filename.c_str()))
      {
        std::cerr << "File not found: " << filename << '\n';
      }
      assert(boost::filesystem::exists(filename.c_str()));
    }
  }

  this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WLabel * const title = new Wt::WLabel("TestEntrance");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        CreateNewMainDialog(ip_address));
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }
}
ribi::WtHometrainerMenuDialog::WtHometrainerMenuDialog()
  : ui{}
{
  HometrainerResources();
  ui.m_load_exercise->DoRefresh();

  this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WLabel * const title = new Wt::WLabel("Hometrainer");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Load exercise",
        ui.m_load_exercise);
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start exercise",
        ui.m_start_exercise);
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }

  ui.m_load_exercise->m_signal_selected_file.connect(
    boost::bind(&ribi::WtHometrainerMenuDialog::OnSelectedFile,this,boost::lambda::_1));
}
ribi::WtRandomCodeMenuDialog::WtRandomCodeMenuDialog()
{
  CheckResources();
  this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WText * const title = new Wt::WText("RandomCode");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    //Using CSS styleclass is the best (only?) way to display the menu well
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        CreateNewGenerateDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }
}
ribi::ToolTestBroadcastServer::WtMenuDialog::WtMenuDialog()
{
 this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WLabel * const title = new Wt::WLabel("TestBroadcastServer");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    //Using CSS styleclass is the best (only?) way to display the menu well
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        CreateNewMainDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }
}
ribi::gtst::MenuDialog::MenuDialog(const SafeIpAddress * const ip_address)
    : m_server(Server::Get())
{
    assert(m_server);
    TRACE_FUNC();
    {
        //MainTimer::Get();
    }
    {
        m_server->TestMe();
    }
    this->setContentAlignment(Wt::AlignCenter);
    {
        Wt::WText * const title = new Wt::WText("GTST");
        title->setStyleClass("title");
        this->addWidget(title);
    }
    //Menu
    {
        Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
        Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
        //Using CSS styleclass is the best (only?) way to display the menu well
        menu->setStyleClass("menu");
        {
            Wt::WMenuItem * const item = new Wt::WMenuItem(
                "Welcome",
                CreateNewWelcomeDialog((ip_address)));
            menu->addItem(item);
        }
        {
            Wt::WMenuItem * const item = new Wt::WMenuItem(
                "Participant",
                new ParticipantDialog(m_server,ip_address));
            menu->addItem(item);
        }
        {
            Wt::WMenuItem * const item = new Wt::WMenuItem(
                "Administrator",
                new AdministratorDialog(m_server));
            menu->addItem(item);
        }
        {
            Wt::WMenuItem * const item = new Wt::WMenuItem(
                "Debug",
                new DebugDialog(m_server));
            menu->addItem(item);
        }
        {
            Wt::WMenuItem * const item = new Wt::WMenuItem(
                "About the experiment",
                CreateNewAboutTheExperimentDialog());
            menu->addItem(item);
        }
        {
            Wt::WMenuItem * const item = new Wt::WMenuItem(
                "About this program",
                CreateNewAboutDialog());
            menu->addItem(item);
        }

        //Display menu on top
        this->addWidget(menu);
        this->addWidget(new Wt::WBreak);
        //Display contents below menu
        this->addWidget(contents);
    }
}
ribi::WtAsciiArterMainDialog::WtAsciiArterMainDialog()
  : m_dialog{},
    m_filename{},
    m_n_cols{0},
    ui{}
{
  //Create resources
  {
    std::vector<std::string> image_names;
    image_names.push_back("ToolAsciiArterWelcome.png");

    for(const std::string& filename: image_names)
    {
      if (!fileio::IsRegularFile(filename))
      {
        QFile f( (std::string(":/ToolAsciiArter/images/") + filename).c_str() );
        f.copy(filename.c_str());
      }
      if (!fileio::IsRegularFile(filename))
      {
        std::cerr << "File not found: " + filename + '\n';
      }
      assert(fileio::IsRegularFile(filename));
    }
  }

  this->setContentAlignment(Wt::AlignCenter);
  //if (m_dialog)
  //{
  //  m_dialog->SetWidth(79);
  //}

  this->clear();
  //Title
  {
    Wt::WLabel * const title = new Wt::WLabel("AsciiArter");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  this->addWidget(new Wt::WBreak);
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        CreateNewMainDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }

  this->addWidget(new Wt::WBreak);

  assert(ui.m_edit_width);
  assert(ui.m_text);
}
//---------------------------------------------------------------------------
WtTestDialMenuDialog::WtTestDialMenuDialog()
{
  //Create resources
  {
    const std::vector<std::string> image_names
      =
    {
      "ToolTestDialWelcome_2_1.png"
    };
    std::for_each(image_names.begin(),image_names.end(),
      [](const std::string& filename)
      {
        if (!(QFile::exists(filename.c_str())))
        {
          QFile f( (std::string(":/images/") + filename).c_str() );
          f.copy(filename.c_str());
        }
        if (!QFile::exists(filename.c_str()))
        {
          const std::string s = "File not found: " + filename;
          throw std::logic_error(s.c_str());
        }
        assert(QFile::exists(filename.c_str()));
      }
    );
  }

  this->setContentAlignment(Wt::AlignCenter);
  {
    Wt::WLabel * const title = new Wt::WLabel("TestDial");
    title->setStyleClass("title");
    this->addWidget(title);
  }
  //Menu
  {
    Wt::WStackedWidget * const contents = new Wt::WStackedWidget;
    Wt::WMenu * const menu = new Wt::WMenu(contents,Wt::Horizontal);
    //Using CSS styleclass is the best (only?) way to display the menu well
    menu->setStyleClass("menu");
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Welcome",
        CreateNewWelcomeDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "Start",
        CreateNewMainDialog());
      menu->addItem(item);
    }
    {
      Wt::WMenuItem * const item = new Wt::WMenuItem(
        "About",
        CreateNewAboutDialog());
      menu->addItem(item);
    }
    //Display menu on top
    this->addWidget(menu);
    this->addWidget(new Wt::WBreak);
    //Display contents below menu
    this->addWidget(contents);
  }
}