10 #include <Wt/WApplication.h>
11 #include <Wt/WContainerWidget.h>
12 #include <Wt/WEnvironment.h>
13 #include <Wt/WInPlaceEdit.h>
14 #include <Wt/WHBoxLayout.h>
15 #include <Wt/WVBoxLayout.h>
16 #include <Wt/WLabel.h>
17 #include <Wt/WLineEdit.h>
18 #include <Wt/WTemplate.h>
20 #include <Wt/WTextArea.h>
21 #include <Wt/WPushButton.h>
22 #include <Wt/WCheckBox.h>
31 messageReceived_(nullptr)
60 auto vLayout =
setLayout(std::make_unique<Wt::WVBoxLayout>());
62 auto hLayout_(std::make_unique<Wt::WHBoxLayout>());
63 auto hLayout = hLayout_.get();
64 vLayout->addLayout(std::move(hLayout_), 0,
67 hLayout->addWidget(std::make_unique<Wt::WLabel>(
"User name:"),
74 auto button = hLayout->addWidget(std::make_unique<Wt::WPushButton>(
"Login"),
80 statusMsg_ = vLayout->addWidget(std::make_unique<Wt::WText>());
90 messageReceived_ = std::make_unique<Wt::WSound>(
"sounds/message_received.mp3");
94 "' is already taken.");
110 std::unique_ptr<WWidget> messageEdit,
111 std::unique_ptr<WWidget> sendButton, std::unique_ptr<WWidget> logoutButton)
131 auto vLayout = std::make_unique<Wt::WVBoxLayout>();
134 auto hLayout = std::make_unique<Wt::WHBoxLayout>();
140 messages->setStyleClass(
"chat-msgs");
141 hLayout->addWidget(std::move(messages), 1);
144 userList->setStyleClass(
"chat-users");
145 hLayout->addWidget(std::move(userList));
147 hLayout->setResizable(0,
true);
150 vLayout->addLayout(std::move(hLayout), 1);
153 messageEdit->setStyleClass(
"chat-noedit");
154 vLayout->addWidget(std::move(messageEdit));
157 hLayout = std::make_unique<Wt::WHBoxLayout>();
160 hLayout->addWidget(std::move(sendButton));
163 hLayout->addWidget(std::move(logoutButton));
188 WContainerWidget::render(flags);
206 auto messagesPtr = std::make_unique<WContainerWidget>();
207 auto userListPtr = std::make_unique<WContainerWidget>();
208 auto messageEditPtr = std::make_unique<Wt::WTextArea>();
209 auto sendButtonPtr = std::make_unique<Wt::WPushButton>(
"Send");
210 auto logoutButtonPtr = std::make_unique<Wt::WPushButton>(
"Logout");
225 createLayout(std::move(messagesPtr), std::move(userListPtr),
226 std::move(messageEditPtr),
227 std::move(sendButtonPtr), std::move(logoutButtonPtr));
242 (
"function(o, e) { setTimeout(function() {"
257 "'onChange':function(type, newV) {"
258 "var connected = window.monitor.status.connectionStatus != 0;"
289 auto nameEdit = std::make_unique<Wt::WInPlaceEdit>();
290 nameEdit->addStyleClass(
"name-edit");
291 nameEdit->setButtonsEnabled(
false);
292 nameEdit->setText(
user_);
296 joinMsg->
bindWidget(
"name", std::move(nameEdit));
330 for (SimpleChatServer::UserSet::iterator i = users.begin();
331 i != users.end(); ++i) {
335 UserMap::const_iterator j = oldUsers.find(*i);
336 if (j != oldUsers.end())
381 user_ =
event.data();
Encapsulate a chat event.
const Wt::WString & user() const
Get the user who caused the event.
const Wt::WString formattedHTML(const Wt::WString &user, Wt::TextFormat format) const
Get the message formatted as HTML, rendered for the given user.
Type type() const
Get the event type.
bool changeName(const Wt::WString &user, const Wt::WString &newUser)
Changes the name.
bool disconnect(Client *client)
Disconnect from the chat server.
UserSet users()
Get the users currently logged in.
void logout(const Wt::WString &user)
Logout from the server.
std::set< Wt::WString > UserSet
Typedef for a collection of user names.
bool connect(Client *client, const ChatEventCallback &handleEvent)
Connects to the chat server.
void sendMessage(const Wt::WString &user, const Wt::WString &message)
Send a message on behalve of a user.
Wt::WString suggestGuest()
Get a suggestion for a guest user name.
bool login(const Wt::WString &user)
Try to login with given user name.
void preventDefaultAction(bool prevent=true)
Wt::Signals::connection connect(F function)
void setJavaScript(const std::string &javaScript, int nbArgs=0)
void doJavaScript(const std::string &javascript, bool afterLoaded=true)
static WApplication * instance()
void setConnectionMonitor(const std::string &jsObject)
void enableUpdates(bool enabled=true)
bool test(EnumType flag) const
const WString & text() const
std::unique_ptr< WObject > removeChild(WObject *child)
static const WString Empty
virtual void bindWidget(const std::string &varName, std::unique_ptr< WWidget > widget)
virtual void setText(const WString &text)
const WString & text() const
bool setText(const WString &text)
bool setTextFormat(TextFormat format)