1*4882a593Smuzhiyun #include "watchdogwidgt.h"
2*4882a593Smuzhiyun #include "ui_watchdogwidgt.h"
3*4882a593Smuzhiyun #include "iwatchdog.h"
4*4882a593Smuzhiyun #include <QValidator>
5*4882a593Smuzhiyun #include "messagebox.h"
6*4882a593Smuzhiyun #include <QTimer>
7*4882a593Smuzhiyun #include <QDoubleValidator>
8*4882a593Smuzhiyun #include <QIntValidator>
9*4882a593Smuzhiyun #include <QCoreApplication>
10*4882a593Smuzhiyun
WatchDogWidgt(QWidget * parent)11*4882a593Smuzhiyun WatchDogWidgt::WatchDogWidgt(QWidget *parent) :
12*4882a593Smuzhiyun IWidget(parent),
13*4882a593Smuzhiyun ui(new Ui::WatchDogWidgt),
14*4882a593Smuzhiyun m_wathcdog(Q_NULLPTR)
15*4882a593Smuzhiyun {
16*4882a593Smuzhiyun ui->setupUi(this);
17*4882a593Smuzhiyun ui->checkBox->setEnabled(false);
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun QIntValidator *pIntV = new QIntValidator;
20*4882a593Smuzhiyun pIntV->setRange(1, 10);
21*4882a593Smuzhiyun ui->timeoutEdt->setValidator(pIntV);
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun QDoubleValidator *pDoubleV = new QDoubleValidator;
24*4882a593Smuzhiyun pDoubleV->setRange(0.1, 10.0);
25*4882a593Smuzhiyun ui->feedEdt->setValidator(pDoubleV);
26*4882a593Smuzhiyun }
27*4882a593Smuzhiyun
~WatchDogWidgt()28*4882a593Smuzhiyun WatchDogWidgt::~WatchDogWidgt()
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun if(m_wathcdog->isOpen())
31*4882a593Smuzhiyun {
32*4882a593Smuzhiyun ui->openBtn->click();
33*4882a593Smuzhiyun }
34*4882a593Smuzhiyun delete ui;
35*4882a593Smuzhiyun }
36*4882a593Smuzhiyun
id()37*4882a593Smuzhiyun QString WatchDogWidgt::id()
38*4882a593Smuzhiyun {
39*4882a593Smuzhiyun return "watchdog";
40*4882a593Smuzhiyun }
41*4882a593Smuzhiyun
loadData(const QDomElement & head,const QDomElement & body)42*4882a593Smuzhiyun void WatchDogWidgt::loadData(const QDomElement &head, const QDomElement &body)
43*4882a593Smuzhiyun {
44*4882a593Smuzhiyun Q_UNUSED(body)
45*4882a593Smuzhiyun QString devName;
46*4882a593Smuzhiyun QString type;
47*4882a593Smuzhiyun QDomElement e = head.toElement();
48*4882a593Smuzhiyun devName = e.attribute("devName");
49*4882a593Smuzhiyun type = e.attribute("type");
50*4882a593Smuzhiyun m_wathcdog = new IWatchDog(devName, this);
51*4882a593Smuzhiyun connect(m_wathcdog, &IWatchDog::feedCount, this, [=](int count){
52*4882a593Smuzhiyun ui->widget->setValue(QString::number(count));
53*4882a593Smuzhiyun });
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun if(devName.isEmpty())
56*4882a593Smuzhiyun {
57*4882a593Smuzhiyun ui->widget->setTips("watchdog not config!");
58*4882a593Smuzhiyun }
59*4882a593Smuzhiyun qDebug() << QString("dveName=%1, type=%2").arg(devName).arg(type);
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun ui->setBtn->setEnabled(false);
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun connect(qApp, &QCoreApplication::aboutToQuit, this, [=](){
64*4882a593Smuzhiyun if(ui->openBtn->isChecked())
65*4882a593Smuzhiyun {
66*4882a593Smuzhiyun ui->openBtn->click();
67*4882a593Smuzhiyun }
68*4882a593Smuzhiyun });
69*4882a593Smuzhiyun }
70*4882a593Smuzhiyun
on_openBtn_clicked()71*4882a593Smuzhiyun void WatchDogWidgt::on_openBtn_clicked()
72*4882a593Smuzhiyun {
73*4882a593Smuzhiyun auto setCheck = [=](bool bCheck){
74*4882a593Smuzhiyun ui->checkBox->setEnabled(bCheck);
75*4882a593Smuzhiyun ui->checkBox->blockSignals(true);
76*4882a593Smuzhiyun ui->checkBox->setChecked(bCheck);
77*4882a593Smuzhiyun ui->checkBox->blockSignals(false);
78*4882a593Smuzhiyun };
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun int timeoutTime = ui->timeoutEdt->text().toInt();
81*4882a593Smuzhiyun float feedtime = ui->feedEdt->text().toFloat();
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun if(!m_wathcdog->isOpen()&& checkoutInput() && m_wathcdog->open(timeoutTime, feedtime))
84*4882a593Smuzhiyun {
85*4882a593Smuzhiyun setCheck(true);
86*4882a593Smuzhiyun ui->openBtn->setText("stop");
87*4882a593Smuzhiyun ui->setBtn->setEnabled(true);
88*4882a593Smuzhiyun }else{
89*4882a593Smuzhiyun ui->setBtn->setEnabled(false);
90*4882a593Smuzhiyun m_wathcdog->close();
91*4882a593Smuzhiyun ui->openBtn->setText("start");
92*4882a593Smuzhiyun setCheck(false);
93*4882a593Smuzhiyun ui->widget->setValue("0");
94*4882a593Smuzhiyun }
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun
on_checkBox_clicked()97*4882a593Smuzhiyun void WatchDogWidgt::on_checkBox_clicked()
98*4882a593Smuzhiyun {
99*4882a593Smuzhiyun qDebug() <<"start time wathcgod";
100*4882a593Smuzhiyun if(m_wathcdog->isOpen())
101*4882a593Smuzhiyun {
102*4882a593Smuzhiyun if(!ui->checkBox->isChecked())
103*4882a593Smuzhiyun {
104*4882a593Smuzhiyun ui->widget->startDownTime(ui->timeoutEdt->text().toInt());
105*4882a593Smuzhiyun }else{
106*4882a593Smuzhiyun ui->widget->startDownTime(0);
107*4882a593Smuzhiyun }
108*4882a593Smuzhiyun m_wathcdog->setFeed(ui->checkBox->isChecked());
109*4882a593Smuzhiyun }
110*4882a593Smuzhiyun }
111*4882a593Smuzhiyun
on_setBtn_clicked()112*4882a593Smuzhiyun void WatchDogWidgt::on_setBtn_clicked()
113*4882a593Smuzhiyun {
114*4882a593Smuzhiyun if(!checkoutInput())
115*4882a593Smuzhiyun {
116*4882a593Smuzhiyun return;
117*4882a593Smuzhiyun }
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun m_wathcdog->setTimeoutTime(ui->timeoutEdt->text().toInt());
120*4882a593Smuzhiyun m_wathcdog->setFeedTime(ui->feedEdt->text().toFloat());
121*4882a593Smuzhiyun }
122*4882a593Smuzhiyun
checkoutInput()123*4882a593Smuzhiyun bool WatchDogWidgt::checkoutInput()
124*4882a593Smuzhiyun {
125*4882a593Smuzhiyun QString timeoutSeconds = ui->timeoutEdt->text();
126*4882a593Smuzhiyun if(timeoutSeconds.isEmpty() || timeoutSeconds.toInt()>10 || timeoutSeconds.toInt()<1)
127*4882a593Smuzhiyun {
128*4882a593Smuzhiyun MessageBox::showMessage(this, "Input Timeount is Invalid!");
129*4882a593Smuzhiyun return false;;
130*4882a593Smuzhiyun }
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun QString feedSeconds = ui->feedEdt->text();
133*4882a593Smuzhiyun if(feedSeconds.isEmpty() || timeoutSeconds.toFloat()<0.1 || timeoutSeconds.toFloat()> 10)
134*4882a593Smuzhiyun {
135*4882a593Smuzhiyun MessageBox::showMessage(this, "Input Feed is Invalid!");
136*4882a593Smuzhiyun return false;
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun return true;
140*4882a593Smuzhiyun }
141