powersync-plugins/unipi/dimmerswitch.cpp

91 lines
1.9 KiB
C++

#include "dimmerswitch.h"
DimmerSwitch::DimmerSwitch(QObject *parent) : QObject(parent)
{
m_longPressedTimer = new QTimer(this);
m_longPressedTimer->setSingleShot(true);
connect(m_longPressedTimer, SIGNAL(timeout()), this, SLOT(onLongPressedTimeout()));
m_doublePressedTimer = new QTimer(this);
m_doublePressedTimer->setSingleShot(true);
m_dimmerTimer = new QTimer(this);
connect(m_dimmerTimer, SIGNAL(timeout()), this, SLOT(onDimmerTimeout()));
}
DimmerSwitch::~DimmerSwitch()
{
m_longPressedTimer->deleteLater();
m_doublePressedTimer->deleteLater();
m_dimmerTimer->deleteLater();
}
void DimmerSwitch::setPower(const bool power)
{
if (m_power == power) {
return;
}
m_power = power;
if(power){
m_dimmerTimer->start(250);
m_longPressedTimer->start(2000);
if (m_doublePressedTimer->isActive()) {
m_doublePressedTimer->stop();
emit doublePressed();
} else {
m_doublePressedTimer->start(1000);
emit pressed();
}
} else {
m_dimmerTimer->stop();
m_longPressedTimer->stop();
}
}
bool DimmerSwitch::getPower()
{
return m_power;
}
void DimmerSwitch::setDimValue(const int dimValue)
{
m_dimValue = dimValue;
emit dimValueChanged(m_dimValue);
}
int DimmerSwitch::getDimValue()
{
return m_dimValue;
}
void DimmerSwitch::onDimmerTimeout()
{
if(!m_longPressedTimer->isActive()) {
if (m_countingUp) {
m_dimValue += 5;
if(m_dimValue >= 100) {
m_dimValue = 100;
m_countingUp = false;
}
} else {
m_dimValue -= 5;
if(m_dimValue <= 0) {
m_dimValue = 0;
m_countingUp = true;
}
}
emit dimValueChanged(m_dimValue);
}
}
void DimmerSwitch::onLongPressedTimeout()
{
emit longPressed();
}