diff --git a/CMakeLists.txt b/CMakeLists.txt index 4cee6a6..e8daad2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,6 +86,7 @@ set(CPP_SOURCE_FILES source/customCalendarWidget.cpp source/dateTimeSelectionPanel.cpp source/httpRequestManager.cpp + source/alarmEventGlobal.cpp source/alarmEventMainDialog.cpp source/alarmEventDataView.cpp source/alarmEventRealTimeDock.cpp diff --git a/include/alarmEventConfigDialog.h b/include/alarmEventConfigDialog.h index e69de29..b126e78 100644 --- a/include/alarmEventConfigDialog.h +++ b/include/alarmEventConfigDialog.h @@ -0,0 +1,41 @@ +#ifndef ALARMCONFIGDIALOG_H +#define ALARMCONFIGDIALOG_H + +#include +#include "alarmEventGlobal.h" + +QT_BEGIN_NAMESPACE +namespace Ui { +class alarmEventConfigDialog; +} +QT_END_NAMESPACE + +class AlarmEventConfigDialog : public QDialog +{ + Q_OBJECT + +public: + AlarmEventConfigDialog(QWidget *parent = nullptr); + ~AlarmEventConfigDialog(); + +signals: + void sgl_hide(); + //void sgl_configFinish(const AlarmConfigurationResults&); + +public slots: + void onBtnClicked_tabBtn(); + void onBtnClicked_confirm(); + void onBtnClicked_cancle(); + +protected: + void showEvent(QShowEvent*); + +private: + void initialize(); + + Ui::alarmEventConfigDialog* ui; + QPushButton* m_curActiveTab; + //AlarmConfigurationResults m_cfgResults; +}; + +#endif diff --git a/include/alarmEventGlobal.h b/include/alarmEventGlobal.h index 9f1cf88..7203758 100644 --- a/include/alarmEventGlobal.h +++ b/include/alarmEventGlobal.h @@ -73,4 +73,26 @@ struct EventData } }; +struct AlarmConfigurationResults +{ + //级别选择 + bool level_notify = true; + bool level_warining = true; + bool level_abnormal = true; + bool level_accident = true; + //类型选择 + bool type_hard = true; + bool type_platformSoft = true; + bool type_appSoft = true; + //提示行为 + bool notify_sound = true; + bool notify_autoPop = true; + //自动弹窗级别 + bool autoPop_nofity = false; + bool autoPop_warining = false; + bool autoPop_abnormal = false; + bool autoPop_accident = true; +}; +extern AlarmConfigurationResults g_alarmCfgResults; + #endif diff --git a/include/alarmEventMainDialog.h b/include/alarmEventMainDialog.h index 0d8d2ab..7b90bb6 100644 --- a/include/alarmEventMainDialog.h +++ b/include/alarmEventMainDialog.h @@ -28,6 +28,7 @@ public: signals: void sgl_hide(); + void openConfigDialog(); protected: void showEvent(QShowEvent* event) override; diff --git a/include/alarmEventRealTimeDock.h b/include/alarmEventRealTimeDock.h index 161b205..ffd37fa 100644 --- a/include/alarmEventRealTimeDock.h +++ b/include/alarmEventRealTimeDock.h @@ -35,13 +35,16 @@ public: signals: void alertWidgetBGColorAlphaChanged(float value); void viewAllRealTimeEvents(); + void openConfigDialog(); public slots: void onBtnClicked_open(); void onBtnClicked_close(); void onBtnClicked_confirmAll(); void onBtnClicked_checkAll(); + void onBtnClicked_setting(); void onSIG_receivedNewAlarm(const EventData& event); + //void onSIG_configFinish(const AlarmConfigurationResults&); private: void expand(); @@ -63,6 +66,7 @@ private: QString m_alertWidgetStyleSheet; QString m_curState; AlarmDataStatics m_alarmDataStatics; + AlarmConfigurationResults m_cfgResults; }; #endif diff --git a/include/dashboardFrame.h b/include/dashboardFrame.h index fd36c96..b8acfb2 100644 --- a/include/dashboardFrame.h +++ b/include/dashboardFrame.h @@ -24,6 +24,7 @@ class DataPanel; class dpConfigurationDialog; class AlarmEventRealTimeDock; class AlarmEventMainDialog; +class AlarmEventConfigDialog; namespace dashboardFrame { enum frameType @@ -96,6 +97,7 @@ public slots: void onSignal_viewHistoricalData(QDateTime); void onSignal_viewAllRealTimeEvents(); + void onSignal_openAlarmEventCfgDialog(); private: Ui::dashboardFrame* ui; @@ -119,6 +121,7 @@ private: dpConfigurationDialog* m_pPanelConfigurationDialog; AlarmEventRealTimeDock* m_pAlarmEventRealTimeDock; AlarmEventMainDialog* m_pAlarmEventMainDialog; + AlarmEventConfigDialog* m_pAlarmEventConfigDialog; QTimer* m_pTimer_RealTime; }; diff --git a/source/alarmEventConfigDialog.cpp b/source/alarmEventConfigDialog.cpp index e69de29..5a9b887 100644 --- a/source/alarmEventConfigDialog.cpp +++ b/source/alarmEventConfigDialog.cpp @@ -0,0 +1,132 @@ +#include "alarmEventConfigDialog.h" +#include "ui_alarmEventConfigDialog.h" + +AlarmEventConfigDialog::AlarmEventConfigDialog(QWidget *parent) + : QDialog(parent) + , ui(new Ui::alarmEventConfigDialog) + , m_curActiveTab(nullptr) +{ + ui->setupUi(this); + setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus); + setAttribute(Qt::WA_TranslucentBackground); + + initialize(); +} + +AlarmEventConfigDialog::~AlarmEventConfigDialog() +{ + delete ui; +} + +void AlarmEventConfigDialog::showEvent(QShowEvent* event) +{ + //级别选择 + ui->level_notify->setChecked(g_alarmCfgResults.level_notify); + ui->level_warning->setChecked(g_alarmCfgResults.level_warining); + ui->level_abnormal->setChecked(g_alarmCfgResults.level_abnormal); + ui->level_accident->setChecked(g_alarmCfgResults.level_accident); + //类型选择 + ui->type_hard->setChecked(g_alarmCfgResults.type_hard); + ui->type_platformSoft->setChecked(g_alarmCfgResults.type_platformSoft); + ui->type_appSoft->setChecked(g_alarmCfgResults.type_appSoft); + //提示行为 + ui->switch_sound->setChecked(g_alarmCfgResults.notify_sound); + ui->switch_autoPop->setChecked(g_alarmCfgResults.notify_autoPop); + //需要自动弹窗的事件级别 + ui->pop_notify->setChecked(g_alarmCfgResults.autoPop_nofity); + ui->pop_warning->setChecked(g_alarmCfgResults.autoPop_warining); + ui->pop_abnormal->setChecked(g_alarmCfgResults.autoPop_abnormal); + ui->pop_accident->setChecked(g_alarmCfgResults.autoPop_accident); + + ui->tabDataFilter->click(); +} + +void AlarmEventConfigDialog::initialize() +{ + ui->stackedWidget->setCurrentIndex(0); + + ui->tabDataFilter->setProperty("index", 0); + connect(ui->tabDataFilter, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_tabBtn); + ui->tabDataSource->setProperty("index", 1); + connect(ui->tabDataSource, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_tabBtn); + + connect(ui->btnConfirm, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_confirm); + connect(ui->btnCancle, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_cancle); +} + +void AlarmEventConfigDialog::onBtnClicked_tabBtn() +{ + QPushButton* pTab = qobject_cast(sender()); + if(pTab == m_curActiveTab) + return; + + if(m_curActiveTab) + { + m_curActiveTab->setStyleSheet("QPushButton\n" + "{\n" + "color: rgb(250, 250, 250);\n" + "font: 700 12pt \"黑体\";\n" + "border:0px;\n" + "background-color:transparent;\n" + "}\n" + "QPushButton:hover\n" + "{\n" + "}\n" + "QPushButton:pressed\n" + "{\n" + "}"); + } + if(pTab) + { + pTab->setStyleSheet("QPushButton\n" + "{\n" + "color: rgb(250, 250, 250);\n" + "font: 700 12pt \"黑体\";\n" + "border:1px solid rgb(200,200,200);\n" + "border-bottom:0px;\n" + "background-color:rgba(36,43,50, 250);\n" + "}\n" + "QPushButton:hover\n" + "{\n" + "}\n" + "QPushButton:pressed\n" + "{\n" + "}"); + + int nIndex = pTab->property("index").toInt(); + ui->stackedWidget->setCurrentIndex(nIndex); + } + m_curActiveTab = pTab; +} + +void AlarmEventConfigDialog::onBtnClicked_confirm() +{ + //级别选择 + g_alarmCfgResults.level_notify = ui->level_notify->isChecked(); + g_alarmCfgResults.level_warining = ui->level_warning->isChecked(); + g_alarmCfgResults.level_abnormal = ui->level_abnormal->isChecked(); + g_alarmCfgResults.level_accident = ui->level_accident->isChecked(); + //类型选择 + g_alarmCfgResults.type_hard = ui->type_hard->isChecked(); + g_alarmCfgResults.type_platformSoft = ui->type_platformSoft->isChecked(); + g_alarmCfgResults.type_appSoft = ui->type_appSoft->isChecked(); + //提示行为 + g_alarmCfgResults.notify_sound = ui->switch_sound->isChecked(); + g_alarmCfgResults.notify_autoPop = ui->switch_autoPop->isChecked(); + //需要自动弹窗的事件级别 + g_alarmCfgResults.autoPop_nofity = ui->pop_notify->isChecked(); + g_alarmCfgResults.autoPop_warining = ui->pop_warning->isChecked(); + g_alarmCfgResults.autoPop_abnormal = ui->pop_abnormal->isChecked(); + g_alarmCfgResults.autoPop_accident = ui->pop_accident->isChecked(); + + //emit sgl_configFinish(g_alarmCfgResults); + + hide(); + emit sgl_hide(); +} + +void AlarmEventConfigDialog::onBtnClicked_cancle() +{ + hide(); + emit sgl_hide(); +} diff --git a/source/alarmEventDataView.cpp b/source/alarmEventDataView.cpp index 89ac410..7f25d22 100644 --- a/source/alarmEventDataView.cpp +++ b/source/alarmEventDataView.cpp @@ -308,16 +308,26 @@ void AlarmEventDataModel::onTimeoutSimulateData() event.bayName = QString("间隔") + QString::number(randomInt); event.description = ""; event.type = 5; - QString severity = QString("预警"); if(randomInt == 0) - severity = QString("告知"); + { + event.priority = 1; + event.severity = QString("告知"); + } else if(randomInt == 1) - severity = QString("预警"); + { + event.priority = 4; + event.severity = QString("预警"); + } else if(randomInt == 2) - severity = QString("异常"); + { + event.priority = 6; + event.severity = QString("异常"); + } else if(randomInt == 3) - severity = QString("事故"); - event.severity = severity; + { + event.priority = 7; + event.severity = QString("事故"); + } event.status = 0; onRealTimeEventReceived(event); } @@ -334,6 +344,29 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event) return; } + //按级别过滤事件 + //告知 + if(event.priority == 1) + { + //qDebug() << g_alarmCfgResults.level_notify; + if(!g_alarmCfgResults.level_notify) + return; + } + //预警 + else if(event.priority == 4) + { + //qDebug() << g_alarmCfgResults.level_warining; + if(!g_alarmCfgResults.level_warining) + return; + } + //事故 + else if(event.priority == 7) + { + //qDebug() << g_alarmCfgResults.level_accident; + if(!g_alarmCfgResults.level_accident) + return; + } + beginResetModel(); //插入数据之前,先判断当前是否达到最大显示条目,达到的话删除最靠前(时间)的条目 diff --git a/source/alarmEventGlobal.cpp b/source/alarmEventGlobal.cpp new file mode 100644 index 0000000..439f241 --- /dev/null +++ b/source/alarmEventGlobal.cpp @@ -0,0 +1,3 @@ +#include "alarmEventGlobal.h" + +AlarmConfigurationResults g_alarmCfgResults; diff --git a/source/alarmEventMainDialog.cpp b/source/alarmEventMainDialog.cpp index c9982db..5fcb631 100644 --- a/source/alarmEventMainDialog.cpp +++ b/source/alarmEventMainDialog.cpp @@ -122,7 +122,7 @@ void AlarmEventMainDialog::hideTransparentMask() m_pTransparentMask->hide(); } -void AlarmEventMainDialog::showMessageDialog(MessageDialogType type,const QString& strTitle,const QString& strContent) +void AlarmEventMainDialog::showMessageDialog(MessageDialogType type, const QString& strTitle, const QString& strContent) { if(m_pMessageDialog == nullptr) { @@ -147,6 +147,7 @@ void AlarmEventMainDialog::setMode(AlarmDataMode mode) if(mode == Historical_Unconfirmed) { ui->label_WindowlTitle->setText("实时事件"); + ui->btnConfirmAll->setVisible(true); ui->conboBox_confirmStatus->setEnabled(false); ui->conboBox_confirmStatus->setCurrentIndex(1); m_eventFilter.setConfirmStatusFilter(0); @@ -154,6 +155,7 @@ void AlarmEventMainDialog::setMode(AlarmDataMode mode) else if(mode == Historical_All) { ui->label_WindowlTitle->setText("历史事件"); + ui->btnConfirmAll->setVisible(false); ui->conboBox_confirmStatus->setEnabled(true); ui->conboBox_confirmStatus->setCurrentIndex(0); m_eventFilter.setConfirmStatusFilter(-1); //-1表示所有事件(确认+未确认) diff --git a/source/alarmEventRealTimeDock.cpp b/source/alarmEventRealTimeDock.cpp index e161557..933a50e 100644 --- a/source/alarmEventRealTimeDock.cpp +++ b/source/alarmEventRealTimeDock.cpp @@ -44,6 +44,7 @@ AlarmEventRealTimeDock::AlarmEventRealTimeDock(QWidget* parent) connect(ui->btnClose, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_close); connect(ui->btnConfirmAll, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_confirmAll); connect(ui->btnCheckAll, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_checkAll); + connect(ui->btnSetting, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_setting); /*if(parent) { @@ -118,6 +119,8 @@ void AlarmEventRealTimeDock::startAlarmAlert() if(m_isInAnimationAlert || m_curState == "expand") return; + //播放音频(音频长度要和动画时间一致) + //if(g_alarmCfgResults.notify_sound) m_animationAlert->start(); m_isInAnimationAlert = true; } @@ -194,8 +197,27 @@ void AlarmEventRealTimeDock::onBtnClicked_checkAll() emit viewAllRealTimeEvents(); } +void AlarmEventRealTimeDock::onBtnClicked_setting() +{ + emit openConfigDialog(); +} + void AlarmEventRealTimeDock::onSIG_receivedNewAlarm(const EventData& event) { + //判断是否需要自动弹窗 + if(g_alarmCfgResults.notify_autoPop && m_curState == "collapse") + { + //告知 + if(event.priority == 1 && g_alarmCfgResults.autoPop_nofity) + onBtnClicked_open(); + //预警 + else if(event.priority == 4 && g_alarmCfgResults.autoPop_warining) + onBtnClicked_open(); + //事故 + else if(event.priority == 7 && g_alarmCfgResults.autoPop_accident) + onBtnClicked_open(); + } + startAlarmAlert(); m_alarmDataStatics.allCount++; diff --git a/source/dashboardFrame.cpp b/source/dashboardFrame.cpp index 07b309f..0d0d4ab 100644 --- a/source/dashboardFrame.cpp +++ b/source/dashboardFrame.cpp @@ -15,6 +15,7 @@ #include "util/TimeLine/timeLineWidget.h" #include "alarmEventRealTimeDock.h" #include "alarmEventMainDialog.h" +#include "alarmEventConfigDialog.h" #include #include @@ -37,6 +38,7 @@ DashboardFrame::DashboardFrame(const QString& strName, dashboardFrame::frameType , m_pPanelConfigurationDialog(nullptr) , m_pAlarmEventRealTimeDock(nullptr) , m_pAlarmEventMainDialog(nullptr) + , m_pAlarmEventConfigDialog(nullptr) { ui->setupUi(this); setAcceptDrops(true); @@ -49,6 +51,16 @@ DashboardFrame::DashboardFrame(const QString& strName, dashboardFrame::frameType { m_pAlarmEventRealTimeDock = new AlarmEventRealTimeDock(this); connect(m_pAlarmEventRealTimeDock, &AlarmEventRealTimeDock::viewAllRealTimeEvents, this, &DashboardFrame::onSignal_viewAllRealTimeEvents); + connect(m_pAlarmEventRealTimeDock, &AlarmEventRealTimeDock::openConfigDialog, this, &DashboardFrame::onSignal_openAlarmEventCfgDialog); + + m_pAlarmEventMainDialog = new AlarmEventMainDialog(this); + connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); + connect(m_pAlarmEventMainDialog, &AlarmEventMainDialog::openConfigDialog, this, &DashboardFrame::onSignal_openAlarmEventCfgDialog); + m_pAlarmEventMainDialog->hide(); + + m_pAlarmEventConfigDialog = new AlarmEventConfigDialog(this); + connect(m_pAlarmEventConfigDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); + m_pAlarmEventConfigDialog->hide(); } else { @@ -156,6 +168,13 @@ void DashboardFrame::resizeEvent(QResizeEvent* event) m_pAlarmEventMainDialog->setGeometry(nX, nY, nWidth, nHeight); } + if(m_pAlarmEventConfigDialog && m_pAlarmEventConfigDialog->isVisible()) + { + int nX = this->geometry().x() + (this->width() - m_pAlarmEventConfigDialog->width()) * 0.5; + int nY = this->geometry().y() + (this->height() - m_pAlarmEventConfigDialog->height()) * 0.5; + m_pAlarmEventConfigDialog->move(nX, nY); + } + double ratioX = (double)event->size().width() / (double)event->oldSize().width(); double ratioY = (double)event->size().height() / (double)event->oldSize().height(); //qDebug() << ratioX << ", " << ratioY; @@ -604,12 +623,6 @@ void DashboardFrame::onBtnClicked_dashboardTab() void DashboardFrame::onBtnClicked_showRealtimeEvents() { - if(m_pAlarmEventMainDialog == nullptr) - { - m_pAlarmEventMainDialog = new AlarmEventMainDialog(this); - connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); - } - m_pAlarmEventMainDialog->setMode(Historical_Unconfirmed); int nWidth = this->width() * 0.8; int nHeight = this->height() * 0.8; @@ -623,12 +636,6 @@ void DashboardFrame::onBtnClicked_showRealtimeEvents() void DashboardFrame::onBtnClicked_showHistoricalEvents() { - if(m_pAlarmEventMainDialog == nullptr) - { - m_pAlarmEventMainDialog = new AlarmEventMainDialog(this); - connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); - } - m_pAlarmEventMainDialog->setMode(Historical_All); int nWidth = this->width() * 0.8; int nHeight = this->height() * 0.8; @@ -780,3 +787,13 @@ void DashboardFrame::onSignal_viewAllRealTimeEvents() { onBtnClicked_showRealtimeEvents(); } + +void DashboardFrame::onSignal_openAlarmEventCfgDialog() +{ + showTransparentMask(); + int nX = this->geometry().x() + (this->width() - m_pAlarmEventConfigDialog->width()) * 0.5; + int nY = this->geometry().y() + (this->height() - m_pAlarmEventConfigDialog->height()) * 0.5; + m_pAlarmEventConfigDialog->move(nX, nY); + m_pAlarmEventConfigDialog->show(); + m_pAlarmEventConfigDialog->raise(); +} diff --git a/ui/alarmEventConfigDialog.ui b/ui/alarmEventConfigDialog.ui index 3fe8091..0003589 100644 --- a/ui/alarmEventConfigDialog.ui +++ b/ui/alarmEventConfigDialog.ui @@ -246,7 +246,7 @@ QPushButton:pressed - 0 + 1 @@ -496,7 +496,7 @@ background-color:transparent; 异常 - true + false diff --git a/ui/alarmEventMainDialog.ui b/ui/alarmEventMainDialog.ui index c469b2f..b7ade39 100644 --- a/ui/alarmEventMainDialog.ui +++ b/ui/alarmEventMainDialog.ui @@ -248,7 +248,7 @@ font: 700 18pt "微软雅黑"; - 40 + 150 10 101 31 @@ -268,7 +268,7 @@ icon: url(:/images/icon_checked.png); - 170 + 1170 10 81 31 diff --git a/ui/dpConfigurationDialog.ui b/ui/dpConfigurationDialog.ui index 2fe3e41..78315ce 100644 --- a/ui/dpConfigurationDialog.ui +++ b/ui/dpConfigurationDialog.ui @@ -343,7 +343,7 @@ QPushButton:pressed - 2 + 0