Files
qad/libs/touch_widgets/touchbutton.cpp
2022-12-14 14:14:33 +03:00

104 lines
2.2 KiB
C++

#include "touchbutton.h"
TouchButton::TouchButton(QWidget * parent): QToolButton(parent) {
init();
}
TouchButton::TouchButton(int id__, const QString & text): QToolButton(0) {
init();
id_click = id_yes = id_no = id__;
setText(text);
}
TouchButton::~TouchButton() {}
void TouchButton::init() {
connect(this, SIGNAL(clicked(bool)), this, SLOT(_clicked()));
connect(this, SIGNAL(toggled(bool)), this, SLOT(_toggled(bool)));
animation.setTargetObject(this);
animation.setPropertyName("currentColor");
animation.setEasingCurve(QEasingCurve::OutSine);
animation.setDuration(350);
delay_blink = 500;
anim = auto_gray = true;
state_ = Gray;
id_click = id_yes = id_no = -1;
timer = 0;
pal = palette();
col_yes = QColor(Qt::green);
col_no = QColor(Qt::red);
col_down = QColor(Qt::yellow);
col_gray = col_cur = col_up = pal.button().color();
col_dst = col_gray;
}
void TouchButton::timerEvent(QTimerEvent * e) {
if (e->timerId() == timer) {
killTimer(e->timerId());
timer = 0;
setCurrentColor(col_blink);
animateColor(col_dst);
return;
}
QToolButton::timerEvent(e);
}
void TouchButton::mousePressEvent(QMouseEvent * e) {
animateColor(col_down);
QToolButton::mousePressEvent(e);
emit pressedID(id_click);
}
void TouchButton::mouseReleaseEvent(QMouseEvent * e) {
setCurrentColor(col_down);
animateColor(col_dst);
QToolButton::mouseReleaseEvent(e);
emit releasedID(id_click);
}
void TouchButton::animateColor(const QColor & tc) {
if (anim) {
animation.stop();
animation.setStartValue(currentColor());
animation.setEndValue(tc);
animation.start();
} else {
col_cur = tc;
applyColor();
}
}
void TouchButton::applyState(State s) {
if (s == state_) return;
State ps = state_;
state_ = s;
emit stateChanged(state_, ps);
emit stateChangedID(id_click, state_, ps);
}
void TouchButton::blink(const QColor & tc) {
col_blink = tc;
if (timer > 0) killTimer(timer);
timer = startTimer(delay_blink);
}
void TouchButton::setState(State s) {
switch (s) {
case Gray: setStateGray(); break;
case Yes: setStateYes(); break;
case No: setStateNo(); break;
default: break;
};
}