xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/watchdog/pinballwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #include "pinballwidget.h"
2*4882a593Smuzhiyun #include <QPropertyAnimation>
3*4882a593Smuzhiyun #include <QTimer>
4*4882a593Smuzhiyun #include <QPushButton>
5*4882a593Smuzhiyun #include <QPainter>
6*4882a593Smuzhiyun #include <QTextOption>
7*4882a593Smuzhiyun #include <QDebug>
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun class PinBallWidgetPrivate
10*4882a593Smuzhiyun {
11*4882a593Smuzhiyun public:
12*4882a593Smuzhiyun     QString number="0";
13*4882a593Smuzhiyun     QString tips;
14*4882a593Smuzhiyun     QTimer *timer = Q_NULLPTR;
15*4882a593Smuzhiyun     int seconds =0;
16*4882a593Smuzhiyun };
PinBallWidget(QWidget * parent)17*4882a593Smuzhiyun PinBallWidget::PinBallWidget(QWidget *parent) : QWidget(parent),
18*4882a593Smuzhiyun     m_d(new PinBallWidgetPrivate)
19*4882a593Smuzhiyun {
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun }
22*4882a593Smuzhiyun 
~PinBallWidget()23*4882a593Smuzhiyun PinBallWidget::~PinBallWidget()
24*4882a593Smuzhiyun {
25*4882a593Smuzhiyun     delete m_d;
26*4882a593Smuzhiyun }
27*4882a593Smuzhiyun 
paintEvent(QPaintEvent * e)28*4882a593Smuzhiyun void PinBallWidget::paintEvent(QPaintEvent *e)
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun     Q_UNUSED(e)
31*4882a593Smuzhiyun     QPainter painter(this);
32*4882a593Smuzhiyun     painter.setRenderHints(QPainter::Antialiasing);
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun     QRectF rect = this->rect();
35*4882a593Smuzhiyun     if(!m_d->tips.isEmpty())
36*4882a593Smuzhiyun     {
37*4882a593Smuzhiyun         QTextOption o;
38*4882a593Smuzhiyun         o.setAlignment(Qt::AlignCenter);
39*4882a593Smuzhiyun         QString text = m_d->tips;
40*4882a593Smuzhiyun         QFont font = this->font();
41*4882a593Smuzhiyun         font.setBold(true);
42*4882a593Smuzhiyun         font.setPointSize(18);
43*4882a593Smuzhiyun         painter.setFont(font);
44*4882a593Smuzhiyun         QRectF r =  painter.boundingRect(rect, text, o);
45*4882a593Smuzhiyun         painter.drawText(r, text);
46*4882a593Smuzhiyun         return;
47*4882a593Smuzhiyun     }
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun     QTextOption o;
50*4882a593Smuzhiyun     o.setAlignment(Qt::AlignCenter);
51*4882a593Smuzhiyun     QString text = QString("Number of dog feeding: %1").arg(m_d->number);
52*4882a593Smuzhiyun     QRectF r =  painter.boundingRect(rect, text, o);
53*4882a593Smuzhiyun     painter.drawText(r, text);
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun }
56*4882a593Smuzhiyun 
setValue(const QString & number)57*4882a593Smuzhiyun void PinBallWidget::setValue(const QString &number)
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun     m_d->number = number;
60*4882a593Smuzhiyun     this->update();
61*4882a593Smuzhiyun }
62*4882a593Smuzhiyun 
setTips(const QString & info)63*4882a593Smuzhiyun void PinBallWidget::setTips(const QString &info)
64*4882a593Smuzhiyun {
65*4882a593Smuzhiyun     m_d->tips = info;
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun 
startDownTime(int maxSeconds)68*4882a593Smuzhiyun void PinBallWidget::startDownTime(int maxSeconds)
69*4882a593Smuzhiyun {
70*4882a593Smuzhiyun     qDebug()<< "maxSeconds="<< maxSeconds;
71*4882a593Smuzhiyun     if(maxSeconds == 0)
72*4882a593Smuzhiyun     {
73*4882a593Smuzhiyun         m_d->tips.clear();
74*4882a593Smuzhiyun         this->update();
75*4882a593Smuzhiyun         m_d->timer->stop();
76*4882a593Smuzhiyun         return;
77*4882a593Smuzhiyun     }
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun     qDebug()<< "start time="<< maxSeconds;
80*4882a593Smuzhiyun     m_d->seconds = maxSeconds;
81*4882a593Smuzhiyun     m_d->tips = QString("Less than %1 seconds reboot").arg(m_d->seconds);
82*4882a593Smuzhiyun     if(m_d->timer == Q_NULLPTR)
83*4882a593Smuzhiyun     {
84*4882a593Smuzhiyun         m_d->timer = new QTimer(this);
85*4882a593Smuzhiyun         m_d->timer->setInterval(1000);
86*4882a593Smuzhiyun         connect(m_d->timer, &QTimer::timeout, [=](){
87*4882a593Smuzhiyun              m_d->seconds --;
88*4882a593Smuzhiyun              m_d->tips =QString("Less than %1 seconds reboot").arg(m_d->seconds);
89*4882a593Smuzhiyun              this->update();
90*4882a593Smuzhiyun              if(m_d->seconds == 0)
91*4882a593Smuzhiyun              {
92*4882a593Smuzhiyun                  m_d->timer->stop();
93*4882a593Smuzhiyun              }
94*4882a593Smuzhiyun         });
95*4882a593Smuzhiyun     }
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun     m_d->timer->start();
98*4882a593Smuzhiyun     this->update();
99*4882a593Smuzhiyun }
100