#include #include #include #include #include #include #include #include #include #include #include using namespace Wt; // ----------------------------------------------------------------------------------- std::unique_ptr createResizeableCont() { auto rootContUp = std::make_unique(); rootContUp->setAttributeValue("style", "width: 100%; height: 100%;"); auto itemsVLayout = rootContUp->setLayout(std::make_unique()); itemsVLayout->setContentsMargins(10, 10, 10, 10); auto flexLayout = itemsVLayout->addLayout(std::make_unique(), 1); flexLayout->setPreferredImplementation(LayoutImplementation::JavaScript); // Crash in both modes: Flex and JavaScript flexLayout->addWidget(std::make_unique("Left Resizable")); flexLayout->addWidget(std::make_unique("Right Resizable"), 1); flexLayout->setResizable(0, true, WLength(25, LengthUnit::Percentage)); // Crash return rootContUp; } // ----------------------------------------------------------------------------------- std::unique_ptr createEndlessTreeViewPanel() { auto localPanel = std::make_unique(); auto panelCont = localPanel->setCentralWidget(std::make_unique()); auto vLayout = panelCont->setLayout(std::make_unique()); auto hLayout = vLayout->addLayout(std::make_unique(), 1); hLayout->addWidget(std::make_unique(), 1); // The horizontal size will grow endless hLayout->addWidget(std::make_unique("Right")); return localPanel; } // ----------------------------------------------------------------------------------- std::unique_ptr createHelloApplication(const WEnvironment &env) { auto app = std::make_unique(env); auto theme = std::make_shared(); app->setTheme(theme); auto contents = std::make_unique(); Wt::WMenu *menu = app->root()->addNew(contents.get()); menu->setStyleClass("nav nav-pills flex-column"); menu->setWidth(150); menu->addItem("Dummy Menu Item", std::make_unique("Select one of the problematic widgets")); menu->addItem("Click (repeatedly) here to crash", createResizeableCont()); menu->addItem("Click here to trigger endless horizontal WTreeView width", createEndlessTreeViewPanel()); app->root()->addWidget(std::move(contents)); return app; } // ----------------------------------------------------------------------------------- int main(int argc, char *argv[]) { return Wt::WRun(argc, argv, &createHelloApplication); }