|
#include <Wt/WApplication>
|
|
#include <Wt/WEnvironment>
|
|
#include <Wt/WTableView>
|
|
#include <Wt/WStringListModel>
|
|
#include <Wt/WPushButton>
|
|
#include <Wt/WText>
|
|
#include <boost/algorithm/string.hpp>
|
|
|
|
using namespace Wt;
|
|
static const int MAX_ROWS = 100;
|
|
|
|
class TestApplication : public WApplication
|
|
{
|
|
public:
|
|
TestApplication(const WEnvironment& env);
|
|
};
|
|
|
|
TestApplication::TestApplication(const WEnvironment& env) : WApplication(env)
|
|
{
|
|
setTitle("WTableView scrollTo() Issue");
|
|
|
|
new WText("Use button to try and drive issue where WTableView displays 'Loading'<br/>"
|
|
"Issue is timing dependent so you may need to press button a few times to retry<br/>",
|
|
root());
|
|
|
|
auto tvm1 = new WStringListModel(this);
|
|
for (int i = 0; i < MAX_ROWS; i ++)
|
|
tvm1->addString(boost::lexical_cast<std::string>(i));
|
|
|
|
auto tv1 = new WTableView(root());
|
|
tv1->resize(WLength(180), WLength(300));
|
|
tv1->setModel(tvm1);
|
|
tv1->scrollTo(tvm1->index(MAX_ROWS * 8 / 10, 0), WAbstractItemView::PositionAtTop);
|
|
|
|
auto pb = new WPushButton("Push to reduce number of entries and scroll", root());
|
|
pb->clicked().connect(std::bind([=] () {
|
|
if (tvm1->rowCount() == MAX_ROWS) {
|
|
tvm1->removeRows(MAX_ROWS - (MAX_ROWS / 5), MAX_ROWS / 5);
|
|
tv1->scrollTo(tvm1->index(10, 0), WAbstractItemView::PositionAtTop);
|
|
pb->setText("push to restart");
|
|
}
|
|
else {
|
|
redirect(environment().deploymentPath());
|
|
quit();
|
|
}
|
|
}));
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
return WRun(argc, argv, [](const WEnvironment& env) {return new TestApplication(env);});
|
|
}
|