Wt examples 3.3.12
Form.C
Go to the documentation of this file.
1#include "Form.h"
2
3#include <Wt/WApplication>
4#include <Wt/WBreak>
5#include <Wt/WDateEdit>
6#include <Wt/WSelectionBox>
7#include <Wt/WContainerWidget>
8#include <Wt/WImage>
9#include <Wt/WIntValidator>
10#include <Wt/WLabel>
11#include <Wt/WLineEdit>
12#include <Wt/WPushButton>
13#include <Wt/WTableCell>
14#include <Wt/WTextArea>
15#include <Wt/WText>
16
18 : WTable(parent)
19{
20 createUI();
21}
22
24{
25 WLabel *label;
26 int row = 0;
27
28 // Title
29 elementAt(row, 0)->setColumnSpan(3);
31 elementAt(row, 0)->setPadding(10);
32 WText *title = new WText(tr("example.form"),
33 elementAt(row, 0));
35
36 // error messages
37 ++row;
38 elementAt(row, 0)->setColumnSpan(3);
41
43 errorStyle.setForegroundColor(Wt::red);
44 errorStyle.font().setSize(WFont::Smaller);
45 errorStyle.font().setWeight(WFont::Bold);
46 errorStyle.font().setStyle(WFont::Italic);
47
48 // Name
49 ++row;
50 nameEdit_ = new WLineEdit(elementAt(row, 2));
51 label = new WLabel(tr("example.name"), elementAt(row, 0));
52 label->setBuddy(nameEdit_);
55
56 // First name
57 ++row;
58 firstNameEdit_ = new WLineEdit(elementAt(row, 2));
59 label = new WLabel(tr("example.firstname"), elementAt(row,0));
61
62 // Country
63 ++row;
64 countryEdit_ = new WComboBox(elementAt(row, 2));
66 countryEdit_->addItem("Belgium");
67 countryEdit_->addItem("Netherlands");
68 countryEdit_->addItem("United Kingdom");
69 countryEdit_->addItem("United States");
70 label = new WLabel(tr("example.country"), elementAt(row, 0));
71 label->setBuddy(countryEdit_);
74
75 // City
76 ++row;
77 cityEdit_ = new WComboBox(elementAt(row, 2));
78 cityEdit_->addItem(tr("example.choosecountry"));
79 label = new WLabel(tr("example.city"), elementAt(row, 0));
80 label->setBuddy(cityEdit_);
81
82 // Birth date
83 ++row;
84
85 birthDateEdit_ = new WDateEdit(elementAt(row, 2));
86 birthDateEdit_->setBottom(WDate(1900, 1, 1));
88 label = new WLabel(tr("example.birthdate"), elementAt(row, 0));
90 birthDateEdit_->setFormat("dd/MM/yyyy");
92
93 // Child count
94 ++row;
95 childCountEdit_ = new WLineEdit("0", elementAt(row, 2));
96 label = new WLabel(tr("example.childcount"),
97 elementAt(row, 0));
101
102 ++row;
103 remarksEdit_ = new WTextArea(elementAt(row, 2));
106 label = new WLabel(tr("example.remarks"),
107 elementAt(row, 0));
108 label->setBuddy(remarksEdit_);
109
110 // Submit
111 ++row;
112 WPushButton *submit = new WPushButton(tr("submit"),
113 elementAt(row, 0));
114 submit->clicked().connect(this, &Form::submit);
115 submit->setMargin(15, Top);
116 elementAt(row, 0)->setColumnSpan(3);
118
119 // Set column widths for label and validation icon
121 elementAt(2, 1)->resize(20, WLength::Auto);
122}
123
125{
126 cityEdit_->clear();
127 cityEdit_->addItem("");
129
130 switch (countryEdit_->currentIndex()) {
131 case 0:
132 break;
133 case 1:
134 cityEdit_->addItem("Antwerp");
135 cityEdit_->addItem("Brussels");
136 cityEdit_->addItem("Oekene");
137 break;
138 case 2:
139 cityEdit_->addItem("Amsterdam");
140 cityEdit_->addItem("Den Haag");
141 cityEdit_->addItem("Rotterdam");
142 break;
143 case 3:
144 cityEdit_->addItem("London");
145 cityEdit_->addItem("Bristol");
146 cityEdit_->addItem("Oxford");
147 cityEdit_->addItem("Stonehenge");
148 break;
149 case 4:
150 cityEdit_->addItem("Boston");
151 cityEdit_->addItem("Chicago");
152 cityEdit_->addItem("Los Angeles");
153 cityEdit_->addItem("New York");
154 break;
155 }
156}
157
158bool Form::checkValid(WFormWidget *edit, const WString& text)
159{
160 if (edit->validate() != WValidator::Valid) {
164 edit->setStyleClass("Wt-invalid");
165
166 return false;
167 } else {
169 edit->setStyleClass("");
170
171 return true;
172 }
173}
174
176{
178 bool valid = true;
179
180 if (!checkValid(nameEdit_, tr("error.name")))
181 valid = false;
182 if (!checkValid(countryEdit_, tr("error.country")))
183 valid = false;
184 if (!checkValid(birthDateEdit_, tr("error.birthdate")))
185 valid = false;
186 if (!checkValid(childCountEdit_, tr("error.childcount")))
187 valid = false;
188
189 return valid;
190}
191
193{
194 if (validate()) {
195 // do something useful with the data...
196 std::wstring name
197 = firstNameEdit_->text() + L" " + nameEdit_->text();
198
199 std::wstring remarks
200 = remarksEdit_->text();
201
202 clear();
203
204 new WText(WString::fromUTF8("<p>Thank you, {1}, "
205 "for all this precious data.</p>").arg(name),
206 elementAt(0, 0));
207
208 if (!remarks.empty())
209 new WText("<p>You had some remarks. Splendid !</p>", elementAt(0, 0));
210
211 wApp->quit();
212 }
213}
WLineEdit * firstNameEdit_
Definition Form.h:56
WComboBox * cityEdit_
Definition Form.h:59
Form(WContainerWidget *parent=0)
Instantiate a new form.
Definition Form.C:17
bool checkValid(WFormWidget *edit, const WString &text)
Validate a single form field.
Definition Form.C:158
WComboBox * countryEdit_
Definition Form.h:58
WDateEdit * birthDateEdit_
Definition Form.h:61
void countryChanged()
The user selected a new country: adjust the cities combo box.
Definition Form.C:124
void createUI()
Definition Form.C:23
WContainerWidget * feedbackMessages_
Definition Form.h:53
void submit()
Submit the form.
Definition Form.C:192
WLineEdit * childCountEdit_
Definition Form.h:62
WLineEdit * nameEdit_
Definition Form.h:55
WTextArea * remarksEdit_
Definition Form.h:65
bool validate()
Validate the form, and return whether succesfull.
Definition Form.C:175
Wt::Signals::connection connect(const F &function)
int currentIndex() const
void setCurrentIndex(int index)
void addItem(const WString &text)
virtual void addWidget(WWidget *widget)
virtual void clear()
void setContentAlignment(WFlags< AlignmentFlag > contentAlignment)
void setPadding(const WLength &padding, WFlags< Side > sides=All)
void setForegroundColor(WColor color)
void setBottom(const WDate &bottom)
void setFormat(const WString &format)
virtual WDateValidator * validator() const
void setTop(const WDate &top)
static WDate currentDate()
void setStyle(Style style)
void setSize(Size size, const WLength &length)
void setWeight(Weight weight, int value=400)
virtual WValidator * validator() const
WLabel * label() const
EventSignal & changed()
virtual WValidator::State validate()
void setValidator(WValidator *validator)
EventSignal & enterPressed()
void setBuddy(WFormWidget *buddy)
static WLength Auto
const WString & text() const
static WString fromUTF8(const std::string &value, bool checkValid=false)
void setColumnSpan(int colSpan)
virtual void clear()
WTableCell * elementAt(int row, int column)
const WString & text() const
void setRows(int rows)
void setColumns(int cols)
void setMandatory(bool how)
virtual void resize(const WLength &width, const WLength &height)
virtual WCssDecorationStyle & decorationStyle()
virtual void setStyleClass(const WString &styleClass)
static WString tr(const char *key)
AlignCenter
AlignTop

Generated on Fri May 17 2024 for the C++ Web Toolkit (Wt) by doxygen 1.9.8