1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/*
* Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
*
* See the LICENSE file for terms of use.
*/
#include <Wt/WApplication>
#include <Wt/WBreak>
#include <Wt/WContainerWidget>
#include <Wt/WEnvironment>
#include <Wt/WLineEdit>
#include <Wt/WPushButton>
#include <Wt/WServer>
#include <Wt/WText>
class HelloApplication : public Wt::WApplication
{
public:
HelloApplication(const Wt::WEnvironment& env, bool embedded);
private:
Wt::WLineEdit *nameEdit_;
Wt::WText *greeting_;
void greet();
};
HelloApplication::HelloApplication(const Wt::WEnvironment& env, bool embedded)
: WApplication(env)
{
Wt::WContainerWidget *top;
setTitle("Hello world");
if (!embedded) {
/*
* In Application mode, we have the root() is a container
* corresponding to the entire browser window
*/
top = root();
} else {
/*
* In WidgetSet mode, we create and bind containers to existing
* divs in the web page. In this example, we create a single div
* whose DOM id was passed as a request argument.
*/
top = new Wt::WContainerWidget();
const std::string *div = env.getParameter("div");
if (div) {
setJavaScriptClass(*div);
bindWidget(top, *div);
} else {
std::cerr << "Missing: parameter: 'div'" << std::endl;
return;
}
}
if (!embedded)
new Wt::WText
("<p><emph>Note: you can also run this application "
"from within <a href=\"hello.html\">a web page</a>.</emph></p>",
root());
/*
* Everything else is business as usual.
*/
top->addWidget(new Wt::WText("Your name, please ? "));
nameEdit_ = new Wt::WLineEdit(top);
nameEdit_->setFocus();
Wt::WPushButton *b = new Wt::WPushButton("Greet me.", top);
b->setMargin(5, Wt::Left);
top->addWidget(new Wt::WBreak());
greeting_ = new Wt::WText(top);
/*
* Connect signals with slots
*/
b->clicked().connect(this, &HelloApplication::greet);
nameEdit_->enterPressed().connect(this, &HelloApplication::greet);
}
void HelloApplication::greet()
{
/*
* Update the text, using text input into the nameEdit_ field.
*/
greeting_->setText("Hello there, " + nameEdit_->text());
}
Wt::WApplication *createApplication(const Wt::WEnvironment& env)
{
return new HelloApplication(env, false);
}
Wt::WApplication *createWidgetSet(const Wt::WEnvironment& env)
{
return new HelloApplication(env, true);
}
int main(int argc, char **argv)
{
Wt::WServer server(argv[0]);
// Use default server configuration: command line arguments and the
// wthttpd configuration file.
server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION);
// Application entry points. Each entry point binds an URL with an
// application (with a callback function used to bootstrap a new
// application).
// The following is the default entry point. It configures a
// standalone Wt application at the deploy path configured in the
// server configuration.
server.addEntryPoint(Wt::Application, createApplication);
// The following adds an entry point for a widget set. A widget set
// must be loaded as a JavaScript from an HTML page.
server.addEntryPoint(Wt::WidgetSet, createWidgetSet, "/hello.js");
// Start the server (in the background if there is threading support)
// and wait for a shutdown signal (e.g. Ctrl C, SIGKILL)
if (server.start()) {
Wt::WServer::waitForShutdown();
// Cleanly terminate all sessions
server.stop();
}
}
|