67 lines
1.5 KiB
C++
67 lines
1.5 KiB
C++
#include "toggleswitch.h"
|
|
|
|
#include <QPainter>
|
|
#include <QMouseEvent>
|
|
|
|
ToggleSwitch::ToggleSwitch(QWidget *parent, bool state) : QAbstractButton(parent),
|
|
_height(24),
|
|
_width(128),
|
|
state(state)
|
|
{
|
|
|
|
}
|
|
|
|
QSize ToggleSwitch::sizeHint() const
|
|
{
|
|
return QSize(_width, _height);
|
|
}
|
|
|
|
void ToggleSwitch::toggle()
|
|
{
|
|
state = !state;
|
|
emit toggled(state);
|
|
}
|
|
|
|
void ToggleSwitch::setState(bool state)
|
|
{
|
|
if(this->state != state) {
|
|
this->state = state;
|
|
emit toggled(state);
|
|
}
|
|
}
|
|
|
|
void ToggleSwitch::paintEvent(QPaintEvent *)
|
|
{
|
|
QPainter p(this);
|
|
p.setPen(Qt::NoPen);
|
|
p.setBrush(Qt::black);
|
|
p.setOpacity(isEnabled() ? 0.38 : 0.12);
|
|
p.setRenderHint(QPainter::Antialiasing, true);
|
|
p.drawRoundedRect(QRect(0, 0, width(), height()), 8.0, 8.0);
|
|
p.setOpacity(1.0);
|
|
QRect rect;
|
|
QString statename;
|
|
if(state) {
|
|
p.setBrush(isEnabled() ? Qt::darkGreen : Qt::gray);
|
|
rect = QRect(width()/2, 0, width()/2, height());
|
|
statename = "ON";
|
|
} else {
|
|
p.setBrush(isEnabled() ? QColor("#AA090E") : Qt::lightGray);
|
|
rect = QRect(0, 0, width()/2, height());
|
|
statename = "OFF";
|
|
}
|
|
p.drawRoundedRect(rect, 8.0, 8.0);
|
|
QFont font = p.font();
|
|
p.setPen(Qt::SolidLine);
|
|
p.setPen(isEnabled() ? Qt::black : Qt::gray);
|
|
p.drawText(rect, Qt::AlignCenter, statename);
|
|
}
|
|
|
|
void ToggleSwitch::mouseReleaseEvent(QMouseEvent *e)
|
|
{
|
|
if(e->button() & Qt::LeftButton) {
|
|
toggle();
|
|
}
|
|
QAbstractButton::mouseReleaseEvent(e);
|
|
}
|