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