12
12
#include " WebServer.h"
13
13
14
14
const PROGMEM char AT_WIDGET_TEMPLATE[] =
15
- " <div style=\" background-color:#%06x;border-color:#%06x;color:#%06x;font-size:%ipt;font-weight:%s;text-align:center;width:%i%%;float:%s;\" >"
16
- " <div style='padding:5px;'>" ;
15
+ " <button type='submit' name='widget' value=%i style=\" border:none; background-color:#%06x;border-color:#%06x;color:#%06x;font-size:%ipt;font-weight:%s;text-align:center;width:%i%%;float:%s;\" >\n "
16
+ " <div style='padding:5px;'>\n " ;
17
17
18
18
const PROGMEM char HTML_HEADER[] =
19
- " <!DOCTYPE HTML>"
20
- " <html>"
21
- " <head>"
22
- " <meta name = \" viewport\" content = \" width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0>\" >"
23
- " <meta http-equiv=\" content-type\" content=\" text/html; charset=UTF-8\" >"
24
- " <title>Smart Home</title>"
25
- " <style>"
26
- " body { background-color: #d2f3eb; font-family: Arial, Helvetica, Sans-Serif; Color: #000000;font-size:12pt;width:800px; }"
27
- " th { background-color: #b6c0db; color: #050ed2;font-weight:lighter;font-size:10pt;}"
28
- " table, th, td {border: 1px solid black;}"
29
- " .titel {font-size:18pt;font-weight:bold;text-align:center;} "
30
- " </style>" ;
19
+ " <!DOCTYPE HTML>\n "
20
+ " <html>\n "
21
+ " <head>\n "
22
+ " <meta name = \" viewport\" content = \" width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0>\" >\n "
23
+ " <meta http-equiv=\" content-type\" content=\" text/html; charset=UTF-8\" >\n "
24
+ " <title>Smart Home</title>\n "
25
+ " <style>\n "
26
+ " body { background-color: #d2f3eb; font-family: Arial, Helvetica, Sans-Serif; Color: #000000;font-size:12pt;width:800px; }\n "
27
+ " th { background-color: #b6c0db; color: #050ed2;font-weight:lighter;font-size:10pt;}\n "
28
+ " table, th, td {border: 1px solid black;}\n "
29
+ " .titel {font-size:18pt;font-weight:bold;text-align:center;} \n "
30
+ " </style>\n " ;
31
31
32
32
const PROGMEM char HTML_HEADER_END[] =
33
- " </head>"
34
- " <body><div id='main_div' style='margin-left:15px;margin-right:15px;'>" ;
33
+ " </head>\n "
34
+ " <body><div id='main_div' style='margin-left:15px;margin-right:15px;'>\n " ;
35
35
const PROGMEM char HTML_END[] =
36
- " </body></html>" ;
36
+ " </body></html>\n " ;
37
37
const PROGMEM char HTML_SCRIPT[] =
38
- " <script language=\" javascript\" >"
39
- " function reload() {"
40
- " document.location=\" http://%s\" ;}"
41
- " function setWidth() {"
42
- " var x = screen.width;"
43
- " if (x<800) document.getElementById('main_div').style.width = (x-50) + 'px';}"
44
- " </script>" ;
38
+ " <script language=\" javascript\" >\n "
39
+ " function reload() {\n "
40
+ " document.location=\" http://%s\" ;}\n "
41
+ " function setWidth() {\n "
42
+ " var x = screen.width;\n "
43
+ " if (x<800) document.getElementById('main_div').style.width = (x-50) + 'px';}\n "
44
+ " </script>\n " ;
45
45
const PROGMEM char HTML_END_RELOAD[] =
46
- " </div><script language=\" javascript\" >setTimeout(reload, %i);</script></body>"
47
- " </html>" ;
48
- const PROGMEM char HTML_SET_WIDTH[] =
49
- " </div><script language=\" javascript\" >setWidth();</script></body>"
50
- " </html>" ;
46
+ " </div><script language=\" javascript\" >setWidth(); setTimeout(reload, %i);</script></body>\n "
47
+ " </html>\n " ;
51
48
52
49
53
50
@@ -65,6 +62,15 @@ void AT_Webserver::handleClient(){
65
62
}
66
63
67
64
void AT_Webserver::handleRoot (uint8_t refresh){
65
+ // first check arguments to perform actions
66
+ if (_server->hasArg (" widget" )){
67
+ uint16_t id = _server->arg (" widget" ).toInt ();
68
+ ATCURVALUES res = _database->getResult (id);
69
+ if (res.type == ATTYPE_SWITCHOUT) {
70
+ _database->toggleResult (id);
71
+ if (_onResultChange) _onResultChange (id);
72
+ }
73
+ }
68
74
char tmp1[20 ];
69
75
char htmlbuf[256 ];
70
76
_server->setContentLength (CONTENT_LENGTH_UNKNOWN);
@@ -75,14 +81,13 @@ void AT_Webserver::handleRoot(uint8_t refresh){
75
81
sprintf (htmlbuf,HTML_SCRIPT,tmp1);
76
82
_server->sendContent (htmlbuf);
77
83
_server->sendContent (HTML_HEADER_END);
78
- _server->sendContent (" <div class=\" titel\" >ArduiTouch Smart Home</div><form method= \" post \" > " );
84
+ _server->sendContent (" <div class=\" titel\" >ArduiTouch Smart Home</div>\n " );
79
85
80
86
sendResults ();
81
87
// Das Formular mit den Eingabefeldern wird mit den aktuellen Werten befüllt
82
88
// sprintf(htmlbuf,HTML_CONFIG,txtSSID,txtPassword,txtUser,txtPwd,txtId);
83
89
// und an den Browsewr gesendet
84
90
// server->sendContent("<h1>SMART Home</h1>");
85
- _server->sendContent (HTML_SET_WIDTH);
86
91
sprintf (htmlbuf,HTML_END_RELOAD,refresh*1000 );
87
92
_server->sendContent (htmlbuf);
88
93
@@ -117,6 +122,7 @@ void AT_Webserver::sendResults(){
117
122
x = 0 ; y = 0 ;
118
123
ATDISPLAYPAGE pg;
119
124
ATDISPLAYWIDGET wdg;
125
+ _server->sendContent (" <form method='post'>\n " );
120
126
for (uint8_t p = 0 ; p<ATMAXPAGES; p++) {
121
127
pg = _database->getPage (p);
122
128
for (uint8_t i = 0 ;i<ATWIDGETSPERPAGE;i++) {
@@ -128,6 +134,7 @@ void AT_Webserver::sendResults(){
128
134
}
129
135
}
130
136
}
137
+ _server->sendContent (" </form>\n " );
131
138
132
139
}
133
140
@@ -159,7 +166,7 @@ void AT_Webserver::sendSimpleWidget(ATDISPLAYWIDGET wdg){
159
166
case ATWIDGET_LEFT: iflo=1 ; width = 50 ; break ;
160
167
case ATWIDGET_RIGHT: iflo=2 ; width = 50 ; break ;
161
168
}
162
- sprintf (htmlbuf,AT_WIDGET_TEMPLATE,convertColor (fill),convertColor (wdg.bgcolor ),convertColor (wdg.fontcolor ),15 ,weight[iwgt],width,flo[iflo]);
169
+ sprintf (htmlbuf,AT_WIDGET_TEMPLATE,wdg. source , convertColor (fill),convertColor (wdg.bgcolor ),convertColor (wdg.fontcolor ),15 ,weight[iwgt],width,flo[iflo]);
163
170
_server->sendContent (htmlbuf);
164
171
if (wdg.size == ATWIDGET_SMALL) {
165
172
msg = wdg.label + " " + val;
@@ -170,5 +177,9 @@ void AT_Webserver::sendSimpleWidget(ATDISPLAYWIDGET wdg){
170
177
String msg = wdg.label +" " +val;
171
178
_server->sendContent (val);
172
179
}
173
- _server->sendContent (" </div></div>" );
180
+ _server->sendContent (" </div></button>\n " );
181
+ }
182
+ // register a callback function result change event
183
+ void AT_Webserver::registerOnResultChange (void (*callback)(uint16_t index)){
184
+ _onResultChange = callback;
174
185
}
0 commit comments