Files
aliendefender/touch_butt.cpp
2011-08-20 07:34:19 +04:00

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();
}