DiagramDesigner/include/projectModelDlg.h

125 lines
5.4 KiB
C
Raw Normal View History

2025-03-04 09:44:03 +08:00
#ifndef PROJECTMODELDLG_H
#define PROJECTMODELDLG_H
#include <QDialog>
#include <QStandardItemModel>
#include <QItemSelection>
2025-04-17 16:51:20 +08:00
#include <QTableWidgetItem>
#include "tools.h"
#include "global.h"
2025-03-04 09:44:03 +08:00
QT_BEGIN_NAMESPACE
namespace Ui { class projectModelDlg; }
QT_END_NAMESPACE
2025-04-17 16:51:20 +08:00
enum projectState
{
Err = -1,
NotExist = 0,
Exist,
Changed
};
struct FormerName //曾用名,记录修改前名称
{
QString sName;
bool bChanged = false; //是否改变过
};
2025-03-14 17:18:25 +08:00
struct PropertyState //每个属性的状态
{
bool checkState = false;
QString dataType;
};
2025-04-17 16:51:20 +08:00
struct PropertyPage //属性信息
2025-03-04 09:44:03 +08:00
{
2025-03-14 17:18:25 +08:00
QMap<QString,PropertyState> mCheckState; //属性选择状态
2025-03-04 09:44:03 +08:00
};
2025-04-17 16:51:20 +08:00
typedef QMap<QString,PropertyPage> MapProperty; //属性组
2025-03-04 09:44:03 +08:00
struct PropertyModel //工程模
{
MapProperty mapProperty;
2025-03-07 19:24:19 +08:00
int nType = 0; //工程模类型,选择图标后确定
2025-04-17 16:51:20 +08:00
QStandardItemModel* pBase; //基础属性
QStandardItemModel* pSelect; //已选择属性
FormerName formerMeta; //曾用元模名
FormerName formerProject; //曾用工程模名
QMap<QString,projectManager> dataInfo; //存放数据库内容
2025-03-04 09:44:03 +08:00
};
2025-04-17 16:51:20 +08:00
typedef QMap<QString,PropertyModel> MapProject; //str为工程名PropertyModel为工程属性
typedef QMap<QString,MapProject> MapMeta; //str为元模名,PropertyModel为工程模集
2025-03-04 09:44:03 +08:00
class projectModelDlg : public QDialog
{
Q_OBJECT
public:
projectModelDlg(QWidget *parent = nullptr);
~projectModelDlg();
void initial();
void initialModel();
void initialList();
2025-04-17 16:51:20 +08:00
MapProperty addNewProject(const QString& sMeta,const QString& sProject,PropertyModel&); //根据元模型、工程模名称生成工程模对象
//void update();
2025-03-04 09:44:03 +08:00
void generate(const QString&); //根据输入名称生成表
public slots:
void onSaveClicked();
void onCancelClicked();
void onApplyClicked();
void onRevokeClicked();
2025-04-17 16:51:20 +08:00
//void onBaseModelIndexChanged(const QString&);
//void onProjectIndexChanged(const QString&);
//void onPropertyIndexChanged(const QString&);
//void onIconClicked(const QModelIndex &index); //关联图元改变
//void onIndexClicked(const QModelIndex &index); //索引列表点击
2025-03-07 19:24:19 +08:00
void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单
void onDeleteProjectClicked(); //删除选中工程模
2025-04-17 16:51:20 +08:00
void addPropertyGroup(); //添加tableWidget中的工程模
void onTableItemClicked(QTableWidgetItem *item); //模型item点击事件
void onDelegateFinishEdit(const QModelIndex &index, const QString &value); //lineEdit代理编辑完成事件
2025-03-04 09:44:03 +08:00
public:
QStringList getModelList() const; //获取元模型列表
QStringList getGroupList(const QString& model) const; //返回该元模下的属性组列表
QStringList getAttributeList(const QString& model,const QString& group) const; //根据元模名和组名返回属性列表
void setItemAttribute(const QString&,QStandardItem*); //设置item的属性(数据库表字段名)
2025-03-14 17:18:25 +08:00
QPair<QString,QString> combinePropertySql(const QStandardItem*); //根据item属性生成sql
QString getProjectName() const; //返回当前选择项目的名称
QString getMetaName() const; //返回当前元模型名
bool ifProjectEqual(QMap<QString,QJsonObject>); //根据每个属性组的勾选状态判断两个模型是否相同
QString modifyProjectModel(QMap<QString,QJsonObject>); //修改工程模
2025-04-17 16:51:20 +08:00
bool renameProjectModel(const QString& strCur,QMap<QString,projectManager> datas); //重命名工程模
void updateComponentModelName(const QString& strOld,const QString& strNew); //更新component中的工程模
2025-03-04 09:44:03 +08:00
private:
2025-04-17 16:51:20 +08:00
//void updateIconList(); //选择工程模后刷新关联图标
void removeProjectData(const QString&,const QString&,int role); //移除对应的project层级结构
2025-03-14 17:18:25 +08:00
QString getItemDataType(const QStandardItem* pItem); //返回数据类型
2025-04-17 16:51:20 +08:00
bool createPropertyTable(const QString& sProject,const QString& sGroup,QList<QStandardItem*> lstSelect,QList<QStandardItem*> lstBase,int nLinkType); //创建属性组表并插入记录到管理表(工程名,当前项迭代器,关联图元类型)
QJsonObject getSelectedState(QList<QStandardItem*> select,QList<QStandardItem*> base); //返回json格式的选中状态
QList<QStandardItem*> getGroupSub(QStandardItemModel*,const QString&); //返回指定组下的属性(如果存在)
void setupUI();
void initialTypeMap();
int getLevel(QStandardItem *item); //返回当前item所在层级,0为根
projectState couldSave();
void setTableItemState(int row,TableItemState state); //设置状态
int getModelEditState(); //返回工程模编辑状态(选择、编辑、新建)
2025-03-04 09:44:03 +08:00
private:
Ui::projectModelDlg *ui;
MapMeta m_mapTotal;
QString _curMeta; //当前元模型
QString _curProject; //当前工程模
2025-04-17 16:51:20 +08:00
QString _curType; //当前关联类型
PropertyModel _curModel; //新建的model
int _curRow; //当前操作行
BiDirectionalMap<QString,int> _mapType; //类型名映射表
2025-03-04 09:44:03 +08:00
};
#endif