Wt examples: composer/ComposeExample.C Source File

Wt examples 4.10.4

Loading...
Searching...
No Matches
ComposeExample.C
Go to the documentation of this file.
1/*
2 * Copyright (C) 2008 Emweb bv, Herent, Belgium.
3 *
4 * See the LICENSE file for terms of use.
5 */
6
7#include <Wt/WApplication.h>
8#include <Wt/WBreak.h>
9#include <Wt/WText.h>
10#include <Wt/WPushButton.h>
11#include <Wt/WContainerWidget.h>
12#include <Wt/WStringUtil.h>
13#ifndef _MSC_VER
14#include <unistd.h>
15#endif
16
17#include "Composer.h"
18#include "ComposeExample.h"
19#include "Contact.h"
20
21ComposeExample::ComposeExample()
22 : WContainerWidget()
23{
24 composer_ = this->addWidget(std::make_unique<Composer>());
25
26 std::vector<Contact> addressBook;
27 addressBook.push_back(Contact(U"Koen Deforche",
28 U"koen.deforche@gmail.com"));
29 addressBook.push_back(Contact(U"Koen alias1",
30 U"koen.alias1@yahoo.com"));
31 addressBook.push_back(Contact(U"Koen alias2",
32 U"koen.alias2@yahoo.com"));
33 addressBook.push_back(Contact(U"Koen alias3",
34 U"koen.alias3@yahoo.com"));
35 addressBook.push_back(Contact(U"Bartje",
36 U"jafar@hotmail.com"));
37 composer_->setAddressBook(addressBook);
38
39 std::vector<Contact> contacts;
40 contacts.push_back(Contact(U"Koen Deforche", U"koen.deforche@gmail.com"));
41
42 composer_->setTo(contacts);
43 composer_->setSubject("That's cool! Want to start your own google?");
44
45 composer_->send.connect(this, &ComposeExample::send);
46 composer_->discard.connect(this, &ComposeExample::discard);
47
48 details_ = this->addWidget(std::make_unique<WContainerWidget>());
49
50 details_->addWidget(std::make_unique<WText>(tr("example.info")));
51}
52
53 void ComposeExample::send()
54{
55 WContainerWidget *feedback = this->addWidget(std::make_unique<WContainerWidget>());
56 feedback->setStyleClass(U"feedback");
57
58 WContainerWidget *horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
59 horiz->addWidget(std::make_unique<WText>(U"<p>We could have, but did not send the following email:</p>"));
60
61 std::vector<Contact> contacts = composer_->to();
62 if (!contacts.empty())
63 horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
64 for (unsigned i = 0; i < contacts.size(); ++i) {
65 horiz->addWidget(std::make_unique<WText>(U"To: \"" + contacts[i].name + U"\" <"
66 + contacts[i].email + U">", TextFormat::Plain));
67 horiz->addWidget(std::make_unique<WBreak>());
68 }
69
70 contacts = composer_->cc();
71 if (!contacts.empty())
72 horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
73 for (unsigned i = 0; i < contacts.size(); ++i) {
74 horiz->addWidget(std::make_unique<WText>(U"Cc: \"" + contacts[i].name + U"\" <"
75 + contacts[i].email + U">", TextFormat::Plain));
76 horiz->addWidget(std::make_unique<WBreak>());
77 }
78
79 contacts = composer_->bcc();
80 if (!contacts.empty())
81 horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
82 for (unsigned i = 0; i < contacts.size(); ++i) {
83 horiz->addWidget(std::make_unique<WText>(U"Bcc: \"" + contacts[i].name + U"\" <"
84 + contacts[i].email + U">", TextFormat::Plain));
85 horiz->addWidget(std::make_unique<WBreak>());
86 }
87
88 horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
89 horiz->addWidget(std::make_unique<WText>("Subject: \"" + composer_->subject() + "\"", TextFormat::Plain));
90
91 std::vector<Attachment> attachments = composer_->attachments();
92 if (!attachments.empty())
93 horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
94 for (unsigned i = 0; i < attachments.size(); ++i) {
95 horiz->addWidget(std::make_unique<WText>(U"Attachment: \""
96 + attachments[i].fileName
97 + U"\" (" + attachments[i].contentDescription
98 + U")", TextFormat::Plain));
99
100 unlink(attachments[i].spoolFileName.c_str());
101
102 horiz->addWidget(std::make_unique<WText>(", was in spool file: "
103 + attachments[i].spoolFileName));
104 horiz->addWidget(std::make_unique<WBreak>());
105 }
106
107 std::u32string message = composer_->message();
108
109 horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
110 horiz->addWidget(std::make_unique<WText>("Message body: "));
111 horiz->addWidget(std::make_unique<WBreak>());
112
113 if (!message.empty()) {
114 horiz->addWidget(std::make_unique<WText>(message, TextFormat::Plain));
115 } else
116 horiz->addWidget(std::make_unique<WText>("<i>(empty)</i>"));
117
118 removeWidget(composer_);
119 composer_ = nullptr;
120 removeWidget(details_);
121 details_ = nullptr;
122
123 wApp->quit();
124}
125
126 void ComposeExample::discard()
127{
128 WContainerWidget *feedback = this->addWidget(std::make_unique<WContainerWidget>());
129 feedback->setStyleClass("feedback");
130
131 WContainerWidget *horiz = feedback->addWidget(std::make_unique<WContainerWidget>());
132 horiz->addWidget(std::make_unique<WText>("<p>Wise decision! Everyone's mailbox is already full anyway.</p>"));
133
134 removeWidget(composer_);
135 composer_ = nullptr;
136 removeWidget(details_);
137 details_ = nullptr;
138
139 wApp->quit();
140}
141
142std::unique_ptr<WApplication> createApplication(const WEnvironment& env)
143{
144 std::unique_ptr<WApplication> app
145 = std::make_unique<WApplication>(env);
146
147 // The following assumes composer.xml is in the webserver working directory
148 // (but does not need to be deployed within docroot):
149 app->messageResourceBundle().use(WApplication::appRoot() + "composer");
150
151 // The following assumes composer.css is deployed in the seb server at the
152 // same location as the application:
153 app->useStyleSheet("composer.css");
154
155 app->setTitle("Composer example");
156
157 app->root()->addWidget(std::make_unique<ComposeExample>());
158
159 return app;
160}
161
162 int main(int argc, char **argv)
163{
164 return WRun(argc, argv, &createApplication);
165}
166
main
int main(int argc, char **argv)
Definition ComposeExample.C:162
createApplication
std::unique_ptr< WApplication > createApplication(const WEnvironment &env)
Definition ComposeExample.C:142
ComposeExample.h
Composer.h
Contact.h
ComposeExample::discard
void discard()
Definition ComposeExample.C:126
ComposeExample::send
void send()
Definition ComposeExample.C:53
ComposeExample::details_
WContainerWidget * details_
Definition ComposeExample.h:36
ComposeExample::composer_
Composer * composer_
Definition ComposeExample.h:35
ComposeExample::ComposeExample
ComposeExample()
create a new Composer example.
Definition ComposeExample.C:21
Composer::send
Wt::Signal send
The message is ready to be sent...
Definition Composer.h:93
Composer::bcc
std::vector< Contact > bcc() const
Get the Bc: contacts.
Definition Composer.C:65
Composer::discard
Wt::Signal discard
The message must be discarded.
Definition Composer.h:97
Composer::message
const WString & message() const
Get the message.
Definition Composer.C:93
Composer::to
std::vector< Contact > to() const
Get the To: contacts.
Definition Composer.C:55
Composer::setTo
void setTo(const std::vector< Contact > &to)
Set message To: contacts.
Definition Composer.C:40
Composer::setSubject
void setSubject(const WString &subject)
Set subject.
Definition Composer.C:45
Composer::subject
const WString & subject() const
Get the subject.
Definition Composer.C:75
Composer::setAddressBook
void setAddressBook(const std::vector< Contact > &addressBook)
Set the address book, for autocomplete suggestions.
Definition Composer.C:70
Composer::cc
std::vector< Contact > cc() const
Get the Cc: contacts.
Definition Composer.C:60
Composer::attachments
std::vector< Attachment > attachments() const
Get the list of attachments.
Definition Composer.C:80
Contact
An email contact.
Definition Contact.h:20