109 lines
2.1 KiB
C++
109 lines
2.1 KiB
C++
#include "touch_butt.h"
|
|
|
|
touch_butt::touch_butt(int butt_index, QString caption, QColor colr, QColor colg, QColor colw, QColor colp, QPushButton * parent) : QPushButton(parent)
|
|
{
|
|
cr = colr; cg = colg; cw = colw; cp = colp;
|
|
aim_col = this->palette().button().color();
|
|
next_col = aim_col;
|
|
index = butt_index;
|
|
this->setText(caption);
|
|
connect(this,SIGNAL(pressed()),SLOT(butt_push()));
|
|
connect(this,SIGNAL(clicked()),SLOT(butt_click()));
|
|
connect(this,SIGNAL(toggled(bool)),SLOT(butt_toggle(bool)));
|
|
connect(this,SIGNAL(released()),SLOT(butt_release()));
|
|
timer = new QTimer(this);
|
|
connect(timer,SIGNAL(timeout()),this,SLOT(timerDone()));
|
|
timer->start(10);
|
|
setWhite();
|
|
is_push = false;
|
|
}
|
|
|
|
|
|
void touch_butt::setColor(QColor colr, QColor colg, QColor colw, QColor colp)
|
|
{
|
|
cr = colr; cg = colg; cw = colw; cp = colp;
|
|
setWhite();
|
|
}
|
|
|
|
|
|
void touch_butt::timerDone()
|
|
{
|
|
float r = this->palette().button().color().redF();
|
|
float g = this->palette().button().color().greenF();
|
|
float b = this->palette().button().color().blueF();
|
|
r += (aim_col.redF()-r)/9.0f;
|
|
g += (aim_col.greenF()-g)/9.0f;
|
|
b += (aim_col.blueF()-b)/9.0f;
|
|
QPalette pal;
|
|
pal.setColor(QPalette::Button,QColor(qRound(r*255.0f),qRound(g*255.0f),qRound(b*255.0f)));
|
|
this->setPalette(pal);
|
|
if (qAbs(aim_col.redF() - r) < 0.02 && qAbs(aim_col.greenF() - g) < 0.02 && qAbs(aim_col.blueF() - b) < 0.02)
|
|
{
|
|
pal.setColor(QPalette::Button,aim_col);
|
|
this->setPalette(pal);
|
|
aim_col = next_col;
|
|
}
|
|
}
|
|
|
|
|
|
void touch_butt::butt_click()
|
|
{
|
|
is_push = false;
|
|
//setWhite();
|
|
//timerDone();
|
|
emit touch_click(index);
|
|
}
|
|
|
|
|
|
void touch_butt::butt_push()
|
|
{
|
|
is_push = true;
|
|
setPush();
|
|
emit touch_push(index);
|
|
}
|
|
|
|
|
|
void touch_butt::butt_release()
|
|
{
|
|
is_push = false;
|
|
setWhite();
|
|
timerDone();
|
|
}
|
|
|
|
|
|
void touch_butt::butt_toggle(bool checked)
|
|
{
|
|
if (!checked) {
|
|
setWhite();
|
|
}
|
|
emit touch_toggle(index,checked);
|
|
}
|
|
|
|
|
|
void touch_butt::setRed()
|
|
{
|
|
next_col = cr;
|
|
timerDone();
|
|
}
|
|
|
|
|
|
void touch_butt::setGreen()
|
|
{
|
|
//if (!is_push)
|
|
next_col = cg;
|
|
}
|
|
|
|
|
|
void touch_butt::setWhite()
|
|
{
|
|
//if (!is_push)
|
|
next_col = cw;
|
|
}
|
|
|
|
|
|
void touch_butt::setPush()
|
|
{
|
|
next_col = cp;
|
|
timerDone();
|
|
}
|