DiagramDesigner/include/projectModelDlg.h

90 lines
3.8 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 PROJECTMODELDLG_H
#define PROJECTMODELDLG_H
#include <QDialog>
#include <QStandardItemModel>
#include <QItemSelection>
QT_BEGIN_NAMESPACE
namespace Ui { class projectModelDlg; }
QT_END_NAMESPACE
struct PropertyState //每个属性的状态
{
bool checkState = false;
QString dataType;
};
struct PropertyPage //属性列表信息
{
QStandardItemModel* pBase; //基础属性
QStandardItemModel* pSelect; //已选择属性
QMap<QString,PropertyState> mCheckState; //属性选择状态
};
typedef QMap<QString,PropertyPage> MapProperty; //str为属性名model1基础属性model2已选择属性
struct PropertyModel //工程模
{
MapProperty mapProperty;
int nType = 0; //工程模类型,选择图标后确定
};
typedef QMap<QString,PropertyModel> MapProject; //str为工程名property为属性集
typedef QMap<QString,MapProject> MapMeta; //str为元模名,project为工程模集
class RenameModel;
class projectModelDlg : public QDialog
{
Q_OBJECT
public:
projectModelDlg(QWidget *parent = nullptr);
~projectModelDlg();
void initial();
void initialModel();
void initialList();
MapProperty addNewProject(const QString& sMeta,const QString& sProject); //根据元模型、工程模名称生成工程模对象
void update();
void generate(const QString&); //根据输入名称生成表
public slots:
void onSaveClicked();
void onCancelClicked();
void onApplyClicked();
void onRevokeClicked();
void onBaseModelIndexChanged(const QString&);
void onProjectIndexChanged(const QString&);
void onPropertyIndexChanged(const QString&);
void onIconClicked(const QModelIndex &index); //关联图元改变
void onIndexClicked(const QModelIndex &index); //索引列表点击
void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单
void onDeleteProjectClicked(); //删除选中工程模
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的属性(数据库表字段名)
QPair<QString,QString> combinePropertySql(const QStandardItem*); //根据item属性生成sql
QString getProjectName() const; //返回当前选择项目的名称
QString getMetaName() const; //返回当前元模型名
bool ifProjectEqual(QMap<QString,QJsonObject>); //根据每个属性组的勾选状态判断两个模型是否相同
QString modifyProjectModel(QMap<QString,QJsonObject>); //修改工程模
private:
void updateIconList(); //选择工程模后刷新关联图标
void removeProjectData(const QString&,const QString&); //移除对应的project层级结构
QString getItemDataType(const QStandardItem* pItem); //返回数据类型
bool createPropertyTable(const QString& sProject,MapProperty::Iterator iter,int nLinkType); //创建属性组表并插入记录到管理表(工程名,当前项迭代器,关联图元类型)
QJsonObject getSelectedState(MapProperty::Iterator iter); //返回json格式的选中状态
private:
Ui::projectModelDlg *ui;
RenameModel* m_pRenameModel;
QStandardItemModel* _viewModel; //索引view模型
MapMeta m_mapTotal;
QString _curMeta; //当前元模型
QString _curProject; //当前工程模
QString _curProperty; //当前属性
};
#endif