PowerMaster/include/alarmEventDataView.h

179 lines
4.8 KiB
C++

#ifndef ALARMEVENTDATAVIEW_H
#define ALARMEVENTDATAVIEW_H
#include "alarmEventGlobal.h"
#include <QWidget>
#include <QTableView>
#include <QAbstractTableModel>
#include <QStyledItemDelegate>
class AlarmEventDataFilter
{
public:
AlarmEventDataFilter();
void setTimeRange(const QDateTime& start, const QDateTime& end) {m_startTime = start; m_endTime = end;}
void setStationFilter(const QString& station) {m_station = station;}
void setBayFilter(const QString& bay) {m_bay = bay;}
void setTypeFilter(int type) {m_type = type;}
void setSeverityFilter(const QString& severity) {m_severity = severity;}
void setDescriptionFilter(const QString& description) {m_description = description;}
void setConfirmStatusFilter(int status) {m_status = status;}
bool matches(const EventData& event);
void clear();
private:
QDateTime m_startTime;
QDateTime m_endTime;
QString m_station;
QString m_bay;
int m_type;
QString m_severity;
QString m_description;
int m_status;
};
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 PaginationInfo
{
int totalEntries;
int entriesPerPage;
int totalPages;
int currentPage;
};
struct SectionData
{
int width = -1;
Column column;
QString text;
SectionData(QString t, int w, Column c)
:text(t)
,column(c)
,width(w){}
};
explicit AlarmEventDataModel(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) {m_dataMode = mode;}
void setMaxRealTimeEvents(int value) {m_maxRealTimeEvents = value;}
const int getMaxRealTimeEvents() const {return m_maxRealTimeEvents;}
void setFilter(const AlarmEventDataFilter& filter);
void applyFilter();
void refresh();
private:
void onTimeoutSimulateData();
void onRealTimeEventReceived(const EventData& event);
private:
void iniHeaderData();
void updateCurPageData(); //更新当前页的数据
void updateTotalCount(); //更新总记录数
int findEventDataIndexById(const QString& eventId);
void updateEventData(int index, const EventData& updatedEvent);
QVector<EventData> m_displayEvents; //当前(页)展示的事件
QVector<EventData> m_allEvents; //所有事件
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;
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:
AlarmEventDataView(QWidget* parent = nullptr);
~AlarmEventDataView();
void setModelMode(AlarmDataMode, int maxRealTimeEvents = 5);
private:
QTableView* m_tableView;
AlarmEventDataModel* m_tableModel;
AlarmEventDataDelegate* m_delegate;
QVBoxLayout* m_vLayout;
};
#endif