PowerMaster/include/alarmEventDataView.h

169 lines
4.6 KiB
C
Raw Normal View History

#ifndef ALARMEVENTDATAVIEW_H
#define ALARMEVENTDATAVIEW_H
#include "alarmEventUtils.h"
#include <QWidget>
#include <QTableView>
#include <QAbstractTableModel>
#include <QStyledItemDelegate>
class QTimer;
class AlarmEventDataModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum Column
{
Index,
ReceiveTime,
SOETime,
Station,
Bay,
Description,
Type,
Severity,
Status,
Operation,
};
struct RowData
{
QVector<QVariant> values;
};
struct SectionData
{
int width = -1;
Column column;
QString text;
SectionData(QString t, int w, Column c)
:text(t)
,column(c)
,width(w){}
};
2025-10-28 16:39:23 +08:00
explicit AlarmEventDataModel(AlarmDataMode mode, QObject* parent = nullptr);
~AlarmEventDataModel();
//QAbstractTableModel接口实现
QModelIndex index(int row, int column, const QModelIndex& parent) const override;
QVariant data(const QModelIndex& index, int role) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
//bool setData(const QModelIndex& index, const QVariant &value, int role = Qt::EditRole) override;
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
//自定义功能函数
const QVector<SectionData> headerData() const {return m_headerData;}
void setMode(AlarmDataMode mode);
2025-10-28 16:39:23 +08:00
void setMaxRealTimeEvents(int value);
const int getMaxRealTimeEvents() const {return m_maxRealTimeEvents;}
void setFilter(const AlarmEventDataFilter& filter);
void refresh();
2025-10-28 16:39:23 +08:00
bool setCurrentPage(int);
int currentPage() const;
2025-10-28 16:39:23 +08:00
void previousPage();
void nextPage();
void firstPage();
void lastPage();
2025-10-27 17:43:39 +08:00
signals:
void receivedNewAlarm(const EventData& event);
void loadDataError(const QString& error);
void syncDataStatus(const PaginationInfo&);
2025-10-27 17:43:39 +08:00
private slots:
void onTimeoutSimulateData();
void onRealTimeEventReceived(const EventData& event);
void onHistoricalEventsReceived(const QList<EventData>& events);
void onHistoricalQueryError(const QString&);
private:
void iniHeaderData();
2025-10-27 17:43:39 +08:00
void applyFilter();
void updatePaginationInfo();
int findEventDataIndexById(const QString& eventId);
void updateEventData(int index, const EventData& updatedEvent);
void updateCurPageData();
QVector<EventData> m_allEvents; //所有事件
QVector<EventData> m_filteredEvents; //过滤后的事件
QVector<EventData> m_displayEvents; //当前(页)展示的事件
QVector<SectionData> m_headerData;
PaginationInfo m_paginationInfo;
QTimer* m_simulatedDataTimer;
AlarmDataMode m_dataMode;
AlarmEventDataFilter m_currentFilter;
int m_maxRealTimeEvents;
};
class AlarmEventDataDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit AlarmEventDataDelegate(QTableView* view, QObject* parent = nullptr);
~AlarmEventDataDelegate();
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) override;
signals:
void confirmBtnClicked(const QModelIndex& index);
void replayBtnClicked(const QModelIndex& index);
private:
struct ControlButton
{
QRect rect;
QColor normalBgColor;
QColor hoverBgColor;
QColor pressedBgColor;
QColor borderColor;
QColor textColor;
QFont textFont;
int borderWidth;
int borderRaius;
QString text;
//int mouseState = 0; //0Normal,1Hover,2Pressed
};
QTableView* m_tableView;
QPoint m_mousePositon;
bool m_buttonColumnIsPress;
ControlButton m_btnConfirm;
ControlButton m_btnReplay;
};
class QVBoxLayout;
class AlarmEventDataView : public QWidget
{
Q_OBJECT
public:
2025-10-28 16:39:23 +08:00
AlarmEventDataView(AlarmDataMode mode, QWidget* parent = nullptr);
~AlarmEventDataView();
AlarmEventDataModel* model() const { return m_tableModel; }
2025-10-28 16:39:23 +08:00
//void setModelMode(AlarmDataMode, int maxRealTimeEvents = 5);
public slots:
void onBtnClicked_Confirm(const QModelIndex& index);
void onBtnClicked_Replay(const QModelIndex& index);
private:
QTableView* m_tableView;
AlarmEventDataModel* m_tableModel;
AlarmEventDataDelegate* m_delegate;
QVBoxLayout* m_vLayout;
};
#endif