Project

General

Profile

Bug #14437 » main.cpp

Achim Reutelsterz, 03/25/2026 05:06 PM

 
#include <Wt/WBootstrap3Theme.h>
#include <Wt/WDialog.h>
#include <Wt/WEnvironment.h>
#include <Wt/WPushButton.h>
#include <Wt/WServer.h>
#include <Wt/WVBoxLayout.h>

Wt::WContainerWidget *m_displayedLayout = nullptr;

void setContainerActive(Wt::WVBoxLayout *layout, std::unique_ptr<Wt::WContainerWidget> container)
{
if (m_displayedLayout != nullptr)
{
m_displayedLayout->removeFromParent();
m_displayedLayout = nullptr;
}

m_displayedLayout = layout->addWidget(std::move(container), 1);
}

std::unique_ptr<Wt::WContainerWidget> buildContainer()
{
auto container = std::make_unique<Wt::WContainerWidget>();
auto gridLayout = container->setLayout(std::make_unique<Wt::WGridLayout>());

gridLayout->addWidget(
std::make_unique<Wt::WText>("Text1"), 0, 0, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);
gridLayout->addWidget(
std::make_unique<Wt::WText>("Text2"), 1, 0, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);
gridLayout->addWidget(
std::make_unique<Wt::WText>("Text3"), 2, 0, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);
gridLayout->addWidget(
std::make_unique<Wt::WText>("Text4"), 3, 0, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);

gridLayout->addWidget(
std::make_unique<Wt::WText>("Value1"), 0, 1, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);
gridLayout->addWidget(
std::make_unique<Wt::WText>("Value2"), 1, 1, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);
gridLayout->addWidget(
std::make_unique<Wt::WText>("Value3"), 2, 1, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);
gridLayout->addWidget(
std::make_unique<Wt::WText>("Value4"), 3, 1, Wt::AlignmentFlag::Justify | Wt::AlignmentFlag::Top);

return container;
}

std::unique_ptr<Wt::WApplication> createApplication(const Wt::WEnvironment &env)
{
auto app = std::make_unique<Wt::WApplication>(env);

auto appTheme = std::make_shared<Wt::WBootstrap3Theme>();

app->setTheme(appTheme);

auto layout = app->root()->setLayout(std::make_unique<Wt::WVBoxLayout>());
auto button = layout->addWidget(std::make_unique<Wt::WPushButton>("Update Container"));

auto container = buildContainer();
setContainerActive(layout, std::move(container));

button->clicked().connect([layout]() {
auto container = buildContainer();
setContainerActive(layout, std::move(container));
});

return app;
}

int main(int argc, char **argv)
{
try
{
Wt::WServer server(argc, argv, WTHTTP_CONFIGURATION);

server.addEntryPoint(Wt::EntryPointType::Application, std::bind(createApplication, std::placeholders::_1));

server.run();
}
catch (Wt::WException &e)
{
std::cerr << "Exception: " << e.what() << std::endl;
}
}
(1-1/3)