#include #include #include #include #include #include #include #include #include #include using namespace Wt; class TableContainer : public WContainerWidget { WCheckBox *cb; WStandardItemModel *model; public: TableContainer(WContainerWidget *parent = 0) : WContainerWidget(parent) { cb = new WCheckBox("Toggle table size"); WTableView *table = new WTableView; model = new WStandardItemModel(0, 1, this); populateModel(); table->setModel(model); table->setSelectionMode(Wt::SingleSelection); table->setSelectionBehavior(Wt::SelectRows); table->setAlternatingRowColors(true); table->decorationStyle().setBorder(Wt::WBorder(), Wt::All); addWidget(cb); addWidget(new Wt::WBreak); addWidget(table); cb->changed().connect(this, &TableContainer::populateModel); } private: void populateModel() { model->clear(); int rowCount = cb->isChecked() ? 100 : 10; for (int i = 0; i < rowCount; ++i) model->appendRow(new WStandardItem(WString("row {1}").arg(i+1))); } }; class Test : public WApplication { WTabWidget *tabs = 0; public: Test(const WEnvironment& env) : Wt::WApplication(env) { #if 1 Wt::WBootstrapTheme *theme = new Wt::WBootstrapTheme(); theme->setVersion(Wt::WBootstrapTheme::Version2); setTheme(theme); root()->addStyleClass("container"); #endif setupUi(); #if 1 enableUpdates(); WServer::instance()->ioService().schedule(10 * 1000, [this]{ WServer::instance()->post(this->sessionId(), std::bind(&Test::update, this)); }); #endif } private: void setupUi() { tabs = new WTabWidget; tabs->addTab(new TableContainer, "Tab 1"); tabs->addTab(new TableContainer, "Tab 2"); root()->addWidget(tabs); } void update() { delete tabs; setupUi(); triggerUpdate(); } }; WApplication *createApplication(const WEnvironment& env) { return new Test(env); } int main(int argc, char *argv[]) { return WRun(argc, argv, &createApplication); }