139 lines
5.3 KiB
C++
139 lines
5.3 KiB
C++
#include "sensorwidget.h"
|
||
#include <QMouseEvent>
|
||
|
||
SensorWidget::SensorWidget(QWidget *parent, const Sensor &sensor)
|
||
: QFrame(parent)
|
||
, sensor(sensor)
|
||
, titleLabel(new QLabel(this))
|
||
, valueLabel(new QLabel(this))
|
||
, incidentLabel(new QLabel(this))
|
||
, layout(new QVBoxLayout(this))
|
||
{
|
||
setFrameStyle(QFrame::Box);
|
||
setLineWidth(1);
|
||
|
||
setFixedSize(250, 200);
|
||
|
||
layout->addWidget(titleLabel);
|
||
layout->addWidget(valueLabel);
|
||
layout->addWidget(incidentLabel);
|
||
|
||
setErrorState();
|
||
|
||
QString titleText = sensor.name;
|
||
if (titleText.length() > 40) {
|
||
titleText = titleText.left(37) + "...";
|
||
}
|
||
titleLabel->setText(titleText);
|
||
|
||
titleLabel->setWordWrap(true);
|
||
titleLabel->setMinimumHeight(100);
|
||
titleLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||
|
||
if (sensor.isBooled) {
|
||
valueLabel->setText(sensor.lastValue != 0 ? "Да" : "Нет");
|
||
} else {
|
||
valueLabel->setText(QString::number(sensor.lastValue) + ' ' + sensor.unitName);
|
||
incidentLabel->setText(QString::number(sensor.alarmLowerBound) + "-"
|
||
+ QString::number(sensor.alarmUpperBound));
|
||
}
|
||
layout->setContentsMargins(10, 10, 10, 10);
|
||
layout->setSpacing(5);
|
||
setLayout(layout);
|
||
}
|
||
|
||
void SensorWidget::mousePressEvent(QMouseEvent *event)
|
||
{
|
||
emit clicked(this); // Генерация сигнала о клике
|
||
QFrame::mousePressEvent(event);
|
||
}
|
||
|
||
void SensorWidget::setErrorState()
|
||
{
|
||
if (sensor.isAlarmEnabled) {
|
||
setStyleSheet("QFrame { border: 2px solid #FF453A; border-radius: 10px; background: "
|
||
"rgba(255, 69, 58, 0.25);}");
|
||
|
||
titleLabel->setStyleSheet("font-family: Inter;"
|
||
"font-size: 24px;"
|
||
"font-weight: 400;"
|
||
"line-height: 29.05px;"
|
||
"text-align: left;"
|
||
"color: #13385F;"
|
||
"border: 0;"
|
||
"background: transparent;");
|
||
|
||
valueLabel->setStyleSheet("font-family: Inter;"
|
||
"font-size: 24px;"
|
||
"font-weight: 400;"
|
||
"line-height: 29.05px;"
|
||
"text-align: left;"
|
||
"color: #FF453A;"
|
||
"border: 0;"
|
||
"background: transparent;");
|
||
|
||
incidentLabel->setStyleSheet("font-family: Inter;"
|
||
"font-size: 24px;"
|
||
"font-weight: 400;"
|
||
"line-height: 29.05px;"
|
||
"text-align: left;"
|
||
"color: #13385F;"
|
||
"border: 0;"
|
||
"background: transparent;");
|
||
} else {
|
||
setStyleSheet("QFrame { border: 2px solid rgba(229, 231, 235, 0.70);; border-radius: 10px; "
|
||
"background: rgba(255, 255, 255, 0.70)}");
|
||
|
||
titleLabel->setStyleSheet("font-family: Inter;"
|
||
"font-size: 24px;"
|
||
"font-weight: 400;"
|
||
"line-height: 29.05px;"
|
||
"text-align: left;"
|
||
"color: #13385F;"
|
||
"border: 0;"
|
||
"background: transparent;");
|
||
|
||
valueLabel->setStyleSheet("font-family: Inter;"
|
||
"font-size: 24px;"
|
||
"font-weight: 400;"
|
||
"line-height: 29.05px;"
|
||
"text-align: left;"
|
||
"color: #13385F;"
|
||
"border: 0;"
|
||
"background: transparent;");
|
||
|
||
incidentLabel->setStyleSheet("font-family: Inter;"
|
||
"font-size: 24px;"
|
||
"font-weight: 400;"
|
||
"line-height: 29.05px;"
|
||
"text-align: left;"
|
||
"color: rgba(19, 56, 95, 0.5);"
|
||
"border: 0;"
|
||
"background: transparent;");
|
||
}
|
||
}
|
||
|
||
Sensor SensorWidget::getSensor() const
|
||
{
|
||
return sensor;
|
||
}
|
||
|
||
void SensorWidget::setSensor(const Sensor value)
|
||
{
|
||
sensor = value;
|
||
QString titleText = sensor.name;
|
||
if (titleText.length() > 40) {
|
||
titleText = titleText.left(37) + "...";
|
||
}
|
||
titleLabel->setText(titleText);
|
||
if (sensor.isBooled) {
|
||
valueLabel->setText(sensor.lastValue != 0 ? "Да" : "Нет");
|
||
incidentLabel->hide();
|
||
} else {
|
||
valueLabel->setText(QString::number(sensor.lastValue) + ' ' + sensor.unitName);
|
||
incidentLabel->show();
|
||
incidentLabel->setText(QString::number(sensor.alarmLowerBound) + "-"
|
||
+ QString::number(sensor.alarmUpperBound));
|
||
}
|
||
}
|