diff --git a/common/include/global.h b/common/include/global.h index 60672e5..bc1c724 100644 --- a/common/include/global.h +++ b/common/include/global.h @@ -145,7 +145,8 @@ struct propertyStateInfo //属性 QString name; //属性名 QString tagName; //别名 QString type; //属性类型 - QString defaultValue; //默认值 + QVariant defaultValue; //默认值 + int lengthPrecision = 999; //长度限制 }; typedef QMap PropertyValueInfo; @@ -168,6 +169,7 @@ struct modelStateInfo //模型结构信息 { QString modelName; int modelType; + QWidget* _PropertyDlg = NULL; //属性设置界面,每个模型维护一种界面 QMap groupInfo; //属性组信息 }; @@ -177,6 +179,13 @@ struct modelDataInfo //模型数据信息 int modelType; QMap groupInfo; //属性组实时信息 }; + +struct propertyContentInfo //单个属性结构 +{ + QString proName; //名称 + QString proType; //类型 + QWidget* proEditer = NULL; //编辑窗口对象 +}; //================================================== struct componentInfo diff --git a/diagramCavas/CMakeLists.txt b/diagramCavas/CMakeLists.txt index 7a2f799..a06aca1 100644 --- a/diagramCavas/CMakeLists.txt +++ b/diagramCavas/CMakeLists.txt @@ -7,6 +7,7 @@ set(DIAGRAMCAVAS_HEADER_FILES include/diagramCavas.h include/drawingPanel.h include/itemPropertyDlg.h + include/propertyContentDlg.h include/serializable.h include/statusBar.h include/graphicsDataModel/baseModel.h @@ -48,6 +49,7 @@ set(DIAGRAMCAVAS_SOURCE_FILES source/diagramCavas.cpp source/drawingPanel.cpp source/itemPropertyDlg.cpp + source/propertyContentDlg.cpp source/statusBar.cpp #source/serializable.cpp source/graphicsDataModel/baseModel.cpp diff --git a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h index b7a600a..008ad09 100644 --- a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h +++ b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h @@ -37,9 +37,10 @@ public: void setScene(DesignerScene* p){_scene = p;} void setTopWidget(DrawingPanel* p) {_widget = p;} QWidget* getTopWidget(); - void addModelProperty(modelStateInfo); //使用信号接收属性数据 - void getModelInfo(); //获取模型结构信息 - void getModelData(); //获取模型数据 + + void showModelDlg(const QString&,QUuid); //点击时显示指定模型的dlg、指定item的数据(模型名,对象Uuid) + void initialPropertyDlg(); //初始化属性设置dlg,每个模型拥各自的dlg + void generatePropertyDlg(const QString&); Q_SIGNALS: void activatePage(const QString&); //激活当前model所在page public: @@ -61,8 +62,8 @@ private: DrawingPanel* _widget; //顶层widget HttpInterface* _Interface; QTimer* _timer; - QMap _modelStateInfo; //接收的模型结构信息 - QMap _modleDataInfo; //模型实时数据 + + QMap _modelStateInfo; //模型结构信息 public: static bool _dataInitialised; static QMap _nodeData; //一个data可对应多个item diff --git a/diagramCavas/include/graphicsItem/electricSvgItemRect.h b/diagramCavas/include/graphicsItem/electricSvgItemRect.h index 1444ca6..872e23f 100644 --- a/diagramCavas/include/graphicsItem/electricSvgItemRect.h +++ b/diagramCavas/include/graphicsItem/electricSvgItemRect.h @@ -4,72 +4,6 @@ #include "electricSvgItem.h" #include "itemPropertyDlg.h" -class ElectricSvgItemRect_Property: public BaseProperty -{ - Q_OBJECT -public: - ElectricSvgItemRect_Property(QObject* parent); - ~ElectricSvgItemRect_Property(); - - void setComponent_id(int n) {componentId = n;} - int component_id() const {return componentId;} - - void setResistance(double d){resistance = d;} - double getResistance() const {return resistance;} - - void setAnchor_v(bool b){anchor_v = b;} - bool getAnchor_v() const {return anchor_v;} - - void setUv_alarm(double d){uv_alarm = d;} - double getUv_alarm() const {return uv_alarm;} - - void setOv_alarm(double d){ov_alarm = d;} - double getOv_alarm() const {return ov_alarm;} - - void setAnchor_i(bool b) {anchor_i = b;} - bool getAnchor_i() const {return anchor_i;} - - void setUi_alarm(double d) {ui_alarm = d;} - double getUi_alarm() const {return ui_alarm;} - - void setOi_alarm(double d) {oi_alarm = d;} - double getOi_alarm() const {return oi_alarm;} - - void setElec(double d) {electricity = d;} - double getElec() const {return electricity;} - - void setVolt(double d) {voltage = d;} - double getVolt() const {return voltage;} -protected: - int componentId; - double resistance; //电阻 DEFAULT 2, - bool anchor_v; //是否锚定电压 DEFAULT FALSE, - double uv_alarm; //电压下限 DEFAULT 90, - double ov_alarm; //电压上限 DEFAULT 110, - bool anchor_i; //是否锚定电流 DEFAULT FALSE, - double ui_alarm; //电流下限 DEFAULT 45, - double oi_alarm; //电流上限 DEFAULT 55, - double electricity; - double voltage; - /*double uv_warn_rate; //-- 欠压预警 阈值 0~100(%) DEFAULT 95 *********正式参数********** - QString uv_warn_unit; //欠压预警 单位 周波t/秒s/分钟m/小时h DEFAULT 's' - double uv_warn_dur; //DEFAULT 10, -- 欠压预警 运行时间 0~100 - double uv_alarm_rate; //DEFAULT 90, -- 欠压警告 阈值 0~100(%) - QString uv_alarm_unit; //DEFAULT 's', -- 欠压警告 单位 周波t/秒s/分钟m/小时h - double uv_alarm_dur; //DEFAULT 10, -- 欠压警告 运行时间 0~100 - double ov_warn_rate; //DEFAULT 105, -- 过压预警 阈值 100~500(%) - QString ov_warn_unit; //DEFAULT 's', -- 过压预警 单位 周波t/秒s/分钟m/小时h - double ov_warn_dur; //DEFAULT 10, -- 过压预警 运行时间 0~100 - double ov_alarm_rate; //DEFAULT 110, -- 过压警告 阈值 100~500(%) - QString ov_alarm_unit; //DEFAULT 's', -- 过压警告 单位 周波t/秒s/分钟m/小时h - double ov_alarm_dur; //DEFAULT 10, -- 过压警告 运行时间 0~100 - double svm_pmax; //DEFAULT 0, -- 区域电压静稳裕度参数 Pmax 0~65536 - double svm_qmax; //DEFAULT 0, -- 区域电压静稳裕度参数 Qmax 0~65536 - double svm_ulim; //DEFAULT 90, -- 区域电压静稳裕度参数 Ulim 0~1000 - double svm_prate; //DEFAULT 30, -- 区域电压静稳裕度参数 有功稳定裕度限值 0~100(%) - double svm_qrate; //DEFAULT 30, -- 区域电压静稳裕度参数 无功稳定裕度限值 0~100(%)*/ - int op; -}; class ElectricSvgItemRect :public ElectricSvgItem { @@ -78,18 +12,14 @@ public: ElectricSvgItemRect(const QRect &rect, QGraphicsItem *parent = 0); virtual ~ElectricSvgItemRect(); - virtual ElectricSvgItemRect_Property* getProperty() {return dynamic_cast(_property);} - virtual void showPropertyDlg(QWidget* p); virtual void updateByProperty(); -public slots: - void onPropertyChanged(const PropertyInfo); + protected: virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); private: virtual void updateHandles(); double m_dRatioX; - ItemPropertyDlg* _pDlg; }; #endif diff --git a/diagramCavas/include/graphicsItem/graphicsBaseItem.h b/diagramCavas/include/graphicsItem/graphicsBaseItem.h index 58f26f8..4579312 100644 --- a/diagramCavas/include/graphicsItem/graphicsBaseItem.h +++ b/diagramCavas/include/graphicsItem/graphicsBaseItem.h @@ -482,7 +482,6 @@ public: virtual BaseProperty* getProperty() {return _property;} virtual void unbindProperty(); //断开图元与数据的绑定 virtual void updateByProperty(); //使用data对象更新自己 - virtual void showPropertyDlg(QWidget* p); //显示属性对话框,参数为父对象 virtual void updateConnectData(); //更新连接关系数据 virtual void setItemChanged(bool b){_itemChanged = b;} virtual bool itemChanged() const {return _itemChanged;} diff --git a/diagramCavas/include/itemPropertyDlg.h b/diagramCavas/include/itemPropertyDlg.h index 482c0f5..452a81e 100644 --- a/diagramCavas/include/itemPropertyDlg.h +++ b/diagramCavas/include/itemPropertyDlg.h @@ -3,6 +3,9 @@ #include #include +#include +#include +#include "global.h" QT_BEGIN_NAMESPACE namespace Ui { class itemPropertyDlg; } @@ -28,16 +31,28 @@ public: ItemPropertyDlg(QWidget *parent = nullptr); ~ItemPropertyDlg(); - void synchroniseData(const PropertyInfo); //外部调用 + void initial(); + void loadGroupButton(QMap); //加载属性组列表 + void createGroupView(const QString&); //创建属性页 + void showDlg(modelDataInfo,QUuid); //显示属性页面 signals: void PropertyChange(const PropertyInfo); public slots: void onOkClicked(); void onCancelClicked(); - void onApplyClicked(); + void onGroupSelected(const QString&); private: Ui::itemPropertyDlg *ui; + QVBoxLayout* layout_; + QButtonGroup* btnGroup_; + QMap btnMap_; + + QMap groupViews_; //stack中存储的属性页 + QMap groupInfo_; //属性组结构信息 + QMap groupValue_; //属性数据 + QUuid curUuid_; //当前显示对象的uuid + QString _curModel; //当前模型名 }; #endif diff --git a/diagramCavas/include/propertyContentDlg.h b/diagramCavas/include/propertyContentDlg.h new file mode 100644 index 0000000..c5393bd --- /dev/null +++ b/diagramCavas/include/propertyContentDlg.h @@ -0,0 +1,32 @@ +#ifndef PROPERTYCONTENTDLG_H +#define PROPERTYCONTENTDLG_H + +#include +#include +#include +#include "global.h" +/******************************************************* + 每个属性组单独的界面信息,动态生成后加入到itemPropertyDlg +********************************************************/ + +class PropertyContentDlg : public QDialog +{ + Q_OBJECT + +public: + PropertyContentDlg(QWidget *parent = nullptr); + ~PropertyContentDlg(); + + void createGroupView(groupStateInfo); //创建页面 + QWidget* createEditor(propertyStateInfo); //创建属性 + QMap getPropertyValue() const; //返回当前页面的属性值 + void setPropertyValue(QMap); +private: + QVBoxLayout* _layout; + + QMap _mapPro; +private: + QFormLayout* createFormLayout(); +}; + +#endif diff --git a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp index 00caa63..d6a388e 100644 --- a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp +++ b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp @@ -9,6 +9,8 @@ #include "dataBase.h" #include "httpInterface.h" #include "drawingPanel.h" +#include "itemPropertyDlg.h" +#include "dataManager.h" #include #include @@ -24,6 +26,8 @@ FixedPortsModel::FixedPortsModel() _Interface = new HttpInterface(this); _timer = new QTimer(this); + _modelStateInfo = DataManager::instance().modelState(); + initialPropertyDlg(); connect(_timer,SIGNAL(timeout()),this,SLOT(onTimeOut())); connect(_Interface,&HttpInterface::sendPointData,this,&FixedPortsModel::onSignal_GetPointData); } @@ -195,8 +199,9 @@ void FixedPortsModel::loadNodeDataFromDataBase() if(pPro) { QMap& mapVariableGroup = pPro->getMapGroup(); + ModelDataMap mapData = DataManager::instance().modelData(); - QMap mapGroup = _modleDataInfo[info.modelName].groupInfo; //取得该模型下的所有属性组 + QMap mapGroup = mapData[info.modelName].groupInfo; //取得该模型下的所有属性组 QMap::Iterator iter; for(iter = mapGroup.begin();iter != mapGroup.end();++iter) { @@ -220,18 +225,10 @@ void FixedPortsModel::loadNodeDataFromDataBase() else if(info.type == GIT_itemRect) { busStability bility = DataBase::GetInstance()->getBusStabilityById(info.id); - ElectricSvgItemRect_Property* pPro = dynamic_cast(pData); + /*ElectricSvgItemRect_Property* pPro = dynamic_cast(pData); if(pPro) { - pPro->setComponent_id(info.id); - pPro->setResistance(bility.resistance); - pPro->setAnchor_v(bility.anchor_v); - pPro->setUv_alarm(bility.uv_alarm); - pPro->setOv_alarm(bility.ov_alarm); - pPro->setAnchor_i(bility.anchor_i); - pPro->setUi_alarm(bility.ui_alarm); - pPro->setOi_alarm(bility.oi_alarm); - } + }*/ } else if(info.type == GIT_bus) { @@ -473,11 +470,11 @@ void FixedPortsModel::saveNode(int nPageId) int type = pData->type(); if(type == GIT_itemRect) { - ElectricSvgItemRect_Property* pro = dynamic_cast(pData); + /*ElectricSvgItemRect_Property* pro = dynamic_cast(pData); if(pro) { DataBase::GetInstance()->updateBus_stability(pro->component_id(),pro->getResistance(),pro->getAnchor_v(),pro->getUv_alarm(),pro->getOv_alarm(),pro->getAnchor_i(),pro->getUi_alarm(),pro->getOi_alarm(),1); - } + }*/ } } else @@ -486,12 +483,12 @@ void FixedPortsModel::saveNode(int nPageId) int type = pData->type(); if(type == GIT_itemRect) { - ElectricSvgItemRect_Property* pro = dynamic_cast(pData); + /*ElectricSvgItemRect_Property* pro = dynamic_cast(pData); if(pro) { componentInfo info = DataBase::GetInstance()->getComponentInfoByUuid(pData->uuid().toString()); DataBase::GetInstance()->insertBus_stability(info.id,pro->getResistance(),pro->getAnchor_v(),pro->getUv_alarm(),pro->getOv_alarm(),pro->getAnchor_i(),pro->getUi_alarm(),pro->getOi_alarm(),1); - } + }*/ } } } @@ -571,16 +568,11 @@ void FixedPortsModel::onSignal_GetPointData(QString type,QMap map if(t == GIT_itemRect) { //todo:根据id匹配数据 - auto p = dynamic_cast(pro); + /*auto p = dynamic_cast(pro); if(p) { - if(type == QString("v")) - p->setVolt(d); - else if(type == QString("i")) - p->setElec(d); - p->notifyUpdate(); //通知更新 - } + }*/ } } } @@ -600,101 +592,39 @@ QWidget* FixedPortsModel::getTopWidget() return dynamic_cast(_widget); } -void FixedPortsModel::addModelProperty(modelStateInfo info) +void FixedPortsModel::showModelDlg(const QString& sName,QUuid uuid) { - if(!_modelStateInfo.contains(info.modelName)) + modelStateInfo stateInfo = _modelStateInfo[sName]; + ModelDataMap mapData = DataManager::instance().modelData(); + ItemPropertyDlg* pDlg = dynamic_cast(stateInfo._PropertyDlg); + if(pDlg) { - _modelStateInfo.insert(info.modelName,info); + pDlg->showDlg(mapData[sName],uuid); } + else + qDebug()<<"showModelDlg err"; } -void FixedPortsModel::getModelInfo() +void FixedPortsModel::initialPropertyDlg() { - QMap model = DataBase::GetInstance()->getAllProjectModel(); - - QMap::Iterator iter; - for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 + for(auto &modelInfo:_modelStateInfo) { - modelStateInfo modelInfo; - modelInfo.modelType = iter.value(); //模型类型 - - groupStateInfo groupInfo; - QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); - - QMap::Iterator it; - for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 + if(modelInfo._PropertyDlg == NULL) { - groupInfo.groupName = it.key(); - groupInfo.tableName = it->tableName; - QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); - - for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 - { - propertyStateInfo propertyInfo; - - QJsonObject node = nodeJson.toObject(); - QString propertyName = node["name"].toString(); - int nState = node["checked"].toInt(); - QString dataType = node["type"].toString(); - QString defaultValue = node["defaultValue"].toString(); - - if(nState) - { - //todo:别名赋值 - propertyInfo.name = propertyName; - propertyInfo.type = dataType; - propertyInfo.defaultValue = defaultValue; - - groupInfo.info.insert(propertyName,propertyInfo); - } - } - modelInfo.groupInfo.insert(it.key(),groupInfo); + generatePropertyDlg(modelInfo.modelName); } - _modelStateInfo.insert(iter.key(),modelInfo); } } -void FixedPortsModel::getModelData() +void FixedPortsModel::generatePropertyDlg(const QString& sModel) { - QMap model = DataBase::GetInstance()->getAllProjectModel(); - - QMap::Iterator iter; - for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 + modelStateInfo info = _modelStateInfo[sModel]; + if(info._PropertyDlg == NULL) { - modelDataInfo modelInfo; - modelInfo.modelType = iter.value(); //模型类型 - - QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); - - QMap::Iterator it; - for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 + ItemPropertyDlg* dlg = new ItemPropertyDlg(_widget); + if(dlg) { - groupStateValue groupValue; - groupValue.groupName = it.key(); - QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); - - QStringList lstParam; //需检索的属性组中属性名列表 - - for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 - { - propertyStateInfo propertyInfo; - - QJsonObject node = nodeJson.toObject(); - QString propertyName = node["name"].toString(); - int nState = node["checked"].toInt(); - QString dataType = node["type"].toString(); - QString defaultValue = node["defaultValue"].toString(); - - if(nState) - { - lstParam.append(propertyName); - } - } - lstParam.append("global_uuid"); //全局id未添加到属性状态中,手动选择 - groupValue.mapInfo = DataBase::GetInstance()->selectGroupProperty(it->tableName,lstParam); //返回表中属性值 - - modelInfo.groupInfo.insert(it.key(),groupValue); + dlg->loadGroupButton(info.groupInfo); } - _modleDataInfo.insert(iter.key(),modelInfo); } } diff --git a/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp b/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp index 8f1a49d..90bb5fe 100644 --- a/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp +++ b/diagramCavas/source/graphicsItem/electricSvgItemRect.cpp @@ -8,7 +8,6 @@ ElectricSvgItemRect::ElectricSvgItemRect(const QRect &rect, QGraphicsItem *parent) : ElectricSvgItem(rect,parent) - ,_pDlg(nullptr) { loadSvg(":/images/element/svg_rect.svg"); setHandleIfShow(H_textCaption,false); @@ -66,89 +65,13 @@ void ElectricSvgItemRect::updateHandles() } } -void ElectricSvgItemRect::onPropertyChanged(PropertyInfo inf) -{ - auto p = getProperty(); - if(p) - { - p->setResistance(inf.resistance); - p->setAnchor_v(inf.anchor_v); - p->setUv_alarm(inf.uv_alarm); - p->setOv_alarm(inf.ov_alarm); - p->setAnchor_i(inf.anchor_i); - p->setUi_alarm(inf.ui_alarm); - p->setOi_alarm(inf.oi_alarm); - p->setDataChanged(true); - } -} - void ElectricSvgItemRect::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { ElectricSvgItem::paint(painter,option,widget); } -void ElectricSvgItemRect::showPropertyDlg(QWidget* p) -{ - auto pro = getProperty(); - if(pro) - { - PropertyInfo data; - data.resistance = pro->getResistance(); - data.anchor_v = pro->getAnchor_v(); - data.uv_alarm = pro->getUv_alarm(); - data.ov_alarm = pro->getOv_alarm(); - data.anchor_i = pro->getAnchor_i(); - data.ui_alarm = pro->getUi_alarm(); - data.oi_alarm = pro->getOi_alarm(); - if(_pDlg) - { - _pDlg->show(); - _pDlg->synchroniseData(data); - } - else - { - _pDlg = new ItemPropertyDlg(p); - connect(_pDlg,&ItemPropertyDlg::PropertyChange,this,&ElectricSvgItemRect::onPropertyChanged); - _pDlg->show(); - _pDlg->synchroniseData(data); - } - - } - else - { - //todo:没有关联数据,提示 - qDebug()<<"no associate data"; - } -} void ElectricSvgItemRect::updateByProperty() -{ - auto p = dynamic_cast(_property); - if(p) - { - setLabelTag(p->tag()); - setLabelVoltage(QString::number(p->getVolt())); - setLabelCurrent(QString::number(p->getElec())); - scene()->update(); - } -} -/****************************************************************/ - -ElectricSvgItemRect_Property::ElectricSvgItemRect_Property(QObject* parent) - :BaseProperty(parent) -{ - electricity = 0; - voltage = 0; - resistance = 2; //电阻 - anchor_v = false; //是否锚定电压 - uv_alarm = 90; //电压下限 - ov_alarm = 110; //电压上限 - anchor_i = false; //是否锚定电流 - ui_alarm = 45; //电流下限 - oi_alarm = 55; //电流上限 -} - -ElectricSvgItemRect_Property::~ElectricSvgItemRect_Property() { } diff --git a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp index d2652a5..3b4a8cc 100644 --- a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp +++ b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp @@ -262,10 +262,6 @@ void GraphicsBaseItem::unbindProperty() _property = nullptr; } -void GraphicsBaseItem::showPropertyDlg(QWidget* p) -{ - -} void GraphicsBaseItem::updateConnectData() { diff --git a/diagramCavas/source/itemPropertyDlg.cpp b/diagramCavas/source/itemPropertyDlg.cpp index da80c47..286e2d1 100644 --- a/diagramCavas/source/itemPropertyDlg.cpp +++ b/diagramCavas/source/itemPropertyDlg.cpp @@ -1,15 +1,16 @@ #include "itemPropertyDlg.h" +#include "propertyContentDlg.h" #include "ui_itemPropertyDlg.h" ItemPropertyDlg::ItemPropertyDlg(QWidget *parent) : QDialog(parent) , ui(new Ui::itemPropertyDlg) + ,layout_(nullptr) + ,btnGroup_(nullptr) { ui->setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); - connect(ui->btn_ok_jianGe,&QPushButton::clicked,this,&ItemPropertyDlg::onOkClicked); - connect(ui->btn_apply_jianGe,&QPushButton::clicked,this,&ItemPropertyDlg::onApplyClicked); - connect(ui->btn_cancel_jianGe,&QPushButton::clicked,this,&ItemPropertyDlg::onCancelClicked); + initial(); } ItemPropertyDlg::~ItemPropertyDlg() @@ -17,20 +18,40 @@ ItemPropertyDlg::~ItemPropertyDlg() delete ui; } -void ItemPropertyDlg::synchroniseData(const PropertyInfo pro) +void ItemPropertyDlg::initial() { - ui->sp_DianZu->setValue(pro.resistance); - ui->cb_MaoDingDianYa->setChecked(pro.anchor_v); - ui->sp_DianYaXiaXian->setValue(pro.uv_alarm); - ui->sp_DianYaShangXian->setValue(pro.ov_alarm); - ui->cb_MaoDingDianLiu->setChecked(pro.anchor_i); - ui->sp_DianLiuXiaXian->setValue(pro.ui_alarm); - ui->sp_DianLiuShangXian->setValue(pro.oi_alarm); + layout_ = new QVBoxLayout(ui->widget_button); + btnGroup_ = new QButtonGroup(this); + connect(ui->btn_ok,&QPushButton::clicked,this,&ItemPropertyDlg::onOkClicked); + connect(ui->btn_cancel,&QPushButton::clicked,this,&ItemPropertyDlg::onCancelClicked); +} + +void ItemPropertyDlg::loadGroupButton(QMap map) +{ + groupInfo_ = map; + for(auto &info:map) + { + QPushButton* btn = new QPushButton(ui->widget_button); + btn->setText(info.groupName); + btn->setCheckable(true); + btnGroup_->addButton(btn); + btnMap_.insert(info.groupName, btn); + layout_->addWidget(btn); + + connect(btn, &QAbstractButton::clicked, [this, info](){ + onGroupSelected(info.groupName); + }); + } } void ItemPropertyDlg::onOkClicked() { - onApplyClicked(); + //todo:将属性页中的值读取到当前uuid对象 + for(auto &dlg:groupViews_) + { + PropertyContentDlg* pDlg = qobject_cast(dlg); + QMap mapPro = pDlg->getPropertyValue(); + } hide(); } @@ -39,15 +60,41 @@ void ItemPropertyDlg::onCancelClicked() hide(); } -void ItemPropertyDlg::onApplyClicked() +void ItemPropertyDlg::onGroupSelected(const QString& str) { - PropertyInfo info; - info.resistance = ui->sp_DianZu->value(); - info.anchor_v = ui->cb_MaoDingDianYa->isChecked(); - info.uv_alarm = ui->sp_DianYaXiaXian->value(); - info.ov_alarm = ui->sp_DianYaShangXian->value(); - info.anchor_i = ui->cb_MaoDingDianLiu->isChecked(); - info.ui_alarm = ui->sp_DianLiuXiaXian->value(); - info.oi_alarm = ui->sp_DianLiuShangXian->value(); - emit PropertyChange(info); + if (!groupViews_.contains(str)) { + createGroupView(str); + } + + PropertyContentDlg* pDlg = qobject_cast(groupViews_[str]); + if(pDlg) + { + QMap valueMap = groupValue_[str].mapInfo[curUuid_]; + pDlg->setPropertyValue(valueMap); + } + + ui->stackedWidget->setCurrentWidget(groupViews_[str]); +} + + +void ItemPropertyDlg::createGroupView(const QString& str) +{ + PropertyContentDlg* contentDlg = new PropertyContentDlg(ui->stackedWidget); + if(contentDlg) + { + contentDlg->createGroupView(groupInfo_[str]); + } + + groupViews_.insert(str, contentDlg); + ui->stackedWidget->addWidget(contentDlg); +} + +void ItemPropertyDlg::showDlg(modelDataInfo dataInfo,QUuid uuid) +{ + groupValue_ = dataInfo.groupInfo; + curUuid_ = uuid; + _curModel = dataInfo.modelName; + QString firstName = groupInfo_.constBegin().key(); + onGroupSelected(firstName); //打开默认显示第一个属性组 + show(); } diff --git a/diagramCavas/source/propertyContentDlg.cpp b/diagramCavas/source/propertyContentDlg.cpp new file mode 100644 index 0000000..4da3941 --- /dev/null +++ b/diagramCavas/source/propertyContentDlg.cpp @@ -0,0 +1,345 @@ +#include "propertyContentDlg.h" +#include +#include +#include +#include +#include +#include + +PropertyContentDlg::PropertyContentDlg(QWidget *parent) + : QDialog(parent) + ,_layout(nullptr) +{ + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + _layout = new QVBoxLayout(this); +} + +PropertyContentDlg::~PropertyContentDlg() +{ + +} + +void PropertyContentDlg::createGroupView(groupStateInfo infos) +{ + QScrollArea* scrollArea = new QScrollArea(this); + QWidget* content = new QWidget(); + QFormLayout* formLayout = createFormLayout(); + + // 动态生成字段 + for(auto& info:infos.info) { + QLabel* label = new QLabel(info.name); + QWidget* editor = createEditor(info); + formLayout->addRow(label, editor); + } + + scrollArea->setWidget(content); + scrollArea->setWidgetResizable(true); + _layout->addWidget(scrollArea); +} + +QWidget* PropertyContentDlg::createEditor(propertyStateInfo pro) +{ + QWidget* pWidget = nullptr; + if(pro.type.contains("SMALLINT")) + { + QSpinBox* spin = new QSpinBox(this); + spin->setRange(-32768, 32767); + pWidget = spin; + } + else if(pro.type.contains("INTEGER")) + { + QSpinBox* spin = new QSpinBox(this); + pWidget = spin; + } + else if(pro.type.contains("BIGINT")) + { + QLineEdit *lineEdit = new QLineEdit(this); + QRegularExpression regExp("^[+-]?(0|[1-9][0-9]{0,18})$"); + QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this); + lineEdit->setValidator(validator); + pWidget = lineEdit; + } + else if(pro.type.contains("REAL")) + { + QDoubleSpinBox* dbSpin = new QDoubleSpinBox(this); + dbSpin->setDecimals(6); + pWidget = dbSpin; + } + else if(pro.type.contains("DOUBLE PRECISION")) + { + QDoubleSpinBox* dbSpin = new QDoubleSpinBox(this); + dbSpin->setDecimals(15); + pWidget = dbSpin; + } + else if(pro.type.contains("NUMERIC") || pro.type.contains("DECIMAL")) + { + QLineEdit *lineEdit = new QLineEdit(this); + + // 正则表达式:支持正负号、整数/小数、科学计数法 + QRegularExpression regExp( + "^[+-]?" // 可选正负号 + "(?:0|[1-9]\\d*)(?:\\.\\d+)?" // 整数部分(避免前导零)和小数部分 + "(?:[eE][+-]?\\d+)?" // 科学计数法(如e5, E-3) + ); + QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this); + lineEdit->setValidator(validator); + pWidget = lineEdit; + } + else if(pro.type.contains("SERIAL") || pro.type.contains("BIGSERIAL")) + { + QLabel *label = new QLabel(this); + pWidget = label; + } + else if(pro.type.contains("CHAR") || pro.type.contains("VARCHAR")) + { + QLineEdit *lineEdit = new QLineEdit(this); + lineEdit->setMaxLength(pro.lengthPrecision); + pWidget = lineEdit; + } + else if(pro.type.contains("TEXT")) + { + QLineEdit *lineEdit = new QLineEdit(this); + pWidget = lineEdit; + } + else if(pro.type.contains("BYTEA")) + { + //todo:二进制文件上传 + QLabel *label = new QLabel(this); + pWidget = label; + } + else if(pro.type.contains("DATE")) + { + QDateEdit* dateEdit = new QDateEdit(this); + dateEdit->setDisplayFormat("yyyy-MM-dd"); + pWidget = dateEdit; + } + else if(pro.type.contains("TIME")) + { + QTimeEdit* timeEdit = new QTimeEdit(this); + timeEdit->setDisplayFormat("HH:mm:ss"); + pWidget = timeEdit; + } + else if(pro.type.contains("TIMESTAMP")) + { + QDateTimeEdit* dateTimeEidt = new QDateTimeEdit(this); + dateTimeEidt->setDisplayFormat("yyyy-MM-dd HH:mm:ss"); + pWidget = dateTimeEidt; + } + else if(pro.type.contains("UUID")) + { + QLineEdit *lineEdit = new QLineEdit(this); + QRegularExpression regExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"); + QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this); + lineEdit->setValidator(validator); + pWidget = lineEdit; + } + else if(pro.type.contains("JSON") || pro.type.contains("JSONB")) + { + QLineEdit *lineEdit = new QLineEdit(this); + pWidget = lineEdit; + } + if(pWidget) + { + pWidget->setProperty("name",pro.name); + propertyContentInfo info; + info.proName = pro.name; + info.proType = pro.type; + info.proEditer = pWidget; + _mapPro.insert(pro.name,info); + } + return pWidget; +} + +QMap PropertyContentDlg::getPropertyValue() const +{ + QMap map; + + for(auto &pro:_mapPro) + { + propertyStateInfo info; + info.type = pro.proType; + info.name = pro.proName; + if(pro.proEditer != nullptr) + { + if(pro.proType.contains("SMALLINT") || pro.proType.contains("INTEGER")) + { + QSpinBox* spin = qobject_cast(pro.proEditer); + if(spin) + info.defaultValue = spin->value(); + } + else if(pro.proType.contains("BIGINT")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + info.defaultValue = lineEdit->text(); + } + else if(pro.proType.contains("REAL") || pro.proType.contains("DOUBLE PRECISION")) + { + QDoubleSpinBox* dbSpin = qobject_cast(pro.proEditer); + if(dbSpin) + info.defaultValue = dbSpin->value(); + } + else if(pro.proType.contains("NUMERIC") || pro.proType.contains("DECIMAL")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + info.defaultValue = lineEdit->text(); + } + else if(pro.proType.contains("SERIAL") || pro.proType.contains("BIGSERIAL")) + { + QLabel* label = qobject_cast(pro.proEditer); + if(label) + info.defaultValue = label->text(); + } + else if(pro.proType.contains("CHAR") || pro.proType.contains("VARCHAR")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + info.defaultValue = lineEdit->text(); + } + else if(pro.proType.contains("TEXT")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + info.defaultValue = lineEdit->text(); + } + else if(pro.proType.contains("BYTEA")) + { + QLabel* label = qobject_cast(pro.proEditer); + if(label) + info.defaultValue = label->text(); + } + else if(pro.proType.contains("DATE")) + { + QDateEdit* dateEdit = qobject_cast(pro.proEditer); + if(dateEdit) + info.defaultValue = dateEdit->text(); + } + else if(pro.proType.contains("TIME")) + { + QTimeEdit* timeEdit = qobject_cast(pro.proEditer); + if(timeEdit) + info.defaultValue = timeEdit->text(); + } + else if(pro.proType.contains("TIMESTAMP")) + { + QDateTimeEdit* dateTimeEidt = qobject_cast(pro.proEditer); + if(dateTimeEidt) + info.defaultValue = dateTimeEidt->text(); + } + else if(pro.proType.contains("UUID")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + info.defaultValue = lineEdit->text(); + } + else if(pro.proType.contains("JSON") || pro.proType.contains("JSONB")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + info.defaultValue = lineEdit->text(); + } + map.insert(pro.proName,info); + } + } + return map; +} + +void PropertyContentDlg::setPropertyValue(QMap map) +{ + for(auto &info:map) + { + propertyContentInfo pro = _mapPro[info.name]; + if(info.type.contains("SMALLINT") || info.type.contains("INTEGER")) + { + QSpinBox* spin = qobject_cast(pro.proEditer); + if(spin) + spin->setValue(info.defaultValue.toInt()); + } + else if(info.type.contains("BIGINT")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + lineEdit->setText(info.defaultValue.toString()); + } + else if(info.type.contains("REAL") || info.type.contains("DOUBLE PRECISION")) + { + QDoubleSpinBox* dbSpin = qobject_cast(pro.proEditer); + if(dbSpin) + dbSpin->setValue(info.defaultValue.toDouble()); + } + else if(info.type.contains("NUMERIC") || info.type.contains("DECIMAL")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + lineEdit->setText(info.defaultValue.toString()); + } + else if(info.type.contains("SERIAL") || info.type.contains("BIGSERIAL")) + { + QLabel* label = qobject_cast(pro.proEditer); + if(label) + label->setText(info.defaultValue.toString()); + } + else if(info.type.contains("CHAR") || info.type.contains("VARCHAR")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + lineEdit->setText(info.defaultValue.toString()); + } + else if(info.type.contains("TEXT")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + lineEdit->setText(info.defaultValue.toString()); + } + else if(info.type.contains("BYTEA")) + { + QLabel* label = qobject_cast(pro.proEditer); + if(label) + label->setText(info.defaultValue.toString()); + } + else if(info.type.contains("DATE")) + { + QDateEdit* dateEdit = qobject_cast(pro.proEditer); + QDate date = QDate::fromString(info.defaultValue.toString(), "yyyy-MM-dd"); + if(dateEdit) + dateEdit->setDate(date); + } + else if(info.type.contains("TIME")) + { + QTimeEdit* timeEdit = qobject_cast(pro.proEditer); + QTime time = QTime::fromString(info.defaultValue.toString(), "HH:mm:ss"); + if(timeEdit) + timeEdit->setTime(time); + } + else if(info.type.contains("TIMESTAMP")) + { + QDateTimeEdit* dateTimeEidt = qobject_cast(pro.proEditer); + QDateTime dateTime = QDateTime::fromString(info.defaultValue.toString(), "yyyy-MM-dd HH:mm:ss"); + if(dateTimeEidt) + dateTimeEidt->setDateTime(dateTime); + } + else if(info.type.contains("UUID")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + lineEdit->setText(info.defaultValue.toString()); + } + else if(info.type.contains("JSON") || info.type.contains("JSONB")) + { + QLineEdit* lineEdit = qobject_cast(pro.proEditer); + if(lineEdit) + lineEdit->setText(info.defaultValue.toString()); + } + } +} + +QFormLayout* PropertyContentDlg::createFormLayout() +{ + QFormLayout* layout = new QFormLayout; + layout->setHorizontalSpacing(20); // 标签与控件间距 + layout->setVerticalSpacing(12); // 行间距 + layout->setLabelAlignment(Qt::AlignRight); // 标签右对齐 + layout->setContentsMargins(12, 12, 12, 12); // 内边距 + return layout; +} diff --git a/diagramCavas/source/util/baseSelector.cpp b/diagramCavas/source/util/baseSelector.cpp index c16f0c8..5a0ebc1 100644 --- a/diagramCavas/source/util/baseSelector.cpp +++ b/diagramCavas/source/util/baseSelector.cpp @@ -371,7 +371,9 @@ void BaseSelector::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, Design GraphicsItemType tpe = item->getItemType(); if(tpe != GIT_link) { - item->showPropertyDlg(_model->getTopWidget()); + QString modelName = item->getModelName(); //todo:additem时填写模型类型 + QUuid uuid = item->itemId(); + _model->showModelDlg(modelName,uuid); } } } diff --git a/diagramCavas/source/util/creatingSelector.cpp b/diagramCavas/source/util/creatingSelector.cpp index a2a12ed..c2c15c4 100644 --- a/diagramCavas/source/util/creatingSelector.cpp +++ b/diagramCavas/source/util/creatingSelector.cpp @@ -113,7 +113,6 @@ void CreatingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, Designer //m_graphicsItem[sceneName()].insert(QString::number(m_pCreatingItem->itemId()),m_pCreatingItem); //插入数据到总表 m_pCreatingItem->setModelName(m_creatingItemInfo.modelName); _model->addNodeItem(m_pCreatingItem->itemId(),m_pCreatingItem); - _model->addModelProperty(m_creatingItemInfo); //添加当前模型状态 m_pCreatingItem = nullptr; //先舍弃多次点击创建对象241124 by } } diff --git a/diagramCavas/ui/itemPropertyDlg.ui b/diagramCavas/ui/itemPropertyDlg.ui index 3636d6d..147fdfb 100644 --- a/diagramCavas/ui/itemPropertyDlg.ui +++ b/diagramCavas/ui/itemPropertyDlg.ui @@ -53,272 +53,93 @@ - - - 10 - - - 10 - - - 10 - - - 10 - - - 10 - - - - - + + + + + + 150 + 0 + + + + background-color: rgb(219, 219, 219); - - - - - - - 12 - - - - 间隔信息 - - - - - - - Qt::Orientation::Vertical - - - - 20 - 471 - - - - - - - - - - - Microsoft YaHei UI - 10 - false - false - + + + background-color: rgb(219, 219, 219); + + + + + + + + + + + + + 0 + 30 + - background-color: rgb(224, 224, 224); -color:black; -font: 10pt "Microsoft YaHei UI"; + background-color: rgb(219, 219, 219); - - - - 6 - - - 6 - - - 6 - - - 6 - - - - - 间隔信息 - - - - - - 是否锚定电流 - - - - - - - Qt::Orientation::Vertical - - - - - - - 90.000000000000000 - - - - - - - 电压下限 - - - - - - - Qt::Orientation::Vertical - - - - - - - 电流下限 - - - - - - - 200.000000000000000 - - - 110.000000000000000 - - - - - - - 10000.000000000000000 - - - 2.000000000000000 - - - - - - - 是否锚定电压 - - - - - - - 电流上限 - - - - - - - 45.000000000000000 - - - - - - - 200.000000000000000 - - - 55.000000000000000 - - - - - - - 电压上限 - - - - - - - 电阻 - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 354 - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Orientation::Horizontal - - - - 223 - 20 - - - - - - - - 取消 - - - - - - - 应用 - - - - - - - 确定 - - - - - - - - - + + + + + + 0 + 0 + + + + + 80 + 20 + + + + + 14 + + + + color: rgb(6, 6, 6); + + + 确定 + + + + + + + + 80 + 20 + + + + + 14 + + + + color: rgb(6, 6, 6); + + + 取消 + + + + diff --git a/diagramUtils/CMakeLists.txt b/diagramUtils/CMakeLists.txt index aa643b0..da41fae 100644 --- a/diagramUtils/CMakeLists.txt +++ b/diagramUtils/CMakeLists.txt @@ -2,6 +2,7 @@ project(diagramUtils) set(DIAGRAMUTILS_HEADER_FILES include/logger.h + include/dataManager.h ../common/include/global.h ../common/include/compiler.hpp ../common/include/export.hpp @@ -11,6 +12,7 @@ set(DIAGRAMUTILS_HEADER_FILES set(DIAGRAMUTILS_SOURCE_FILES source/logger.cpp source/dataBase.cpp + source/dataManager.cpp ../common/source/global.cpp ) diff --git a/diagramUtils/include/dataManager.h b/diagramUtils/include/dataManager.h new file mode 100644 index 0000000..0822dbc --- /dev/null +++ b/diagramUtils/include/dataManager.h @@ -0,0 +1,37 @@ +#ifndef DATAMANAGER_H +#define DATAMANAGER_H + +#include +#include "global.h" +#include "export.hpp" +/****数据管理类 + * 对模型数据的集中分发、更新 +*****/ +typedef QMap ModleStateMap; +typedef QMap ModelDataMap; + +class DIAGRAM_DESIGNER_PUBLIC DataManager : public QObject +{ + Q_OBJECT + +public: + explicit DataManager(QObject *parent = nullptr); + ~DataManager(); + + static DataManager& instance(); +public: + void initialModelState(); + void initialModelData(); + + void updateModelData(const QString& sModel,QUuid uuid,const QString& sGroup,QMap mapPro); + + ModleStateMap& modelState(); + ModelDataMap& modelData(); +private: + ModleStateMap _modelStateInfo; //接收的模型结构信息(可直接返回引用) + ModelDataMap _modleDataInfo; //模型实时数据(使用接口获取数据) + + bool _stateInitialised; + bool _dataInitialised; +}; +#endif // DATAMANAGER_H diff --git a/diagramUtils/source/dataManager.cpp b/diagramUtils/source/dataManager.cpp new file mode 100644 index 0000000..d3f69eb --- /dev/null +++ b/diagramUtils/source/dataManager.cpp @@ -0,0 +1,135 @@ +#include +#include "dataManager.h" +#include "DataBase.h" + +DataManager& DataManager::instance() +{ + //采用静态局部变量的方式,静态局部变量的初始化是在第一次访问时,以后的调用不会多次初始化,并且生命周期和程序一致 + static DataManager instance; + return instance; +} + +DataManager::DataManager(QObject *parent) + : QObject(parent) +{ + _stateInitialised = false; + _dataInitialised = false; +} + +DataManager::~DataManager() +{ + +} + +void DataManager::initialModelState() +{ + QMap model = DataBase::GetInstance()->getAllProjectModel(); + + QMap::Iterator iter; + for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 + { + modelStateInfo modelInfo; + modelInfo.modelType = iter.value(); //模型类型 + + groupStateInfo groupInfo; + QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); + + QMap::Iterator it; + for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 + { + groupInfo.groupName = it.key(); + groupInfo.tableName = it->tableName; + QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); + + for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 + { + propertyStateInfo propertyInfo; + + QJsonObject node = nodeJson.toObject(); + QString propertyName = node["name"].toString(); + int nState = node["checked"].toInt(); + QString dataType = node["type"].toString(); + QVariant defaultValue = node["defaultValue"].toVariant(); + int lengthPrecision = node["lengthPrecision"].toInt(); + if(nState) + { + //todo:别名赋值 + propertyInfo.name = propertyName; + propertyInfo.type = dataType; + propertyInfo.defaultValue = defaultValue; + propertyInfo.lengthPrecision = lengthPrecision; + + groupInfo.info.insert(propertyName,propertyInfo); + } + } + modelInfo.groupInfo.insert(it.key(),groupInfo); + } + _modelStateInfo.insert(iter.key(),modelInfo); + } + _stateInitialised = true; +} + +void DataManager::initialModelData() +{ + QMap model = DataBase::GetInstance()->getAllProjectModel(); + + QMap::Iterator iter; + for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 + { + modelDataInfo modelInfo; + modelInfo.modelType = iter.value(); //模型类型 + + QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); + + QMap::Iterator it; + for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 + { + groupStateValue groupValue; + groupValue.groupName = it.key(); + QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); + + QStringList lstParam; //需检索的属性组中属性名列表 + + for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 + { + propertyStateInfo propertyInfo; + + QJsonObject node = nodeJson.toObject(); + QString propertyName = node["name"].toString(); + int nState = node["checked"].toInt(); + QString dataType = node["type"].toString(); + QVariant defaultValue = node["defaultValue"].toVariant(); + + if(nState) + { + lstParam.append(propertyName); + } + } + lstParam.append("global_uuid"); //全局id未添加到属性状态中,手动选择 + groupValue.mapInfo = DataBase::GetInstance()->selectGroupProperty(it->tableName,lstParam); //返回表中属性值 + + modelInfo.groupInfo.insert(it.key(),groupValue); + } + _modleDataInfo.insert(iter.key(),modelInfo); + } + _dataInitialised = true; +} + +void DataManager::updateModelData(const QString& sModel,QUuid uuid,const QString& sGroup,QMap mapPro) +{ + +} + +ModleStateMap& DataManager::modelState() +{ + if(!_stateInitialised) + initialModelState(); + return _modelStateInfo; +} + +ModelDataMap& DataManager::modelData() +{ + if(!_dataInitialised) + initialModelData(); + return _modleDataInfo; +} diff --git a/include/electricElementsBox.h b/include/electricElementsBox.h index d68ab06..95b2ab2 100644 --- a/include/electricElementsBox.h +++ b/include/electricElementsBox.h @@ -29,7 +29,7 @@ public slots: private: ToolBox* m_pToolBox; QMap m_mapPanels; - QMap _modelInfo; //模型信息 + QMap _modelInfo; //模型结构信息 }; #endif diff --git a/source/electricElementsBox.cpp b/source/electricElementsBox.cpp index 970384b..44e87de 100644 --- a/source/electricElementsBox.cpp +++ b/source/electricElementsBox.cpp @@ -5,13 +5,13 @@ #include "toolBox.h" #include "util/baseSelector.h" #include "dataBase.h" +#include "dataManager.h" ElectricElementsBox::ElectricElementsBox(QObject *parent) : QObject(parent), m_pToolBox(nullptr) { m_pToolBox = new ToolBox(); - } ElectricElementsBox::~ElectricElementsBox() @@ -22,6 +22,7 @@ ElectricElementsBox::~ElectricElementsBox() void ElectricElementsBox::initial() { + getModelInfo(); addPanelItems("Items"); } @@ -48,48 +49,9 @@ ToolBox* ElectricElementsBox::getToolBox() const void ElectricElementsBox::getModelInfo() { - QMap model = DataBase::GetInstance()->getAllProjectModel(); - - QMap::Iterator iter; - for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 - { - modelStateInfo modelInfo; - modelInfo.modelType = iter.value(); //模型类型 - - groupStateInfo groupInfo; - QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); - - QMap::Iterator it; - for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 - { - groupInfo.groupName = it.key(); - groupInfo.tableName = it->tableName; - QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); - - for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 - { - propertyStateInfo propertyInfo; - - QJsonObject node = nodeJson.toObject(); - QString propertyName = node["name"].toString(); - int nState = node["checked"].toInt(); - QString dataType = node["type"].toString(); - QString defaultValue = node["defaultValue"].toString(); - - if(nState) - { - //todo:别名赋值 - propertyInfo.name = propertyName; - propertyInfo.type = dataType; - propertyInfo.defaultValue = defaultValue; - - groupInfo.info.insert(propertyName,propertyInfo); - } - } - modelInfo.groupInfo.insert(it.key(),groupInfo); - } - _modelInfo.insert(iter.key(),modelInfo); - } + DataManager::instance().initialModelState(); + DataManager::instance().initialModelData(); + _modelInfo = DataManager::instance().modelState(); } void ElectricElementsBox::updateModelList() diff --git a/source/projectModelDlg.cpp b/source/projectModelDlg.cpp index 1db60f4..7430487 100644 --- a/source/projectModelDlg.cpp +++ b/source/projectModelDlg.cpp @@ -936,6 +936,7 @@ QJsonObject projectModelDlg::getSelectedState(MapProperty::Iterator iter) node["checked"] = 1; node["type"] = dataTypePart; node["defaultValue"] = defaultValue; + node["lengthPrecision"] = lengthPrecision; arrState.append(node); } } @@ -963,6 +964,7 @@ QJsonObject projectModelDlg::getSelectedState(MapProperty::Iterator iter) node["checked"] = 0; node["type"] = dataTypePart; node["defaultValue"] = defaultValue; + node["lengthPrecision"] = lengthPrecision; arrState.append(node); } }