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(Wt::cpp14::make_unique<Wt::WVBoxLayout>());
62 auto hLayout_(Wt::cpp14::make_unique<Wt::WHBoxLayout>());
63 auto hLayout = hLayout_.get();
64 vLayout->addLayout(std::move(hLayout_), 0,
67 hLayout->addWidget(Wt::cpp14::make_unique<Wt::WLabel>(
"User name:"),
74 auto button = hLayout->addWidget(Wt::cpp14::make_unique<Wt::WPushButton>(
"Login"),
80 statusMsg_ = vLayout->addWidget(Wt::cpp14::make_unique<Wt::WText>());
90 messageReceived_ = Wt::cpp14::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 = Wt::cpp14::make_unique<Wt::WVBoxLayout>();
134 auto hLayout = Wt::cpp14::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 = Wt::cpp14::make_unique<Wt::WHBoxLayout>();
160 hLayout->addWidget(std::move(sendButton));
163 hLayout->addWidget(std::move(logoutButton));
188 WContainerWidget::render(flags);
206 auto messagesPtr = Wt::cpp14::make_unique<WContainerWidget>();
207 auto userListPtr = Wt::cpp14::make_unique<WContainerWidget>();
208 auto messageEditPtr = Wt::cpp14::make_unique<Wt::WTextArea>();
209 auto sendButtonPtr = Wt::cpp14::make_unique<Wt::WPushButton>(
"Send");
210 auto logoutButtonPtr = Wt::cpp14::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 = Wt::cpp14::make_unique<Wt::WInPlaceEdit>();
290 nameEdit->addStyleClass(
"name-edit");
291 nameEdit->setButtonsEnabled(
false);
292 nameEdit->setText(
user_);
295 Wt::WTemplate *joinMsg = messages_->addWidget(Wt::cpp14::make_unique<Wt::WTemplate>(
tr(
"join-msg.template")));
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())
void preventDefaultAction(bool prevent=true)
void setConnectionMonitor(const std::string &jsObject)
void sendMessage(const Wt::WString &user, const Wt::WString &message)
Send a message on behalve of a user.
bool connect(Client *client, const ChatEventCallback &handleEvent)
Connects to the chat server.
Encapsulate a chat event.
UserSet users()
Get the users currently logged in.
const WString & text() const
virtual void bindWidget(const std::string &varName, std::unique_ptr< WWidget > widget)
std::set< Wt::WString > UserSet
Typedef for a collection of user names.
bool changeName(const Wt::WString &user, const Wt::WString &newUser)
Changes the name.
std::unique_ptr< WObject > removeChild(WObject *child)
bool setText(const WString &text)
Wt::Signals::connection connect(const F &function)
bool setTextFormat(TextFormat format)
bool login(const Wt::WString &user)
Try to login with given user name.
bool disconnect(Client *client)
Disconnect from the chat server.
Wt::WString suggestGuest()
Get a suggestion for a guest user name.
void enableUpdates(bool enabled=true)
virtual void setText(const WString &text)
void logout(const Wt::WString &user)
Logout from the server.
const WString & text() const
static WApplication * instance()
const Wt::WString & user() const
Get the user who caused the event.
static const WString Empty
Type type() const
Get the event type.
const Wt::WString formattedHTML(const Wt::WString &user, Wt::TextFormat format) const
Get the message formatted as HTML, rendered for the given user.
void doJavaScript(const std::string &javascript, bool afterLoaded=true)
void setJavaScript(const std::string &javaScript, int nbArgs=0)
const Wt::WString & data() const
Get the extra data for this event.
bool test(EnumType flag) const