14 #include <Wt/WApplication> 16 #include <Wt/WContainerWidget> 17 #include <Wt/WLineEdit> 18 #include <Wt/WPushButton> 21 #include <Wt/WSpinBox> 22 #include <Wt/WGroupBox> 23 #include <Wt/WButtonGroup> 24 #include <Wt/WRadioButton> 25 #include <Wt/WHBoxLayout> 26 #include <Wt/WEnvironment> 27 #include <Wt/WFileResource> 50 enum Kernel { Gaussian = 0, Epanechnikov = 1, Rectangular = 2,
51 Triangular = 3, Cosine = 4 };
65 setTitle(
"Witty WebApp With RInside");
67 setCssTheme(
"polished");
68 messageResourceBundle().use(appRoot() +
"wtdensity");
70 new WText(WString::tr(
"overview"), root());
72 std::string tfcmd =
"tfile <- tempfile(pattern=\"img\", tmpdir=\"/tmp\", fileext=\".png\")";
76 cmd_ =
"c(rnorm(100,0,1), rnorm(50,5,1))";
78 new WText(WString::tr(
"user input"), root());
79 Wt::WContainerWidget *wc =
new Wt::WContainerWidget(root());
80 wc->setStyleClass(
"box");
82 Wt::WHBoxLayout *layout =
new Wt::WHBoxLayout();
83 Wt::WContainerWidget *midbox =
new Wt::WContainerWidget(root());
84 layout->addWidget(midbox);
85 Wt::WContainerWidget *container =
new Wt::WContainerWidget(root());
86 layout->addWidget(container);
88 wc->setLayout(layout, AlignTop | AlignJustify);
90 midbox->addWidget(
new WText(
"Density estimation scale factor (div. by 100)"));
91 midbox->addWidget(
new WBreak());
92 spin_ =
new WSpinBox(midbox);
93 spin_->setRange(5, 200);
97 midbox->addWidget(
new WBreak());
98 midbox->addWidget(
new WText(
"R Command for data generation"));
99 midbox->addWidget(
new WBreak());
106 group_ =
new Wt::WButtonGroup(container);
108 Wt::WRadioButton *button;
109 button =
new Wt::WRadioButton(
"Gaussian", container);
110 new Wt::WBreak(container);
113 button =
new Wt::WRadioButton(
"Epanechnikov", container);
114 new Wt::WBreak(container);
117 button =
new Wt::WRadioButton(
"Rectangular", container);
118 new Wt::WBreak(container);
121 button =
new Wt::WRadioButton(
"Triangular", container);
122 new Wt::WBreak(container);
125 button =
new Wt::WRadioButton(
"Cosine", container);
126 new Wt::WBreak(container);
132 new WText(WString::tr(
"r result"), root());
133 Wt::WContainerWidget *botbox =
new Wt::WContainerWidget(root());
134 botbox->setStyleClass(
"box");
136 imgfile_->suggestFileName(
"density.png");
139 new WText(WString::tr(
"browser info"), root());
140 Wt::WContainerWidget *stbox =
new Wt::WContainerWidget(root());
141 stbox->setStyleClass(
"box");
145 useStyleSheet(
"wtdensity.css");
158 std::string rng =
"y2 <- " +
cmd_ +
"; y <- y2";
170 const char *kernelstr[] = {
"gaussian",
"epanechnikov",
"rectangular",
"triangular",
"cosine" };
176 std::string cmd0 =
"png(filename=tfile,width=600,height=400); plot(density(y, bw=bw/100, kernel=kernel), xlim=range(y)+c(-2,2), main=\"Kernel: ";
177 std::string cmd1 =
"\"); points(y, rep(0, length(y)), pch=16, col=rgb(0,0,0,1/4)); dev.off()";
178 std::string cmd = cmd0 + kernelstr[
kernel_] + cmd1;
181 greeting_->setText(
"Finished request from " + this->environment().clientAddress() +
" using " + this->environment().userAgent()) ;
194 int main(
int argc,
char **argv) {
DensityApp(const WEnvironment &env, RInside &R)
int main(int argc, char **argv)
Rcpp::NumericVector Yvec_
void parseEvalQ(const std::string &line)
int parseEval(const std::string &line, SEXP &ans)
void parseEvalQNT(const std::string &line)
static RInside & instance()
WApplication * createApplication(const WEnvironment &env)