PowerModeler/include/attributeTableModel.h

122 lines
3.7 KiB
C
Raw Normal View History

#ifndef ATTRIBUTETABLEMODEL_H
#define ATTRIBUTETABLEMODEL_H
/**
* @brief attribute数据的Model类
*
*
* 1
* 2
* 3
* 41
* 5icon
* 6*
*
*/
#include <QAbstractTableModel>
#include <QSqlRecord>
2025-03-25 17:58:48 +08:00
#include "global.h"
#include "messageDialog.h"
class AttributeTableModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum EditState
{
Clean = 0,
Modified,
New,
Deleted
};
struct DataType //数据类型
{
int id;
QString type;
QString db; //为哪个数据库的可用类型
};
2025-03-25 17:58:48 +08:00
explicit AttributeTableModel(const ModelAttributeGroup& modelAttributeGroup
, QObject* parent = nullptr
, const QString& connection = ""
, const QString& tableName = "basic.attribute");
~AttributeTableModel();
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;
//分页控制
void setPageSize(int);
int pageSize() const;
void setCurrentPage(int);
int currentPage() const;
int totalPages() const;
void previousPage();
void nextPage();
void firstPage();
void lastPage();
//数据操作
2025-04-01 16:45:30 +08:00
//void setTable(const QString&);
void refresh();
void insertRecord(int);
void removeRecord(int);
void submitChanges(); //提交更改(增、删、改)
void cancleChanges(); //取消修改
//展示列控制
2025-03-27 21:01:25 +08:00
//void setVisibleColumns(const QStringList& columns);
//others
QMap<int, DataType> getDataTypes() {return m_dataTypes;}
void triggerSyncSignal();
signals:
void syncDataStatus(bool, const PaginationInfo&);
void showMessage(MessageDialogType,const QString&,const QString&);
private:
2025-03-27 21:01:25 +08:00
struct FieldInfo //字段信息
{
QString originalName; //数据库中的字段命名
QString displayName; //对外展示的名称
QString dataType = "unknown type"; //数据类型
};
struct RowData
{
//QSqlRecord record;
QVector<QVariant> values;
QHash<int, bool> cellModified; //记录单元格是否被修改
EditState state = Clean;
};
2025-03-27 21:01:25 +08:00
void iniDisplayField();
void getDataTypesFromDB();
void loadPageData(); // 加载当前页数据
void updateTotalCount(); // 更新总记录数
QList<RowData> filterRowsByEditState(EditState);
int getDataTypeID(const QString&);
QString m_connection;
QString m_tableName;
2025-03-25 17:58:48 +08:00
ModelAttributeGroup m_modelAttributeGroup;
2025-03-25 17:58:48 +08:00
PaginationInfo m_paginationInfo;
2025-03-27 21:01:25 +08:00
QList<FieldInfo> m_displayField;
QList<RowData> m_currentPageData;
QHash<int, RowData> m_modifiedRows; //key:global row number
QMap<int, DataType> m_dataTypes;
QHash<QString, int> m_reversalDataTypes; //dataType的反转用来通过名称快速查找对应id
};
#endif //ATTRIBUTETABLEMODEL_H