1 /*
2 * Copyright (C) 2008 Emweb bv, Herent, Belgium.
3 *
4 * See the LICENSE file for terms of use.
5 */
6
7 #include <Wt/WLineEdit.h>
8 #include <Wt/WIntValidator.h>
9 #include <Wt/WText.h>
10 #include <Wt/WPushButton.h>
11 #include <Wt/WApplication.h>
12 #include <Wt/WBreak.h>
13
14 #include "RoundedWidget.h"
15 #include "StyleExample.h"
16
17 char loremipsum[] = "Lorem ipsum dolor sit amet, consectetur adipisicing "
18 "elit, sed do eiusmod tempor incididunt ut labore et "
19 "dolore magna aliqua. Ut enim ad minim veniam, quis "
20 "nostrud exercitation ullamco laboris nisi ut aliquip "
21 "ex ea commodo consequat. Duis aute irure dolor in "
22 "reprehenderit in voluptate velit esse cillum dolore eu "
23 "fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
24 "non proident, sunt in culpa qui officia deserunt mollit "
25 "anim id est laborum.";
26
StyleExample()27 StyleExample::StyleExample()
28 : WContainerWidget()
29 {
30 w_ = this->addWidget(std::make_unique<RoundedWidget>());
31
32 w_->contents()->addWidget(std::make_unique<WText>(loremipsum));
33 this->addWidget(std::make_unique<WBreak>());
34
35 this->addWidget(std::make_unique<WText>("Color (rgb): "));
36 r_ = createValidateLineEdit(w_->backgroundColor().red(), 0, 255);
37 g_ = createValidateLineEdit(w_->backgroundColor().green(), 0, 255);
38 b_ = createValidateLineEdit(w_->backgroundColor().blue(), 0, 255);
39
40 this->addWidget(std::make_unique<WBreak>());
41
42 this->addWidget(std::make_unique<WText>("Radius (px): "));
43 radius_ = createValidateLineEdit(w_->cornerRadius(), 1, 500);
44
45 this->addWidget(std::make_unique<WBreak>());
46
47 WPushButton *p = this->addWidget(std::make_unique<WPushButton>("Update!"));
48 p->clicked().connect(this, &StyleExample::updateStyle);
49
50 this->addWidget(std::make_unique<WBreak>());
51
52 error_ = this->addWidget(std::make_unique<WText>(""));
53 }
54
createValidateLineEdit(int value,int min,int max)55 WLineEdit *StyleExample::createValidateLineEdit(int value, int min, int max)
56 {
57 WLineEdit *le = this->addWidget(std::make_unique<WLineEdit>(std::to_string(value)));
58 le->setTextSize(3);
59 le->setValidator(std::make_shared<WIntValidator>(min,max));
60
61 return le;
62 }
63
updateStyle()64 void StyleExample::updateStyle()
65 {
66 if ((r_->validate() != ValidationState::Valid)
67 || (g_->validate() != ValidationState::Valid)
68 || (b_->validate() != ValidationState::Valid))
69 error_->setText("Color components must be numbers between 0 and 255.");
70 else if (radius_->validate() != ValidationState::Valid)
71 error_->setText("Radius must be between 1 and 500.");
72 else {
73 int r = std::atoi(r_->text().toUTF8().c_str());
74 int g = std::atoi(g_->text().toUTF8().c_str());
75 int b = std::atoi(b_->text().toUTF8().c_str());
76 int radius = std::atoi(radius_->text().toUTF8().c_str());
77 w_->setBackgroundColor(WColor(r, g, b));
78 w_->setCornerRadius(radius);
79 error_->setText("");
80 }
81 }
82
createApplication(const WEnvironment & env)83 std::unique_ptr<WApplication> createApplication(const WEnvironment& env)
84 {
85 std::unique_ptr<WApplication> app
86 = std::make_unique<WApplication>(env);
87 app->setTitle("Style example");
88
89 app->root()->addWidget(std::make_unique<StyleExample>());
90 return app;
91 }
92
main(int argc,char ** argv)93 int main(int argc, char **argv)
94 {
95 return WRun(argc, argv, &createApplication);
96 }
97