Wt examples: AttachmentEdit Class Reference

Wt examples 4.10.4

Loading...
Searching...
No Matches
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
AttachmentEdit Class Reference

An edit field for an email attachment. More...

`#include <AttachmentEdit.h>`

Inheritance diagram for AttachmentEdit:
[legend]

## Classes
class | UploadInfo

## Public Member Functions
| AttachmentEdit (Composer *composer)
| Creates an attachment edit field.
bool | uploadNow ()
| Updates the file now.
bool | uploadFailed () const
| Returns whether the upload failed.
std::vector< Attachment > | attachments ()
| Returns the attachment.
Signal & | uploadDone ()
| Signal emitted when new attachment(s) have been uploaded (or failed to upload.

## Private Member Functions
void | uploaded ()
| Slot triggered when the WFileUpload completed an upload.
void | fileTooLarge (::int64_t size)
| Slot triggered when the WFileUpload received an oversized file.
void | remove ()
| Slot triggered when the users wishes to remove this attachment edit.

## Private Attributes
Composer * | composer_
Signal | uploadDone_
WFileUpload * | upload_
| The WFileUpload control.
std::vector< UploadInfo * > | uploadInfo_
WText * | error_
| The text box to display an error (empty or too big file)
Option * | remove_
| The option to cancel the file upload.
bool | uploadFailed_
| The state of the last upload process.

## Detailed Description

An edit field for an email attachment.

This widget manages one attachment edit: it shows a file upload control, handles the upload, and gives feed-back on the file uploaded.

This widget is part of the Wt composer example.

Definition at line 37 of file AttachmentEdit.h.

## Constructor & Destructor Documentation

## ◆ AttachmentEdit()

AttachmentEdit::AttachmentEdit | ( | Composer * | composer | ) |

Creates an attachment edit field.

Definition at line 68 of file AttachmentEdit.C.

69 : WContainerWidget(),
70 composer_(composer),
71 uploadDone_(),
72 uploadFailed_(false)
73{
74 /*
75 * The file upload itself.
76 */
77 upload_ = this->addWidget(std::make_unique<WFileUpload>());
78 upload_->setMultiple(true);
79 upload_->setFileTextSize(40);
80
81 /*
82 * A progress bar
83 */
84 std::unique_ptr<WProgressBar> progress = std::make_unique<WProgressBar>();
85 progress->setFormat(WString::Empty);
86 progress->setVerticalAlignment(AlignmentFlag::Middle);
87 upload_->setProgressBar(std::move(progress));
88
89 /*
90 * The 'remove' option.
91 */
92 remove_ = this->addWidget(std::make_unique<Option>(tr("msg.remove")));
93 upload_->decorationStyle().font().setSize(FontSize::Smaller);
94 upload_->setVerticalAlignment(AlignmentFlag::Middle);
95 remove_->setMargin(5, Side::Left);
96 remove_->item()->clicked().connect(this, &WWidget::hide);
97 remove_->item()->clicked().connect(this, &AttachmentEdit::remove);
98
99 // The error message.
100 error_ = this->addWidget(std::make_unique<WText>(""));
101 error_->setStyleClass("error");
102 error_->setMargin(WLength(5), Side::Left);
103
104 /*
105 * React to events.
106 */
107
108 // Try to catch the fileupload change signal to trigger an upload.
109 // We could do like google and at a delay with a WTimer as well...
110 upload_->changed().connect(upload_, &WFileUpload::upload);
111
112 // React to a succesfull upload.
113 upload_->uploaded().connect(this, &AttachmentEdit::uploaded);
114
115 // React to a fileupload problem.
116 upload_->fileTooLarge().connect(this, &AttachmentEdit::fileTooLarge);
117
118 /*
119 * Connect the uploadDone signal to the Composer's attachmentDone,
120 * so that the Composer can keep track of attachment upload progress,
121 * if it wishes.
122 */
123 uploadDone_.connect(composer, &Composer::attachmentDone);
124}
AttachmentEdit::remove
void remove()
Slot triggered when the users wishes to remove this attachment edit.
Definition AttachmentEdit.C:171
AttachmentEdit::error_
WText * error_
The text box to display an error (empty or too big file)
Definition AttachmentEdit.h:90
AttachmentEdit::composer_
Composer * composer_
Definition AttachmentEdit.h:66
AttachmentEdit::remove_
Option * remove_
The option to cancel the file upload.
Definition AttachmentEdit.h:93
AttachmentEdit::uploadDone_
Signal uploadDone_
Definition AttachmentEdit.h:68
AttachmentEdit::uploadFailed_
bool uploadFailed_
The state of the last upload process.
Definition AttachmentEdit.h:96
AttachmentEdit::uploaded
void uploaded()
Slot triggered when the WFileUpload completed an upload.
Definition AttachmentEdit.C:142
AttachmentEdit::upload_
WFileUpload * upload_
The WFileUpload control.
Definition AttachmentEdit.h:71
AttachmentEdit::fileTooLarge
void fileTooLarge(::int64_t size)
Slot triggered when the WFileUpload received an oversized file.
Definition AttachmentEdit.C:176
Composer::attachmentDone
void attachmentDone()
Slotcalled when an attachment has been uploaded.
Definition Composer.C:338
Option::item
WInteractWidget * item()
Returns the clickable part.
Definition Option.h:44

## Member Function Documentation

## ◆ attachments()

std::vector< Attachment > AttachmentEdit::attachments | ( |  | ) |

Returns the attachment.

Definition at line 189 of file AttachmentEdit.C.

190{
191 std::vector<Attachment> result;
192
193 for (unsigned i = 0; i < uploadInfo_.size(); ++i) {
194 if (uploadInfo_[i]->keep_->isChecked()) {
195 Http::UploadedFile& f = uploadInfo_[i]->info_;
196 f.stealSpoolFile();
197 result.push_back(Attachment
198 (WString(f.clientFileName()),
199 WString(f.contentType()),
200 f.spoolFileName()));
201 }
202 }
203
204 return result;
205}
AttachmentEdit::uploadInfo_
std::vector< UploadInfo * > uploadInfo_
Definition AttachmentEdit.h:87
Attachment
An email attachment.
Definition Attachment.h:20

## ◆ fileTooLarge()

void AttachmentEdit::fileTooLarge | ( | ::int64_t | size | ) |
| private

Slot triggered when the WFileUpload received an oversized file.

Definition at line 176 of file AttachmentEdit.C.

177{
178 error_->setText(tr("msg.file-too-large")
179 .arg(size / 1024)
180 .arg(WApplication::instance()->maximumRequestSize() / 1024));
181 uploadFailed_ = true;
182
183 /*
184 * Signal to the Composer that a new asyncrhonous file upload was processed.
185 */
186 uploadDone_.emit();
187}

## ◆ remove()

void AttachmentEdit::remove | ( |  | ) |
| private

Slot triggered when the users wishes to remove this attachment edit.

Definition at line 171 of file AttachmentEdit.C.

172{
173 composer_->removeAttachment(this);
174}
Composer::removeAttachment
void removeAttachment(AttachmentEdit *attachment)
Remove the given attachment edit.
Definition Composer.C:271

## ◆ uploadDone()

Signal & AttachmentEdit::uploadDone | ( |  | ) |
| inline

Signal emitted when new attachment(s) have been uploaded (or failed to upload.

Definition at line 63 of file AttachmentEdit.h.

63{ return uploadDone_; }

## ◆ uploaded()

void AttachmentEdit::uploaded | ( |  | ) |
| private

Slot triggered when the WFileUpload completed an upload.

Definition at line 142 of file AttachmentEdit.C.

143{
144 std::vector<Http::UploadedFile> files = upload_->uploadedFiles();
145
146 if (!files.empty()) {
147 /*
148 * Delete this widgets since we have a succesfull upload.
149 */
150 upload_ = 0;
151 this->removeWidget(remove_);
152 remove_ = 0;
153 this->removeWidget(error_);
154 error_ = 0;
155
156 for (unsigned i = 0; i < files.size(); ++i) {
157 UploadInfo *info = this->addWidget(std::make_unique<UploadInfo>(files[i]));
158 uploadInfo_.push_back(info);
159 }
160 } else {
161 error_->setText(tr("msg.file-empty"));
162 uploadFailed_ = true;
163 }
164
165 /*
166 * Signal to the Composer that a new asynchronous file upload was processed.
167 */
168 uploadDone_.emit();
169}

## ◆ uploadFailed()

bool AttachmentEdit::uploadFailed | ( |  | ) | const
| inline

Returns whether the upload failed.

Definition at line 54 of file AttachmentEdit.h.

54{ return uploadFailed_; }

## ◆ uploadNow()

bool AttachmentEdit::uploadNow | ( |  | ) |

Updates the file now.

Returns whether a new file will be uploaded. If so, the uploadDone signal will be signalled when the file is uploaded (or failed to upload).

Definition at line 126 of file AttachmentEdit.C.

127{
128 /*
129 * See if this attachment still needs to be uploaded,
130 * and return if a new asynchronous upload is started.
131 */
132 if (upload_) {
133 if (upload_->canUpload()) {
134 upload_->upload();
135 return true;
136 } else
137 return false;
138 } else
139 return false;
140}

## Member Data Documentation

## ◆ composer_

Composer* AttachmentEdit::composer_
| private

Definition at line 66 of file AttachmentEdit.h.

## ◆ error_

WText* AttachmentEdit::error_
| private

The text box to display an error (empty or too big file)

Definition at line 90 of file AttachmentEdit.h.

## ◆ remove_

Option* AttachmentEdit::remove_
| private

The option to cancel the file upload.

Definition at line 93 of file AttachmentEdit.h.

## ◆ upload_

WFileUpload* AttachmentEdit::upload_
| private

The WFileUpload control.

Definition at line 71 of file AttachmentEdit.h.

## ◆ uploadDone_

Signal AttachmentEdit::uploadDone_
| private

Definition at line 68 of file AttachmentEdit.h.

## ◆ uploadFailed_

bool AttachmentEdit::uploadFailed_
| private

The state of the last upload process.

Definition at line 96 of file AttachmentEdit.h.

## ◆ uploadInfo_

std::vector<UploadInfo *> AttachmentEdit::uploadInfo_
| private

Definition at line 87 of file AttachmentEdit.h.

The documentation for this class was generated from the following files:

- composer/AttachmentEdit.h
- composer/AttachmentEdit.C