Wt examples  3.7.1
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);
30  elementAt(row, 0)->setContentAlignment(AlignTop | AlignCenter);
31  elementAt(row, 0)->setPadding(10);
32  WText *title = new WText(tr("example.form"),
33  elementAt(row, 0));
34  title->decorationStyle().font().setSize(WFont::XLarge);
35 
36  // error messages
37  ++row;
38  elementAt(row, 0)->setColumnSpan(3);
39  feedbackMessages_ = elementAt(row, 0);
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_);
53  nameEdit_->setValidator(new WValidator(true));
55 
56  // First name
57  ++row;
58  firstNameEdit_ = new WLineEdit(elementAt(row, 2));
59  label = new WLabel(tr("example.firstname"), elementAt(row,0));
60  label->setBuddy(firstNameEdit_);
61 
62  // Country
63  ++row;
64  countryEdit_ = new WComboBox(elementAt(row, 2));
65  countryEdit_->addItem("");
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));
87  birthDateEdit_->setTop(WDate::currentDate());
88  label = new WLabel(tr("example.birthdate"), elementAt(row, 0));
89  label->setBuddy(birthDateEdit_);
90  birthDateEdit_->setFormat("dd/MM/yyyy");
91  birthDateEdit_->validator()->setMandatory(true);
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));
98  label->setBuddy(childCountEdit_);
100  childCountEdit_->validator()->setMandatory(true);
101 
102  ++row;
103  remarksEdit_ = new WTextArea(elementAt(row, 2));
105  remarksEdit_->setRows(5);
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);
117  elementAt(row, 0)->setContentAlignment(AlignTop | AlignCenter);
118 
119  // Set column widths for label and validation icon
120  elementAt(2, 0)->resize(WLength(30, WLength::FontEx), WLength::Auto);
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 
158 bool Form::checkValid(WFormWidget *edit, const WString& text)
159 {
160  if (edit->validate() != WValidator::Valid) {
161  feedbackMessages_->addWidget(new WText(text));
163  edit->label()->decorationStyle().setForegroundColor(Wt::red);
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 }
virtual void setStyleClass(const WString &styleClass) override
bool validate()
Validate the form, and return whether succesfull.
Definition: Form.C:175
void submit()
Submit the form.
Definition: Form.C:192
const WString & text() const
virtual WCssDecorationStyle & decorationStyle() override
virtual std::shared_ptr< WValidator > validator() const
EventSignal< WMouseEvent > & clicked()
void countryChanged()
The user selected a new country: adjust the cities combo box.
Definition: Form.C:124
void setStyle(FontStyle style)
static WString tr(const char *key)
void addItem(const WString &text)
void setPadding(const WLength &padding, WFlags< Side > sides=AllSides)
Form(WContainerWidget *parent=0)
Instantiate a new form.
Definition: Form.C:17
void setFormat(const WString &format)
void setSize(FontSize size)
void setContentAlignment(WFlags< AlignmentFlag > contentAlignment)
WLineEdit * firstNameEdit_
Definition: Form.h:56
void setWeight(FontWeight weight, int value=400)
void setBuddy(WFormWidget *buddy)
virtual void setMargin(const WLength &margin, WFlags< Side > sides=AllSides) override
WTableCell * elementAt(int row, int column)
virtual void clear()
void setTop(const WDate &top)
void setValidator(const std::shared_ptr< WValidator > &validator)
void setCurrentIndex(int index)
void setColumns(int cols)
WComboBox * countryEdit_
Definition: Form.h:58
WContainerWidget * feedbackMessages_
Definition: Form.h:53
void createUI()
Definition: Form.C:23
void setColumnSpan(int colSpan)
WLineEdit * childCountEdit_
Definition: Form.h:62
void setForegroundColor(WColor color)
bool checkValid(WFormWidget *edit, const WString &text)
Validate a single form field.
Definition: Form.C:158
virtual void resize(const WLength &width, const WLength &height) override
const WString & text() const
WComboBox * cityEdit_
Definition: Form.h:59
int currentIndex() const
EventSignal & enterPressed()
EventSignal & changed()
WTextArea * remarksEdit_
Definition: Form.h:65
Wt::Signals::connection connect(F function)
WDateEdit * birthDateEdit_
Definition: Form.h:61
void setRows(int rows)
void setBottom(const WDate &bottom)
WLineEdit * nameEdit_
Definition: Form.h:55
WLabel * label() const
virtual void addWidget(std::unique_ptr< WWidget > widget)
virtual void clear()
virtual ValidationState validate()

Generated on Tue Dec 15 2020 for the C++ Web Toolkit (Wt) by doxygen 1.8.13