Wt examples  3.3.6
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 
17 Form::Form(WContainerWidget *parent)
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);
40  feedbackMessages_->setPadding(5);
41 
42  WCssDecorationStyle& errorStyle = feedbackMessages_->decorationStyle();
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));
54  nameEdit_->enterPressed().connect(this, &Form::submit);
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_);
72  countryEdit_->setValidator(new WValidator(true));
73  countryEdit_->changed().connect(this, &Form::countryChanged);
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_);
99  childCountEdit_->setValidator(new WIntValidator(0,30));
100  childCountEdit_->validator()->setMandatory(true);
101 
102  ++row;
103  remarksEdit_ = new WTextArea(elementAt(row, 2));
104  remarksEdit_->setColumns(40);
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("");
128  cityEdit_->setCurrentIndex(-1);
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 Angelos");
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));
162  feedbackMessages_->addWidget(new WBreak());
163  edit->label()->decorationStyle().setForegroundColor(Wt::red);
164  edit->setStyleClass("Wt-invalid");
165 
166  return false;
167  } else {
168  edit->label()->decorationStyle().setForegroundColor(WColor());
169  edit->setStyleClass("");
170 
171  return true;
172  }
173 }
174 
176 {
177  feedbackMessages_->clear();
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 }
bool validate()
Validate the form, and return whether succesfull.
Definition: Form.C:175
void submit()
Submit the form.
Definition: Form.C:192
void countryChanged()
The user selected a new country: adjust the cities combo box.
Definition: Form.C:124
Form(WContainerWidget *parent=0)
Instantiate a new form.
Definition: Form.C:17
WLineEdit * firstNameEdit_
Definition: Form.h:56
WComboBox * countryEdit_
Definition: Form.h:58
WContainerWidget * feedbackMessages_
Definition: Form.h:53
void createUI()
Definition: Form.C:23
WLineEdit * childCountEdit_
Definition: Form.h:62
bool checkValid(WFormWidget *edit, const WString &text)
Validate a single form field.
Definition: Form.C:158
WComboBox * cityEdit_
Definition: Form.h:59
WTextArea * remarksEdit_
Definition: Form.h:65
WDateEdit * birthDateEdit_
Definition: Form.h:61
WLineEdit * nameEdit_
Definition: Form.h:55

Generated on Thu Jan 12 2017 for the C++ Web Toolkit (Wt) by doxygen 1.8.12