1 #include "thermostatwidget.h"\r
2 #include "globalsettings.h"\r
3 #include "utilities.h"\r
4 \r
5 \r
6 ThermostatWidget::ThermostatWidget(QWidget *parent) :\r
7 QWidget(parent)\r
8 {\r
9 m_globalSettings = GlobalSettings::getInstance();\r
10 \r
11 setObjectName("thermostatWidget");\r
12 setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);\r
13 setAttribute(Qt::WA_StyledBackground,true);\r
14 \r
15 // create new thermostat widget with default values in case internet options are disabled\r
16 setpointReached = false;\r
17 currentTemp = new QLabel("72°");\r
18 setpointTempInt = 72;\r
19 setpointTemp = new QLabel("");\r
20 setpointTemp->setMinimumWidth(77);\r
21 increaseTempButton = new QPushButton("+");\r
22 increaseTempButton->setFocusPolicy(Qt::NoFocus);\r
23 decreaseTempButton = new QPushButton("-");\r
24 decreaseTempButton->setFocusPolicy(Qt::NoFocus);\r
25 \r
26 currentTemp->setObjectName("currentTemp");\r
27 \r
28 currentTemp->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);\r
29 \r
30 setpointTemp->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);\r
31 increaseTempButton->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);\r
32 decreaseTempButton->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);\r
33 \r
34 // provide push button functionality\r
35 connect(increaseTempButton,SIGNAL(clicked()),this,SLOT(increaseTemp()));\r
36 connect(decreaseTempButton,SIGNAL(clicked()),this,SLOT(decreaseTemp()));\r
37 \r
38 // create layout\r
39 QHBoxLayout *setpointLayout = new QHBoxLayout;\r
40 setpointLayout->addWidget(decreaseTempButton);\r
41 setpointLayout->addWidget(setpointTemp);\r
42 setpointLayout->addWidget(increaseTempButton);\r
43 \r
44 QVBoxLayout *mainLayout = new QVBoxLayout;\r
45 mainLayout->addWidget(currentTemp);\r
46 mainLayout->addLayout(setpointLayout);\r
47 \r
48 // set layout\r
49 setLayout(mainLayout);\r
50 \r
51 // provide timer to let current temp follow set point\r
52 updateTimer = new QTimer(this);\r
53 connect(updateTimer,SIGNAL(timeout()),this,SLOT(update()));\r
54 connect(updateTimer, SIGNAL(timeout()), this, SIGNAL(timeout()));\r
55 updateTimer->start(10000);\r
56 }\r
57 \r
58 void ThermostatWidget::resizeEvent(QResizeEvent *e)\r
59 {\r
60 //scale the temperature size\r
61 currentTemp->setStyleSheet("font-size:"+QString::number(this->size().height()/2)+"px");\r
62 e->accept();\r
63 }\r
64 \r
65 void ThermostatWidget::increaseTemp()\r
66 {\r
67 // provide function to increase current setpoint\r
68 setpointTempInt++;\r
69 if (setpointTempInt == *currentTempInt) {\r
70 // setpoint should disappear when reached\r
71 setpointTemp->setText("");\r
72 setpointReached = true;\r
73 emit setpointIsReached(setpointReached);\r
74 } else {\r
75 setpointTemp->setText(formatTemperatureString(setpointTempInt, m_globalSettings->temperatureFormat()));\r
76 setpointReached = false;\r
77 emit setpointIsReached(setpointReached);\r
78 }\r
79 }\r
80 \r
81 void ThermostatWidget::decreaseTemp()\r
82 {\r
83 // provid functino to decrease current setpoint\r
84 setpointTempInt--;\r
85 if (setpointTempInt == *currentTempInt) {\r
86 // setpoint should disappear when reached\r
87 setpointTemp->setText("");\r
88 setpointReached = true;\r
89 emit setpointIsReached(setpointReached);\r
90 } else {\r
91 setpointTemp->setText(formatTemperatureString(setpointTempInt, m_globalSettings->temperatureFormat()));\r
92 setpointReached = false;\r
93 emit setpointIsReached(setpointReached);\r
94 }\r
95 }\r
96 \r
97 void ThermostatWidget::update()\r
98 {\r
99 // when timer fires (every 10 seconds), have current temperature approach setpoint temperature by one degree\r
100 if (*currentTempInt < setpointTempInt) {\r
101 (*currentTempInt)++;\r
102 }\r
103 if (*currentTempInt > setpointTempInt) {\r
104 (*currentTempInt)--;\r
105 }\r
106 currentTemp->setText(formatTemperatureString(*currentTempInt, m_globalSettings->temperatureFormat()));\r
107 // if setpoint is reached, have setpoint disappear\r
108 if (setpointTempInt == *currentTempInt) {\r
109 setpointTemp->setText("");\r
110 setpointReached = true;\r
111 emit setpointIsReached(setpointReached);\r
112 }\r
113 }\r
114 \r
115 void ThermostatWidget::updateUnit()\r
116 {\r
117 currentTemp->setText(formatTemperatureString(*currentTempInt, m_globalSettings->temperatureFormat()));\r
118 setpointTemp->setText(formatTemperatureString(setpointTempInt, m_globalSettings->temperatureFormat()));\r
119 update();\r
120 }\r
121 \r
122 void ThermostatWidget::setCurrentTempPtr(int *currentTemp)\r
123 {\r
124 currentTempInt = currentTemp;\r
125 updateUnit();\r
126 }\r
127 \r
128 QHash<QString, QVariant> ThermostatWidget::getCurrentData()\r
129 {\r
130 QHash<QString, QVariant> hash;\r
131 hash.insert("currentTemp", formatTemperatureString(*currentTempInt, m_globalSettings->temperatureFormat()));\r
132 hash.insert("setpointTemp", formatTemperatureString(setpointTempInt, m_globalSettings->temperatureFormat()));\r
133 return hash;\r
134 }\r
135 \r