PowerModeler/include/attributeTableModel.h

105 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef ATTRIBUTETABLEMODEL_H
#define ATTRIBUTETABLEMODEL_H
/**
* @brief 用来处理attribute数据的Model类
*
* 基本功能包括:
* 1、可以自定义显示数据表中的哪些列
* 2、可以分页显示并自定义每页展示数量
* 3、编辑的数据可以突出展示如加粗、改色
* 4、最前方加入一个用于展示行号的列行号从1开始
* 5、点击行号列可以实现选中标识通过icon
* 6、哪一行被编辑改行的行号指示可以加*进行标识
*
*/
#include <QAbstractTableModel>
#include <QSqlRecord>
#include "global.h"
#include "messageDialog.h"
class AttributeTableModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum EditState
{
Clean = 0,
Modified,
New,
Deleted
};
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();
//数据操作
void setTable(const QString&);
void refresh();
void insertRecord(int);
void removeRecord(int);
//展示列控制
//void setVisibleColumns(const QStringList& columns);
void triggerSyncSignal();
signals:
void syncDataStatus(bool, const PaginationInfo&);
void showMessage(MessageDialogType,const QString&,const QString&);
private:
struct FieldInfo //字段信息
{
QString originalName; //数据库中的字段命名
QString displayName; //对外展示的名称
QString dataType = "unknown type"; //数据类型
};
struct RowData
{
//QSqlRecord record;
QVector<QVariant> values;
EditState state = Clean;
};
void iniDisplayField();
void loadPageData(); // 加载当前页数据
void updateTotalCount(); // 更新总记录数
QString m_connection;
QString m_tableName;
ModelAttributeGroup m_modelAttributeGroup;
PaginationInfo m_paginationInfo;
QList<FieldInfo> m_displayField;
QList<RowData> m_currentPageData;
QHash<int, RowData> m_modifiedRows; //key:global row number
};
#endif //ATTRIBUTETABLEMODEL_H