Wt examples  4.10.0
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< Attachmentattachments ()
 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

Composercomposer_
 
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)
 
Optionremove_
 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),
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}
void remove()
Slot triggered when the users wishes to remove this attachment edit.
WText * error_
The text box to display an error (empty or too big file)
Composer * composer_
Option * remove_
The option to cancel the file upload.
bool uploadFailed_
The state of the last upload process.
void uploaded()
Slot triggered when the WFileUpload completed an upload.
WFileUpload * upload_
The WFileUpload control.
void fileTooLarge(::int64_t size)
Slot triggered when the WFileUpload received an oversized file.
void attachmentDone()
Slotcalled when an attachment has been uploaded.
Definition Composer.C:338
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}
std::vector< UploadInfo * > uploadInfo_
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{
174}
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: