1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
81
82
103
104
133
134
135
136
137
138
139
140
141
145
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
188
189
195
196
203
204
205
206
207
208
209
210
211
212
213
214
/* ... */
#include <gui/home_automation_screen/TemperatureScheduleMenuItem.hpp>
#include <touchgfx/Color.hpp>
TemperatureScheduleMenuItem::TemperatureScheduleMenuItem() :
onSelectionAreaPressed(this, &TemperatureScheduleMenuItem::selectionAreaPressedhandler),
onSliderUpdated(this, &TemperatureScheduleMenuItem::sliderUpdatedHandler)
{
background.setXY(0, 0);
background.setBitmap(Bitmap(BITMAP_TEMPERATURE_SCHEDULE_MENU_ITEM_ID));
weekdayText.setPosition(10, 7, 160, 30);
weekdayText.setTypedText(TypedText(T_TEMPERATURE_ROOM7));
daySelected.setXY(119, 0);
daySelected.setBitmap(Bitmap(BITMAP_TEMPERATURE_SCHEDULE_BUTTON_SELECTED_ID));
daySelected.setVisible(false);
daySelectArea.setPosition(daySelected.getX(), daySelected.getY(), daySelected.getWidth(), daySelected.getHeight());
daySelectArea.setAction(onSelectionAreaPressed);
nightSelected.setXY(daySelected.getX() + daySelected.getWidth() + 1, 0);
nightSelected.setBitmap(Bitmap(BITMAP_TEMPERATURE_SCHEDULE_BUTTON_SELECTED_ID));
nightSelected.setVisible(false);
nightSelectArea.setPosition(nightSelected.getX(), nightSelected.getY(), nightSelected.getWidth(), nightSelected.getHeight());
nightSelectArea.setAction(onSelectionAreaPressed);
dayTemperature.setPosition(daySelected.getX() + 3, 6, 46, 34);
dayTemperature.setTypedText(TypedText(T_TEMPERATURE_MENU));
dayTemperature.setWildcard(dayTemperatureTextBuffer);
nightTemperature.setPosition(dayTemperature.getX() + daySelected.getWidth(), 6, 46, 34);
nightTemperature.setTypedText(TypedText(T_TEMPERATURE_MENU));
nightTemperature.setWildcard(nightTemperatureTextBuffer);
Unicode::snprintf(dayTemperatureTextBuffer, 5, "%d", 1);
Unicode::snprintf(nightTemperatureTextBuffer, 5, "%d", 2);
itemSelectArea.setPosition(0, 0, daySelectArea.getX(), background.getHeight());
itemSelectArea.setAction(onSelectionAreaPressed);
currentSelectedIsDay = true;
setSelected(false);
add(background);
add(daySelected);
add(nightSelected);
add(weekdayText);
add(dayTemperature);
add(nightTemperature);
add(itemSelectArea);
add(daySelectArea);
add(nightSelectArea);
setWidth(background.getWidth());
setHeight(background.getHeight());
}{ ... }
TemperatureScheduleMenuItem::~TemperatureScheduleMenuItem()
{
}{ ... }
void TemperatureScheduleMenuItem::selectionAreaPressedhandler(const AbstractButton& button)
{
if (&button == &daySelectArea)
{
currentSelectedIsDay = true;
}if (&button == &daySelectArea) { ... }
else if (&button == &nightSelectArea)
{
currentSelectedIsDay = false;
}else if (&button == &nightSelectArea) { ... }
if (&button == &itemSelectArea && !selected)
{
currentSelectedIsDay = true;
}if (&button == &itemSelectArea && !selected) { ... }
if (menuItemSelectedCallback)
{
menuItemSelectedCallback->execute(*this);
}if (menuItemSelectedCallback) { ... }
}{ ... }
void TemperatureScheduleMenuItem::sliderUpdatedHandler(int16_t value)
{
if (currentSelectedIsDay)
{
if (value != dayTemperatureValue)
{
dayTemperatureValue = value;
updateTemperatureText();
if (valueUpdatedCallback)
{
valueUpdatedCallback->execute(*this);
}if (valueUpdatedCallback) { ... }
}if (value != dayTemperatureValue) { ... }
}if (currentSelectedIsDay) { ... }
else
{
if (value != nightTemperatureValue)
{
nightTemperatureValue = value;
updateTemperatureText();
if (valueUpdatedCallback)
{
valueUpdatedCallback->execute(*this);
}if (valueUpdatedCallback) { ... }
}if (value != nightTemperatureValue) { ... }
}else { ... }
}{ ... }
void TemperatureScheduleMenuItem::setSelected(bool sel)
{
if (sel && !selected)
{
slider->setValueChangedCallback(onSliderUpdated);
if (currentSelectedIsDay)
{
slider->setValue(dayTemperatureValue);
}if (currentSelectedIsDay) { ... }
else
{
slider->setValue(nightTemperatureValue);
}else { ... }
slider->invalidate();
}if (sel && !selected) { ... }
selected = sel;
if (selected)
{
background.setBitmap(Bitmap(BITMAP_TEMPERATURE_SCHEDULE_MENU_ITEM_SELECTED_ID));
weekdayText.setColor(Color::getColorFrom24BitRGB(0xFF, 0xFF, 0xFF));
dayTemperature.setColor(Color::getColorFrom24BitRGB(0xFF, 0xFF, 0xFF));
nightTemperature.setColor(Color::getColorFrom24BitRGB(0xFF, 0xFF, 0xFF));
daySelected.setVisible(currentSelectedIsDay);
nightSelected.setVisible(!currentSelectedIsDay);
slider->setValue(currentSelectedIsDay ? dayTemperatureValue : nightTemperatureValue);
}if (selected) { ... }
else
{
background.setBitmap(Bitmap(BITMAP_TEMPERATURE_SCHEDULE_MENU_ITEM_ID));
weekdayText.setColor(Color::getColorFrom24BitRGB(0xA9, 0xAD, 0xB6));
dayTemperature.setColor(Color::getColorFrom24BitRGB(0xA9, 0xAD, 0xB6));
nightTemperature.setColor(Color::getColorFrom24BitRGB(0xA9, 0xAD, 0xB6));
daySelected.setVisible(false);
nightSelected.setVisible(false);
}else { ... }
background.invalidate();
weekdayText.invalidate();
dayTemperature.invalidate();
nightTemperature.invalidate();
}{ ... }
void TemperatureScheduleMenuItem::setWeekday(RoomTemperatureInfo::weekday day)
{
weekday = day;
weekdayText.setTypedText(TypedText(T_TEMPERATURE_MONDAY + (uint8_t)day));
weekdayText.invalidate();
}{ ... }
void TemperatureScheduleMenuItem::setRoomTemperatureInfo(RoomTemperatureInfo& info)
{
dayTemperatureValue = info.getScheduleDayTemp(weekday);
nightTemperatureValue = info.getScheduleNightTemp(weekday);
updateTemperatureText();
}{ ... }
void TemperatureScheduleMenuItem::updateTemperatureText()
{
Unicode::snprintf(dayTemperatureTextBuffer, 5, "%d", dayTemperatureValue);
Unicode::snprintf(nightTemperatureTextBuffer, 5, "%d", nightTemperatureValue);
dayTemperature.invalidate();
nightTemperature.invalidate();
}{ ... }
void TemperatureScheduleMenuItem::setAlpha(int16_t alpha)
{
alpha = (alpha < 0) ? 0 : alpha;
alpha = (alpha > 255) ? 255 : alpha;
weekdayText.setAlpha((uint8_t) alpha);
dayTemperature.setAlpha((uint8_t) alpha);
nightTemperature.setAlpha((uint8_t) alpha);
slider->setAlpha((uint8_t) alpha);
invalidate();
}{ ... }