diff --git a/CMakeLists.txt b/CMakeLists.txt index de8b30e..4d4ba90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,7 @@ set(H_HEADER_FILES common/include/global.h common/include/tools.h common/include/httpInterface.h + common/include/baseProperty.h common/include/compiler.hpp common/include/export.hpp common/include/operatingSystem.hpp @@ -81,6 +82,7 @@ set(CPP_SOURCE_FILES common/source/httpInterface.cpp common/source/global.cpp common/source/tools.cpp + common/source/baseProperty.cpp ) set(UI_FILES ui/mainwindow.ui diff --git a/common/include/baseProperty.h b/common/include/baseProperty.h new file mode 100644 index 0000000..20c7e2a --- /dev/null +++ b/common/include/baseProperty.h @@ -0,0 +1,88 @@ +#ifndef BASEPROPERTY_H +#define BASEPROPERTY_H + +#include +#include +#include "global.h" + +class BaseProperty:public QObject //属性类,存放电路元件属性 +{ + Q_OBJECT +public: + BaseProperty(QObject* parent); + virtual ~BaseProperty(); + + void setUuid(QUuid id) {uUid = id;} + QUuid uuid() const {return uUid;} + void setModelName(QString sName) {sModelName = sName;} + QString modelName() const {return sModelName;} + void setType(int n) {nType = n;} + int type() const {return nType;} + void setTag(QString s){sTag = s;} + QString tag() const {return sTag;} + void setName(QString s){sName = s;} + QString name() const {return sName;} + void setPath(QString s){sPath = s;} + QString path() const {return sPath;} + void setDescription(QString s) {sDescription = s;} + QString description() const {return sDescription;} + void setInService(bool b) {bInService = b;} + bool inService() {return bInService;} + void setState(int n) {nState = n;} + int state() const {return nState;} + void setStatus(int n) {nStatus = n;} + int status() const {return nStatus;} + void setConnectedBus(QJsonObject j) {jConnectedBus = j;} + QJsonObject connectedBus() const {return jConnectedBus;} + void setLabel(QJsonObject j){jLabel = j;} + QJsonObject label() const {return jLabel;} + void setContext(QJsonObject j){jContext = j;} + QJsonObject context() const {return jContext;} + void setGrid(const QString& s) {sGrid = s;} + QString grid() const {return sGrid;} + void setZone(const QString& s) {sZone = s;} + QString zone() const {return sZone;} + void setStation(const QString& s) {sStation = s;} + QString station() const {return sStation;} + + void setPrepareDelete(bool b) {_prepareDelete = b;} + bool prepareDelete() const {return _prepareDelete;} + void setDataChanged(bool b) {_dataChanged = b;} //数据变换标签 + bool dataChanged() const {return _dataChanged;} + void notifyUpdate(){emit updateData();} +signals: + void updateData(); //通知数据拥有者更新 +protected: + QUuid uUid; + QString sModelName; //模型名 + int nType; //设备类型 + QString sTag; + QString sName; + QString sPath; + QString sDescription; + QString sGrid; + QString sZone; + QString sStation; + bool bInService; + int nState; + int nStatus; + QJsonObject jConnectedBus; + QJsonObject jLabel; + QJsonObject jContext; //存放port信息 + + bool _dataChanged; //数据状态,为真则写入库 + bool _prepareDelete; //状态,为真准备删除 +}; + +typedef QMap VariableMap; //属性名,值 + +class VariableProperty:public BaseProperty //收到的变量数据 +{ + Q_OBJECT +public: + VariableProperty(QObject* parent); + ~VariableProperty(); + + modelDataInfo getPropertyValue() const; +}; +#endif // DATABASE_H diff --git a/common/include/global.h b/common/include/global.h index d125856..b26c8b6 100644 --- a/common/include/global.h +++ b/common/include/global.h @@ -68,6 +68,7 @@ enum Attribute //元模属性字段对照 IsNotNull = Qt::UserRole + 7, DefaultValue = Qt::UserRole + 8, ValueRange = Qt::UserRole + 9, + IsVisible = Qt::UserRole + 10 }; enum TableDelegateContent //代理内容 @@ -139,6 +140,7 @@ struct attribute //属性表(元模属性字段) int isNotNull=0; //是否非空 QString defaultValue; //默认值 QString valueRange; //数值范围 + int isVisible = 1; }; struct modelAttribute //模型属性表(所有模型属性的索引) @@ -195,6 +197,8 @@ struct propertyStateInfo //属性 int lengthPrecision = 999; //长度限制 }; +Q_DECLARE_METATYPE(propertyStateInfo); + typedef QMap PropertyValueInfo; struct groupStateInfo //属性组(结构信息) @@ -307,6 +311,23 @@ struct DiagramContent { //QHash connectionColors; // <连接ID, 显示颜色> QHash> connectionPaths; // 自定义路径点 }; + +struct PtExtraInfo +{ + int id; + QString transRatio; //变比 + QString accuracyClass; //精度等级 + QString secondaryLoadCapacity; //二次负载容量 + QString windingConnectionMethod; //绕组接法 +}; + +struct CtExtraInfo +{ + int id; + QString transRatio; //变比 + QString accuracyClass; //精度等级 + QString secondaryLoadCapacity; //二次负载容量 +}; //================================================== struct componentInfo @@ -327,18 +348,16 @@ struct componentInfo QJsonObject connected_bus; QJsonObject label; QJsonObject context; - int page_id = 0; int op = 0; }; struct topologicInfo { int id = -1; - int page_id; QUuid uuid_from; QUuid uuid_to; - QUuid pin_from; - QUuid pin_to; + QUuid from_pin; + QUuid to_pin; int flag; QString description; int op; @@ -349,12 +368,36 @@ struct pageInfo int id = -1; QString tag; QString name; - int status; QJsonObject label; QJsonObject context; QString description; int op; }; + +struct gridInfo +{ + int id = -1; + QString name; + QString description; +}; + +struct zoneInfo +{ + int id = -1; + int grid_id = -1; + QString name; + QString description; +}; + +struct stationInfo +{ + int id = -1; + int zone_id = -1; + QString name; + QString description; + bool is_local = true; +}; + /*struct busStability { int componentId = 0; diff --git a/common/source/baseProperty.cpp b/common/source/baseProperty.cpp new file mode 100644 index 0000000..bd0ac66 --- /dev/null +++ b/common/source/baseProperty.cpp @@ -0,0 +1,44 @@ +#include "baseProperty.h" +#include "dataManager.h" + +/****************************属性****************************/ + +BaseProperty::BaseProperty(QObject* parent) + : QObject(parent) +{ + nType = 0; //设备类型 + bInService = true; + nState = 1; + nStatus = 1; + + _dataChanged = false; + _prepareDelete = false; + + sGrid=QString("1"); //暂时修改,数据库字段不为空 + sZone=QString("1"); + sStation=QString("1"); +} + +BaseProperty::~BaseProperty() +{ + +} + +/*************************属性变量*************************/ + +VariableProperty::VariableProperty(QObject* parent) + :BaseProperty(parent) +{ + +} + +VariableProperty::~VariableProperty() +{ + +} + +modelDataInfo VariableProperty::getPropertyValue() const +{ + ModelDataMap mapData = DataManager::instance().modelData(); + return mapData[sModelName]; +} diff --git a/diagramCavas/CMakeLists.txt b/diagramCavas/CMakeLists.txt index 3b0e360..d06f89e 100644 --- a/diagramCavas/CMakeLists.txt +++ b/diagramCavas/CMakeLists.txt @@ -16,6 +16,8 @@ set(DIAGRAMCAVAS_HEADER_FILES include/topologyManager.h include/baseInfoDlg.h include/baseContentDlg.h + include/ptExtraInfoDlg.h + include/ctExtraInfoDlg.h include/graphicsDataModel/baseModel.h include/graphicsDataModel/fixedPortsModel.h include/graphicsItem/electricConnectLineItem.h @@ -43,6 +45,7 @@ set(DIAGRAMCAVAS_HEADER_FILES include/util/subMovingSelector.h ../common/include/httpInterface.h ../common/include/global.h + ../common/include/baseProperty.h ../common/include/compiler.hpp ../common/include/export.hpp ../common/include/operatingSystem.hpp @@ -63,7 +66,8 @@ set(DIAGRAMCAVAS_SOURCE_FILES source/topologyManager.cpp source/baseInfoDlg.cpp source/baseContentDlg.cpp - #source/serializable.cpp + source/ptExtraInfoDlg.cpp + source/ctExtraInfoDlg.cpp source/graphicsDataModel/baseModel.cpp source/graphicsDataModel/fixedPortsModel.cpp source/graphicsItem/electricConnectLineItem.cpp @@ -90,12 +94,15 @@ set(DIAGRAMCAVAS_SOURCE_FILES source/util/selectorManager.cpp source/util/subMovingSelector.cpp ../common/source/httpInterface.cpp + ../common/source/baseProperty.cpp ) set(UI_FILES ui/drawingPanel.ui ui/itemPropertyDlg.ui ui/baseInfoDlg.ui + ui/ptExtraInfoDlg.ui + ui/ctExtraInfoDlg.ui ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) diff --git a/diagramCavas/include/baseContentDlg.h b/diagramCavas/include/baseContentDlg.h index 7ed1560..72d2549 100644 --- a/diagramCavas/include/baseContentDlg.h +++ b/diagramCavas/include/baseContentDlg.h @@ -9,6 +9,8 @@ 属性组界面基类 ********************************************************/ +class BaseProperty; + class BaseContentDlg : public QDialog { Q_OBJECT @@ -17,8 +19,10 @@ public: BaseContentDlg(QWidget *parent = nullptr); virtual ~BaseContentDlg(); virtual void createGroupView(groupStateInfo) = 0; //创建页面 - virtual QMap getPropertyValue() = 0; //返回当前页面的属性值 - virtual void setPropertyValue(QMap) = 0; + virtual QMap getPropertyValue(BaseProperty* = nullptr) = 0; //返回当前页面的属性值 + //void setPropertyValue(QMap); + //void setPropertyValue(BaseProperty*); + virtual void setPropertyValue(QVariant) = 0; protected: QMap _mapPro; QFormLayout* createFormLayout(QWidget* parent); diff --git a/diagramCavas/include/baseInfoDlg.h b/diagramCavas/include/baseInfoDlg.h index 3aebf3e..5f15b56 100644 --- a/diagramCavas/include/baseInfoDlg.h +++ b/diagramCavas/include/baseInfoDlg.h @@ -8,6 +8,7 @@ QT_BEGIN_NAMESPACE namespace Ui { class baseInfoDlg; } QT_END_NAMESPACE +class QButtonGroup; class BaseInfoDlg : public BaseContentDlg { @@ -17,11 +18,11 @@ public: ~BaseInfoDlg(); virtual void createGroupView(groupStateInfo); - virtual QMap getPropertyValue(); - virtual void setPropertyValue(QMap); + virtual QMap getPropertyValue(BaseProperty* = nullptr); + virtual void setPropertyValue(QVariant); private: Ui::baseInfoDlg *ui; - + QButtonGroup* _stateGroup; }; #endif diff --git a/diagramCavas/include/ctExtraInfoDlg.h b/diagramCavas/include/ctExtraInfoDlg.h new file mode 100644 index 0000000..249a8ca --- /dev/null +++ b/diagramCavas/include/ctExtraInfoDlg.h @@ -0,0 +1,39 @@ +#ifndef CTEXTRAINFODLG_H +#define CTEXTRAINFODLG_H + +#include +#include "baseContentDlg.h" +#include "global.h" +/******************************************************* + ct扩展信息界面 +********************************************************/ +QT_BEGIN_NAMESPACE +namespace Ui { class ctExtraInfoDlg; } +QT_END_NAMESPACE + +class BaseProperty; +class QButtonGroup; + +class CtExtraInfoDlg : public BaseContentDlg +{ + Q_OBJECT + +public: + CtExtraInfoDlg(QWidget *parent = nullptr); + virtual ~CtExtraInfoDlg(); + virtual void createGroupView(groupStateInfo); + virtual QMap getPropertyValue(BaseProperty* = nullptr); //返回当前页面的属性值 + virtual void setPropertyValue(QVariant); +public slots: + void onAddClicked(); + void onDeleteClicked(); +protected: + void addTableRow(QString,QString,QString,int id = -1); +private: + Ui::ctExtraInfoDlg *ui; + QMap _mapCT; + QButtonGroup* _stateGroup_ct; + int _count; +}; + +#endif diff --git a/diagramCavas/include/graphicsItem/electricSvgItemBus.h b/diagramCavas/include/graphicsItem/electricSvgItemBus.h index 0f6400a..c6e9bb9 100644 --- a/diagramCavas/include/graphicsItem/electricSvgItemBus.h +++ b/diagramCavas/include/graphicsItem/electricSvgItemBus.h @@ -2,6 +2,7 @@ #define ELECTRICSVGITEMBUS_H #include "electricSvgItem.h" +#include "baseProperty.h" class ElectricSvgItemBus :public ElectricSvgItem { @@ -19,11 +20,4 @@ private: virtual void updateHandles(); }; -class ElectricSvgItemBus_Property: public BaseProperty -{ - Q_OBJECT -public: - ElectricSvgItemBus_Property(QObject* parent); - ~ElectricSvgItemBus_Property(); -}; #endif diff --git a/diagramCavas/include/graphicsItem/electricSvgItemTriangle.h b/diagramCavas/include/graphicsItem/electricSvgItemTriangle.h index d5a1251..c7e7f0f 100644 --- a/diagramCavas/include/graphicsItem/electricSvgItemTriangle.h +++ b/diagramCavas/include/graphicsItem/electricSvgItemTriangle.h @@ -2,6 +2,7 @@ #define ELECTRICSVGITEMTRIANGLE_H #include "electricSvgItem.h" +#include "baseProperty.h" class ElectricSvgItemTriangle :public ElectricSvgItem { @@ -16,12 +17,4 @@ private: double m_dTopRatioX; double m_dBottomRatioX; }; - -class ElectricSvgItemTriangle_Property: public BaseProperty -{ - Q_OBJECT -public: - ElectricSvgItemTriangle_Property(QObject* parent); - ~ElectricSvgItemTriangle_Property(); -}; #endif diff --git a/diagramCavas/include/graphicsItem/graphicsBaseItem.h b/diagramCavas/include/graphicsItem/graphicsBaseItem.h index 23ee0dc..6960332 100644 --- a/diagramCavas/include/graphicsItem/graphicsBaseItem.h +++ b/diagramCavas/include/graphicsItem/graphicsBaseItem.h @@ -514,85 +514,4 @@ protected: PowerEntity* _pEntity; //图元拓扑 }; -class BaseProperty:public QObject //属性类,存放电路元件属性 -{ - Q_OBJECT -public: - BaseProperty(QObject* parent); - virtual ~BaseProperty(); - - void setUuid(QUuid id) {uUid = id;} - QUuid uuid() const {return uUid;} - void setModelName(QString sName) {sModelName = sName;} - QString modelName() const {return sModelName;} - void setType(int n) {nType = n;} - int type() const {return nType;} - void setPage(int n){nPageId = n;} - int page() const {return nPageId;} - void setTag(QString s){sTag = s;} - QString tag() const {return sTag;} - void setName(QString s){sName = s;} - QString name() const {return sName;} - void setPath(QString s){sPath = s;} - QString path() const {return sPath;} - void setDescription(QString s) {sDescription = s;} - QString description() const {return sDescription;} - void setInService(bool b) {bInService = b;} - bool inService() {return bInService;} - void setState(int n) {nState = n;} - int state() const {return nState;} - void setConnectedBus(QJsonObject j) {jConnectedBus = j;} - QJsonObject connectedBus() const {return jConnectedBus;} - void setLabel(QJsonObject j){jLabel = j;} - QJsonObject label() const {return jLabel;} - void setContext(QJsonObject j){jContext = j;} - QJsonObject context() const {return jContext;} - void setGrid(const QString& s) {sGrid = s;} - QString grid() const {return sGrid;} - void setZone(const QString& s) {sZone = s;} - QString zone() const {return sZone;} - void setStation(const QString& s) {sStation = s;} - QString station() const {return sStation;} - - void setPrepareDelete(bool b) {_prepareDelete = b;} - bool prepareDelete() const {return _prepareDelete;} - void setDataChanged(bool b) {_dataChanged = b;} //数据变换标签 - bool dataChanged() const {return _dataChanged;} - void notifyUpdate(){emit updateData();} -signals: - void updateData(); //通知数据拥有者更新 -protected: - QUuid uUid; - QString sModelName; //模型名 - int nType; //设备类型 - int nPageId; //暂定为创建本数据的图Id(待定) - QString sTag; - QString sName; - QString sPath; - QString sDescription; - QString sGrid; - QString sZone; - QString sStation; - bool bInService; - int nState; - QJsonObject jConnectedBus; - QJsonObject jLabel; - QJsonObject jContext; //存放port信息 - - bool _dataChanged; //数据状态,为真则写入库 - bool _prepareDelete; //状态,为真准备删除 -}; - -typedef QMap VariableMap; //属性名,值 - -class VariableProperty:public BaseProperty //收到的变量数据 -{ - Q_OBJECT -public: - VariableProperty(QObject* parent); - ~VariableProperty(); - - modelDataInfo getPropertyValue() const; -}; - #endif diff --git a/diagramCavas/include/propertyContentDlg.h b/diagramCavas/include/propertyContentDlg.h index 7ac8fe7..6a3b1a2 100644 --- a/diagramCavas/include/propertyContentDlg.h +++ b/diagramCavas/include/propertyContentDlg.h @@ -19,8 +19,9 @@ public: ~PropertyContentDlg(); virtual void createGroupView(groupStateInfo); //创建页面 - virtual QMap getPropertyValue(); //返回当前页面的属性值 - virtual void setPropertyValue(QMap); + virtual QMap getPropertyValue(BaseProperty* = nullptr); //返回当前页面的属性值 + //void setPropertyValue(QMap); + virtual void setPropertyValue(QVariant); protected: QVBoxLayout* _layout; QWidget* createEditor(propertyStateInfo); //创建属性 diff --git a/diagramCavas/include/ptExtraInfoDlg.h b/diagramCavas/include/ptExtraInfoDlg.h new file mode 100644 index 0000000..ba5cf60 --- /dev/null +++ b/diagramCavas/include/ptExtraInfoDlg.h @@ -0,0 +1,39 @@ +#ifndef PTEXTRAINFODLG_H +#define PTEXTRAINFODLG_H + +#include +#include "baseContentDlg.h" +#include "global.h" +/******************************************************* + 扩展信息界面 +********************************************************/ +QT_BEGIN_NAMESPACE +namespace Ui { class ptExtraInfoDlg; } +QT_END_NAMESPACE + +class BaseProperty; +class QButtonGroup; + +class PtExtraInfoDlg : public BaseContentDlg +{ + Q_OBJECT + +public: + PtExtraInfoDlg(QWidget *parent = nullptr); + virtual ~PtExtraInfoDlg(); + virtual void createGroupView(groupStateInfo); + virtual QMap getPropertyValue(BaseProperty* = nullptr); //返回当前页面的属性值 + virtual void setPropertyValue(QVariant); +public slots: + void onAddClicked(); + void onDeleteClicked(); +protected: + void addTableRow(QString,QString,QString,QString,int id = -1); +private: + Ui::ptExtraInfoDlg *ui; + QMap _mapPT; + QButtonGroup* _stateGroup_pt; + int _count; +}; + +#endif diff --git a/diagramCavas/include/topologyManager.h b/diagramCavas/include/topologyManager.h index 96ef949..5bd55bf 100644 --- a/diagramCavas/include/topologyManager.h +++ b/diagramCavas/include/topologyManager.h @@ -47,11 +47,6 @@ public: PowerEntity* findDiagram(const QString& id) const; bool deleteDiagram(const QString& id); - //===========================元件实时数据================================ - void insertEntityData(QUuid,BaseProperty*); - BaseProperty* findEntityData(QUuid); - void deleteEntityData(QUuid); - QMap getEntityData() const; public: // 接线点管理 PowerTerminal* createTerminal(const QString& parentEntityId, @@ -81,8 +76,6 @@ private: // 连接存储 QHash m_connections; QMultiHash m_connectionIndex; // 接线点ID到连接的映射 - - QMap m_entityData; //每个实例化元件的唯一数据 private: QHash m_allTerminals; // ID到接线点映射 QHash> m_terminalsByEntity; // 实体ID到接线点列表 diff --git a/diagramCavas/source/baseInfoDlg.cpp b/diagramCavas/source/baseInfoDlg.cpp index 23ed55d..e861059 100644 --- a/diagramCavas/source/baseInfoDlg.cpp +++ b/diagramCavas/source/baseInfoDlg.cpp @@ -1,12 +1,20 @@ #include "baseInfoDlg.h" +#include "graphicsItem/graphicsBaseItem.h" #include "ui_baseInfoDlg.h" +#include "dataBase.h" +#include "global.h" +#include "baseProperty.h" +#include "basePropertyManager.h" +#include BaseInfoDlg::BaseInfoDlg(QWidget *parent) : BaseContentDlg(parent) , ui(new Ui::baseInfoDlg) { ui->setupUi(this); - //this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); + _stateGroup = new QButtonGroup(this); + _stateGroup->addButton(ui->rb_inService,1); + _stateGroup->addButton(ui->rb_outService,0); } BaseInfoDlg::~BaseInfoDlg() @@ -16,50 +24,87 @@ BaseInfoDlg::~BaseInfoDlg() void BaseInfoDlg::createGroupView(groupStateInfo infos) { + QList lstGrid = DataBase::GetInstance()->getAllGrid(); + QList lstZone = DataBase::GetInstance()->getAllZone(); + QList lstStation = DataBase::GetInstance()->getAllStation(); + for(auto &info:lstGrid) + { + ui->cb_grid->addItem(info.name,info.id); + } + + for(auto &info:lstZone) + { + ui->cb_zone->addItem(info.name,info.id); + } + + for(auto &info:lstStation) + { + ui->cb_station->addItem(info.name,info.id); + } } -QMap BaseInfoDlg::getPropertyValue() +QMap BaseInfoDlg::getPropertyValue(BaseProperty* pPro) { QMap map; - propertyStateInfo uuid; - uuid.type = "UUID"; - uuid.name = "global_uuid"; - uuid.defaultValue = ui->le_uuid->text(); - map.insert(uuid.name,uuid); + if(pPro) + { + pPro->setTag(ui->le_tag->text()); + pPro->setPath(ui->le_nameSpace->text()); + pPro->setName(ui->le_name->text()); + pPro->setLabel(QJsonObject()); + pPro->setDescription(ui->le_description->text()); + pPro->setGrid(ui->cb_grid->currentText()); + pPro->setZone(ui->cb_zone->currentText()); + pPro->setStation(ui->cb_station->currentText()); - propertyStateInfo tag; - tag.type = "VARCHAR"; - tag.name = "tag"; - tag.defaultValue = ui->le_tag->text(); - map.insert(tag.name,tag); + QJsonObject connectBus; + connectBus["bay_name"] = ui->le_bayName->text(); + connectBus["bay_offset_outer"] = ui->le_idx_1->text(); + connectBus["bay_offset_inner"] = ui->le_idx_2->text(); + connectBus["from_uuid"] = ui->le_from->text(); + connectBus["to_uuid"] = ui->le_to->text(); + pPro->setConnectedBus(connectBus); + pPro->setInService(_stateGroup->checkedId()); + pPro->setState(ui->le_status->text().toInt()); - propertyStateInfo nsPath; - nsPath.type = "VARCHAR"; - nsPath.name = "nspath"; - nsPath.defaultValue = ui->le_nameSpace->text(); - map.insert(nsPath.name,nsPath); - - propertyStateInfo pName; - pName.type = "VARCHAR"; - pName.name = "name"; - pName.defaultValue = ui->le_name->text(); - map.insert(pName.name,pName); - - propertyStateInfo label; - label.type = "JSONB"; - label.name = "label"; - label.defaultValue = ui->le_label->text(); - map.insert(label.name,label); + emit BasePropertyManager::instance().dataChanged(pPro->uuid().toString()); + } return map; } -void BaseInfoDlg::setPropertyValue(QMap map) +void BaseInfoDlg::setPropertyValue(QVariant var) { - for(auto &info:map) + BaseProperty* pPro = static_cast(var.value()); + if(pPro) { - propertyContentInfo pro = _mapPro[info.name]; + ui->le_uuid->setText(pPro->uuid().toString()); + ui->le_tag->setText(pPro->tag()); + ui->le_nameSpace->setText(pPro->path()); + ui->le_name->setText(pPro->name()); + ui->le_label->setText(""); //label josn格式暂不解析 + ui->le_description->setText(pPro->description()); + ui->cb_grid->setCurrentText(pPro->grid()); + ui->cb_zone->setCurrentText(pPro->zone()); + ui->cb_station->setCurrentText(pPro->station()); + ui->le_status->setText(QString::number(pPro->state())); //page status字段将移动到component + + QJsonObject connectBus = pPro->connectedBus(); + QString bay_name = connectBus["bay_name"].toString(); + QString bay_offset_outer = connectBus["bay_offset_outer"].toString(); + QString bay_offset_inner = connectBus["bay_offset_inner"].toString(); + QString from_uuid = connectBus["from_uuid"].toString(); + QString to_uuid = connectBus["to_uuid"].toString(); + ui->le_bayName->setText(bay_name); + ui->le_idx_1->setText(bay_offset_outer); + ui->le_idx_2->setText(bay_offset_inner); + ui->le_from->setText(from_uuid); + ui->le_to->setText(to_uuid); + if(pPro->inService() == 1) + ui->rb_inService->setChecked(true); + else + ui->rb_outService->setChecked(true); } } diff --git a/diagramCavas/source/ctExtraInfoDlg.cpp b/diagramCavas/source/ctExtraInfoDlg.cpp new file mode 100644 index 0000000..beb576a --- /dev/null +++ b/diagramCavas/source/ctExtraInfoDlg.cpp @@ -0,0 +1,226 @@ +#include "ctExtraInfoDlg.h" +#include "ui_ctExtraInfoDlg.h" +#include "baseProperty.h" +#include "basePropertyManager.h" +#include +#include + +CtExtraInfoDlg::CtExtraInfoDlg(QWidget *parent) + : BaseContentDlg(parent) + , ui(new Ui::ctExtraInfoDlg) +{ + ui->setupUi(this); + _stateGroup_ct = new QButtonGroup(this); + _stateGroup_ct->addButton(ui->rb_tpt_ct,1); + _stateGroup_ct->addButton(ui->rb_zst_ct,0); + + connect(ui->btn_add_ct,&QPushButton::clicked,this,&CtExtraInfoDlg::onAddClicked); + _count = 0; +} + +CtExtraInfoDlg::~CtExtraInfoDlg() +{ + delete ui; +} + +void CtExtraInfoDlg::createGroupView(groupStateInfo infos) +{ + for(auto& info:infos.info) { + propertyContentInfo inf; + inf.proName = info.name; + inf.proType = info.type; + _mapPro.insert(info.name,inf); + } +} + +QMap CtExtraInfoDlg::getPropertyValue(BaseProperty* pPro) +{ + QMap map; + + for(auto &pro:_mapPro) + { + propertyStateInfo info; + info.type = pro.proType; + info.name = pro.proName; + if(info.name == "额定电流") //此处应为类型名 + { + info.defaultValue = ui->le_ratedCurrent->text(); + } + else if(info.name == "工频耐压") + { + info.defaultValue = ui->le_pfwv_ct->text(); + } + else if(info.name == "冲击耐压") + { + info.defaultValue = ui->le_iwv_ct->text(); + } + else if(info.name == "动稳定电流") + { + info.defaultValue = ui->le_dsc_ct->text(); + } + else if(info.name == "仪表保安系数") + { + info.defaultValue = ui->le_isf->text(); + } + else if(info.name == "短时热电流") + { + info.defaultValue = ui->le_sttc->text(); + } + else if(info.name == "额定频率") + { + info.defaultValue = ui->le_rf_ct->text(); + } + else if(info.name == "相数") + { + if(ui->rb_tpt_ct->isChecked()) + info.defaultValue = 1; + else + info.defaultValue = 0; + } + else if(info.name == "ct绕组") + { + QJsonObject object; + QJsonArray arr; + for(auto info:_mapCT) + { + QJsonObject obj; + obj["id"] = info.id; + obj["transformationRatio"] = info.transRatio; + obj["accuracyClass"] = info.accuracyClass; + obj["secondaryLoadCapacity"] = info.secondaryLoadCapacity; + arr.push_back(obj); + } + object["winding"] = arr; + info.defaultValue = object; + } + map.insert(pro.proName,info); + } + return map; +} + +void CtExtraInfoDlg::setPropertyValue(QVariant var) +{ + BaseProperty* pPro = static_cast(var.value()); + if(pPro) + { + QMap map = var.value>(); + for(auto &info:map) + { + if(info.name == "额定电流") //此处应为类型名 + { + ui->le_ratedCurrent->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "工频耐压") + { + ui->le_pfwv_ct->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "冲击耐压") + { + ui->le_iwv_ct->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "动稳定电流") + { + ui->le_dsc_ct->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "仪表保安系数") + { + ui->le_isf->setText(info.defaultValue.toString()); + } + else if(info.name == "短时热电流") + { + ui->le_sttc->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "额定频率") + { + ui->le_rf_ct->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "相数") + { + if(info.defaultValue.toInt() == 1) + ui->rb_tpt_ct->setChecked(true); + else + ui->rb_zst_ct->setChecked(true); + } + else if(info.name == "ct绕组") + { + QJsonObject object = info.defaultValue.toJsonObject(); + QJsonArray arr = object["winding"].toArray(); + for (QJsonValueRef jsonObj : arr) + { + QJsonObject node = jsonObj.toObject(); + int id = node["id"].toInt(); + QString sTr = node["transformationRatio"].toString(); + QString sAr = node["accuracyClass"].toString(); + QString sSlc = node["secondaryLoadCapacity"].toString(); + + addTableRow(sTr,sAr,sSlc,id); + } + } + } + } +} + +void CtExtraInfoDlg::onAddClicked() +{ + QString sTr = ui->le_tr_ct->text(); + QString sAr = ui->le_ac_ct->text(); + QString sSlc = ui->le_slc_ct->text(); + addTableRow(sTr,sAr,sSlc); +} + +void CtExtraInfoDlg::onDeleteClicked() +{ + QPushButton *btn = qobject_cast(sender()); + if (btn) { + // 获取按钮在表格中的位置 + QModelIndex index = ui->tb_ct->indexAt(btn->pos()); + if (index.isValid()) { + QTableWidgetItem* pFirstItem = ui->tb_ct->item(index.row(),0); + int id = pFirstItem->data(Qt::UserRole).toInt(); + _mapCT.remove(QString::number(id)); + ui->tb_ct->removeRow(index.row()); + } + } +} + +void CtExtraInfoDlg::addTableRow(QString sTr,QString sAr,QString sSlc,int id) +{ + if(_mapCT.contains(QString::number(id))) + { + return; + } + + CtExtraInfo info; + if(id == -1){ //缺省id时新建,否则加载 + info.id = _count; + _count += 1; + } + else{ + info.id = id; + } + + int row = ui->tb_ct->rowCount(); + ui->tb_ct->insertRow(row); + + // 变比(输入框) + QTableWidgetItem *item = new QTableWidgetItem(sTr); + item->setData(Qt::UserRole,info.id); + ui->tb_ct->setItem(row, 0, item); + + // 精度等级(下拉框) + ui->tb_ct->setItem(row, 1, new QTableWidgetItem(sAr)); + + // 二次负载容量(输入框) + ui->tb_ct->setItem(row, 2, new QTableWidgetItem(sSlc)); + + + // 删除按钮 + QPushButton *deleteBtn = new QPushButton("删除"); + connect(deleteBtn, &QPushButton::clicked, this, &CtExtraInfoDlg::onDeleteClicked); + ui->tb_ct->setCellWidget(row, 3, deleteBtn); + + info.transRatio = sTr; + info.accuracyClass = sAr; + info.secondaryLoadCapacity = sSlc; + _mapCT.insert(QString::number(info.id),info); +} diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index a01bc51..eb3c911 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -101,7 +101,7 @@ void DiagramCavas::onSignal_savePage() } if(DataBase::GetInstance()->getPageIdByName(_curPage) == -1) //不存在,创建 - DataBase::GetInstance()->insertPage(_curPage,_curPage,1,QJsonObject(),pPanel->getDiagramInfo(),QString("page"),1); + DataBase::GetInstance()->insertPage(_curPage,_curPage,QJsonObject(),pPanel->getDiagramInfo(),QString("page"),1); else DataBase::GetInstance()->updatePage(_curPage,_curPage,pPanel->getDiagramInfo()); int pageId = DataBase::GetInstance()->getPageIdByName(_curPage); diff --git a/diagramCavas/source/drawingPanel.cpp b/diagramCavas/source/drawingPanel.cpp index 82a37e2..e92a9c6 100644 --- a/diagramCavas/source/drawingPanel.cpp +++ b/diagramCavas/source/drawingPanel.cpp @@ -125,7 +125,7 @@ void DrawingPanel::closeEvent(QCloseEvent *closeEvent) pItem->updateConnectData(); } if(DataBase::GetInstance()->getPageIdByName(_name) == -1) //不存在,创建 - DataBase::GetInstance()->insertPage(_name,_name,1,QJsonObject(),getDiagramInfo(),QString("page"),1); + DataBase::GetInstance()->insertPage(_name,_name,QJsonObject(),getDiagramInfo(),QString("page"),1); else DataBase::GetInstance()->updatePage(_name,_name,getDiagramInfo()); int pageId = DataBase::GetInstance()->getPageIdByName(_name); diff --git a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp index ea1fde1..e405bdf 100644 --- a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp +++ b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp @@ -13,8 +13,10 @@ #include "dataManager.h" #include "powerEntity.h" #include "topologyManager.h" +#include "basePropertyManager.h" #include #include +#include "baseProperty.h" bool FixedPortsModel::_dataInitialised = false; @@ -91,7 +93,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos) //todo:load图形时必有拓扑实体,关联到对应的entity BaseProperty* pro = nullptr; GraphicsBaseItem* item = nullptr; - QMap mapData = TopologyManager::instance().getEntityData(); //加载的图形必定关联component(todo:完善判断条件,如判断拓扑节点) + QMap mapData = BasePropertyManager::instance().getEntityData(); //加载的图形必定关联component(todo:完善判断条件,如判断拓扑节点) if(mapData.contains(id)) { pro = mapData[id]; @@ -154,7 +156,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos) BaseProperty* FixedPortsModel::addNodeData(QUuid id,int type,QString name,QString modelName) { - BaseProperty* pData = TopologyManager::instance().findEntityData(id); //已存在不不创建 + BaseProperty* pData = BasePropertyManager::instance().findEntityData(id); //已存在不不创建 if(pData != nullptr) return pData; @@ -168,7 +170,7 @@ BaseProperty* FixedPortsModel::addNodeData(QUuid id,int type,QString name,QStrin item->setType(type); item->setTag(name); item->setName(name); - TopologyManager::instance().insertEntityData(id,item); + BasePropertyManager::instance().insertEntityData(id,item); } return item; } @@ -181,7 +183,6 @@ void FixedPortsModel::loadNodeDataFromDataBase() for(auto &info:lst) { BaseProperty* pData = addNodeData(info.uuid,info.type,info.name,info.modelName); - pData->setPage(info.page_id); pData->setTag(info.tag); pData->setName(info.name); pData->setPath(info.nspath); @@ -205,7 +206,7 @@ void FixedPortsModel::loadNodeDataFromDataBase() QList lstTopo = DataBase::GetInstance()->getAllTopologics(); for(auto &info:lstTopo) { - TopologyManager::instance().createConnection(QString::number(info.id),info.pin_from.toString(),info.pin_to.toString(),info.uuid_from.toString(),info.uuid_to.toString()); + TopologyManager::instance().createConnection(QString::number(info.id),info.from_pin.toString(),info.to_pin.toString(),info.uuid_from.toString(),info.uuid_to.toString()); } _dataInitialised = true; } @@ -455,7 +456,7 @@ QVariant FixedPortsModel::nodeData(QUuid nodeId, NodeRole role) const void FixedPortsModel::saveNode(int nPageId) { - QMap mapData = TopologyManager::instance().getEntityData(); + QMap mapData = BasePropertyManager::instance().getEntityData(); for(auto &pData:mapData) { if(pData->prepareDelete()) @@ -480,7 +481,7 @@ void FixedPortsModel::saveNode(int nPageId) } else { - DataBase::GetInstance()->insertComponent(pData->uuid(),pData->modelName(),pData->path(),pData->tag(),pData->name(),pData->description(),pData->grid(),pData->zone(),pData->station(),pData->type(),true,pData->state(),pData->connectedBus(),pData->label(),pData->context(),nPageId,1); + DataBase::GetInstance()->insertComponent(pData->uuid(),pData->modelName(),pData->path(),pData->tag(),pData->name(),pData->description(),pData->grid(),pData->zone(),pData->station(),pData->type(),true,pData->state(),pData->status(),pData->connectedBus(),pData->label(),pData->context(),1); for(auto &val:dataInfo.groupInfo) { DataBase::GetInstance()->insertDynamicProperty(pData->uuid(),val); @@ -508,7 +509,7 @@ void FixedPortsModel::saveNode(int nPageId) TopologyManager::instance().removeConnection(pCon->id()); break; case DataState::changed: - DataBase::GetInstance()->insertTopologic(nPageId,con.nSrcNodeId,con.nDestNodeId,con.nSrcPortId,con.nDestPortId,0,"",0); + DataBase::GetInstance()->insertTopologic(con.nSrcNodeId,con.nDestNodeId,con.nSrcPortId,con.nDestPortId,0,"",0); break; default: break; @@ -521,7 +522,7 @@ void FixedPortsModel::onSignal_ifExits(QUuid id,const QString& str,int type,Grap { bool exist = false; BaseProperty* pData = nullptr; - QMap mapData = TopologyManager::instance().getEntityData(); + QMap mapData = BasePropertyManager::instance().getEntityData(); for(auto pro:mapData) { if(pro->tag() == str) diff --git a/diagramCavas/source/graphicsItem/electricSvgItemBus.cpp b/diagramCavas/source/graphicsItem/electricSvgItemBus.cpp index 1e6b117..5c2df02 100644 --- a/diagramCavas/source/graphicsItem/electricSvgItemBus.cpp +++ b/diagramCavas/source/graphicsItem/electricSvgItemBus.cpp @@ -58,16 +58,3 @@ void ElectricSvgItemBus::paint(QPainter* painter, const QStyleOptionGraphicsItem { ElectricSvgItem::paint(painter,option,widget); } - -/************************************************************************/ - -ElectricSvgItemBus_Property::ElectricSvgItemBus_Property(QObject* parent) - :BaseProperty(parent) -{ - -} - -ElectricSvgItemBus_Property::~ElectricSvgItemBus_Property() -{ - -} diff --git a/diagramCavas/source/graphicsItem/electricSvgItemTriangle.cpp b/diagramCavas/source/graphicsItem/electricSvgItemTriangle.cpp index db198f4..5697175 100644 --- a/diagramCavas/source/graphicsItem/electricSvgItemTriangle.cpp +++ b/diagramCavas/source/graphicsItem/electricSvgItemTriangle.cpp @@ -76,15 +76,3 @@ void ElectricSvgItemTriangle::paint(QPainter* painter, const QStyleOptionGraphic ElectricSvgItem::paint(painter,option,widget); } -/***********************************************************/ -ElectricSvgItemTriangle_Property::ElectricSvgItemTriangle_Property(QObject* parent) - :BaseProperty(parent) -{ - -} - -ElectricSvgItemTriangle_Property::~ElectricSvgItemTriangle_Property() -{ - -} - diff --git a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp index 370864c..82da3eb 100644 --- a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp +++ b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp @@ -3,7 +3,7 @@ #include "graphicsItem/handleText.h" #include "graphicsItem/itemPort.h" #include "graphicsItem/electricConnectLineItem.h" -#include "dataManager.h" +#include "baseProperty.h" #include #include @@ -334,44 +334,3 @@ void GraphicsBaseItem::onUpdateData() { updateByProperty(); } -/****************************属性****************************/ - -BaseProperty::BaseProperty(QObject* parent) - : QObject(parent) -{ - nType = 0; //设备类型 - nPageId = 0; //暂定为创建本数据的图Id(待定) - bInService = true; - nState = 1; - - _dataChanged = false; - _prepareDelete = false; - - sGrid=QString("1"); //暂时修改,数据库字段不为空 - sZone=QString("1"); - sStation=QString("1"); -} - -BaseProperty::~BaseProperty() -{ - -} - -/*************************属性变量*************************/ - -VariableProperty::VariableProperty(QObject* parent) - :BaseProperty(parent) -{ - -} - -VariableProperty::~VariableProperty() -{ - -} - -modelDataInfo VariableProperty::getPropertyValue() const -{ - ModelDataMap mapData = DataManager::instance().modelData(); - return mapData[sModelName]; -} diff --git a/diagramCavas/source/itemPropertyDlg.cpp b/diagramCavas/source/itemPropertyDlg.cpp index a66bd42..35496e4 100644 --- a/diagramCavas/source/itemPropertyDlg.cpp +++ b/diagramCavas/source/itemPropertyDlg.cpp @@ -6,6 +6,11 @@ #include "ui_itemPropertyDlg.h" #include "baseContentDlg.h" #include "baseInfoDlg.h" +//#include "topologyManager.h" +#include "basePropertyManager.h" +#include "baseProperty.h" +#include "ptExtraInfoDlg.h" +#include "ctExtraInfoDlg.h" ItemPropertyDlg::ItemPropertyDlg(QWidget *parent) : QDialog(parent) @@ -71,11 +76,13 @@ void ItemPropertyDlg::onOkClicked() } } QMap::Iterator iter; + BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_); for(iter = groupViews_.begin();iter != groupViews_.end();++iter) { - PropertyContentDlg* pDlg = qobject_cast(iter.value()); - QMap mapPro = pDlg->getPropertyValue(); - DataManager::instance().updateModelData(_curModel,curUuid_,iter.key(),mapPro); + BaseContentDlg* pDlg = qobject_cast(iter.value()); + QMap mapPro = pDlg->getPropertyValue(pPro); + if(!mapPro.empty()) + DataManager::instance().updateModelData(_curModel,curUuid_,iter.key(),mapPro); } hide(); } @@ -95,11 +102,18 @@ void ItemPropertyDlg::onGroupSelected(const QString& str) if(pDlg) { QMap valueMap; - if(groupValue_[str].mapInfo.contains(curUuid_)) - valueMap = groupValue_[str].mapInfo[curUuid_]; - else //没有值时使用默认值 - valueMap = groupInfo_[str].info; - pDlg->setPropertyValue(valueMap); + BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_); + if(str != QString("component") && str != QString("基本信息")) + { + if(groupValue_[str].mapInfo.contains(curUuid_)) + valueMap = groupValue_[str].mapInfo[curUuid_]; + else //没有值时使用默认值 + valueMap = groupInfo_[str].info; + pDlg->setPropertyValue(QVariant::fromValue(valueMap)); + } + else{ + pDlg->setPropertyValue(QVariant::fromValue(static_cast(pPro))); + } } ui->stackedWidget->setCurrentWidget(groupViews_[str]); @@ -110,10 +124,15 @@ void ItemPropertyDlg::createGroupView(const QString& str) { //todo:基础信息、间隔信息、动态界面在此分支 BaseContentDlg* contentDlg = nullptr; + BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_); if(str == QString("component") || str == QString::fromWCharArray(L"基本信息")){ contentDlg = new BaseInfoDlg(ui->stackedWidget); } - else if(str == "bayInfo" || str == QString::fromWCharArray(L"间隔信息")){ + else if(str == "base_extend" || str == QString::fromWCharArray(L"扩展信息")){ + //if(pPro->type() == pt) + contentDlg = new CtExtraInfoDlg(ui->stackedWidget); + } + else if(str == "bay" || str == QString::fromWCharArray(L"间隔信息")){ } else{ diff --git a/diagramCavas/source/propertyContentDlg.cpp b/diagramCavas/source/propertyContentDlg.cpp index 189cbdb..64a35b8 100644 --- a/diagramCavas/source/propertyContentDlg.cpp +++ b/diagramCavas/source/propertyContentDlg.cpp @@ -148,7 +148,7 @@ QWidget* PropertyContentDlg::createEditor(propertyStateInfo pro) return pWidget; } -QMap PropertyContentDlg::getPropertyValue() +QMap PropertyContentDlg::getPropertyValue(BaseProperty* pPro) { QMap map; @@ -243,8 +243,9 @@ QMap PropertyContentDlg::getPropertyValue() return map; } -void PropertyContentDlg::setPropertyValue(QMap map) +void PropertyContentDlg::setPropertyValue(QVariant var) { + QMap map = var.value>(); for(auto &info:map) { propertyContentInfo pro = _mapPro[info.name]; diff --git a/diagramCavas/source/ptExtraInfoDlg.cpp b/diagramCavas/source/ptExtraInfoDlg.cpp new file mode 100644 index 0000000..7d4197f --- /dev/null +++ b/diagramCavas/source/ptExtraInfoDlg.cpp @@ -0,0 +1,220 @@ +#include "ptExtraInfoDlg.h" +#include "ui_ptExtraInfoDlg.h" +#include "baseProperty.h" +#include "basePropertyManager.h" +#include +#include + +PtExtraInfoDlg::PtExtraInfoDlg(QWidget *parent) + : BaseContentDlg(parent) + , ui(new Ui::ptExtraInfoDlg) +{ + ui->setupUi(this); + _stateGroup_pt = new QButtonGroup(this); + _stateGroup_pt->addButton(ui->rb_tpt_pt,1); + _stateGroup_pt->addButton(ui->rb_spt_pt,0); + + connect(ui->btn_add_pt,&QPushButton::clicked,this,&PtExtraInfoDlg::onAddClicked); + _count = 0; +} + +PtExtraInfoDlg::~PtExtraInfoDlg() +{ + delete ui; +} + +void PtExtraInfoDlg::createGroupView(groupStateInfo infos) +{ + for(auto& info:infos.info) { + propertyContentInfo inf; + inf.proName = info.name; + inf.proType = info.type; + _mapPro.insert(info.name,inf); + } +} + +QMap PtExtraInfoDlg::getPropertyValue(BaseProperty* pPro) +{ + QMap map; + + for(auto &pro:_mapPro) + { + propertyStateInfo info; + info.type = pro.proType; + info.name = pro.proName; + if(info.name == "额定电压") //此处应为类型名 + { + info.defaultValue = ui->le_ratedVol->text(); + } + else if(info.name == "工频耐压") + { + info.defaultValue = ui->le_pfwv_pt->text(); + } + else if(info.name == "冲击耐压") + { + info.defaultValue = ui->le_iwv_pt->text(); + } + else if(info.name == "额定电压因数") + { + info.defaultValue = ui->le_ratedVolFactor->text(); + } + else if(info.name == "一次绕组接线接地方式") + { + info.defaultValue = ui->le_pwwgm->text(); + } + else if(info.name == "额定频率") + { + info.defaultValue = ui->le_rf_pt->text(); + } + else if(info.name == "相数") + { + if(ui->rb_tpt_pt->isChecked()) + info.defaultValue = 1; + else + info.defaultValue = 0; + } + else if(info.name == "pt绕组") + { + QJsonObject object; + QJsonArray arr; + for(auto info:_mapPT) + { + QJsonObject obj; + obj["id"] = info.id; + obj["transformationRatio"] = info.transRatio; + obj["accuracyClass"] = info.accuracyClass; + obj["secondaryLoadCapacity"] = info.secondaryLoadCapacity; + obj["windingConnectionMethod"] = info.windingConnectionMethod; + arr.push_back(obj); + } + object["winding"] = arr; + info.defaultValue = object; + } + map.insert(pro.proName,info); + } + return map; +} + +void PtExtraInfoDlg::setPropertyValue(QVariant var) +{ + QMap map = var.value>(); + for(auto &info:map) + { + if(info.name == "额定电压") //此处应为类型名 + { + ui->le_ratedVol->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "工频耐压") + { + ui->le_pfwv_pt->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "冲击耐压") + { + ui->le_iwv_pt->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "额定电压因数") + { + ui->le_ratedVolFactor->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "一次绕组接线接地方式") + { + ui->le_pwwgm->setText(info.defaultValue.toString()); + } + else if(info.name == "额定频率") + { + ui->le_rf_pt->setText(QString::number(info.defaultValue.toDouble())); + } + else if(info.name == "相数") + { + if(info.defaultValue.toInt() == 1) + ui->rb_tpt_pt->setChecked(true); + else + ui->rb_spt_pt->setChecked(true); + } + else if(info.name == "pt绕组") + { + QJsonObject object = info.defaultValue.toJsonObject(); + QJsonArray arr = object["winding"].toArray(); + for (QJsonValueRef jsonObj : arr) + { + QJsonObject node = jsonObj.toObject(); + int id = node["id"].toInt(); + QString sTr = node["transformationRatio"].toString(); + QString sAr = node["accuracyClass"].toString(); + QString sSlc = node["secondaryLoadCapacity"].toString(); + QString sWin = node["windingConnectionMethod"].toString(); + + addTableRow(sTr,sAr,sSlc,sWin,id); + } + } + } +} + +void PtExtraInfoDlg::onAddClicked() +{ + QString sTr = ui->le_tr_pt->text(); + QString sAr = ui->le_ac_pt->text(); + QString sSlc = ui->le_slc_pt->text(); + QString sWinding = ui->cb_wcm->currentText(); + addTableRow(sTr,sAr,sSlc,sWinding); +} + +void PtExtraInfoDlg::onDeleteClicked() +{ + QPushButton *btn = qobject_cast(sender()); + if (btn) { + // 获取按钮在表格中的位置 + QModelIndex index = ui->tb_pt->indexAt(btn->pos()); + if (index.isValid()) { + QTableWidgetItem* pFirstItem = ui->tb_pt->item(index.row(),0); + int id = pFirstItem->data(Qt::UserRole).toInt(); + _mapPT.remove(QString::number(id)); + ui->tb_pt->removeRow(index.row()); + } + } +} + +void PtExtraInfoDlg::addTableRow(QString sTr,QString sAr,QString sSlc,QString sWinding,int id) +{ + if(_mapPT.contains(QString::number(id))) + { + return; + } + + PtExtraInfo info; + if(id == -1){ //缺省id时新建,否则加载 + info.id = _count; + _count += 1; + } + else{ + info.id = id; + } + + int row = ui->tb_pt->rowCount(); + ui->tb_pt->insertRow(row); + + // 变比(输入框) + QTableWidgetItem *item = new QTableWidgetItem(sTr); + item->setData(Qt::UserRole,info.id); + ui->tb_pt->setItem(row, 0, item); + + // 精度等级(下拉框) + ui->tb_pt->setItem(row, 1, new QTableWidgetItem(sAr)); + + // 二次负载容量(输入框) + ui->tb_pt->setItem(row, 2, new QTableWidgetItem(sSlc)); + + // 绕组接法(下拉框) + ui->tb_pt->setItem(row, 3, new QTableWidgetItem(sWinding)); + + // 删除按钮 + QPushButton *deleteBtn = new QPushButton("删除"); + connect(deleteBtn, &QPushButton::clicked, this, &PtExtraInfoDlg::onDeleteClicked); + ui->tb_pt->setCellWidget(row, 4, deleteBtn); + + info.transRatio = sTr; + info.accuracyClass = sAr; + info.secondaryLoadCapacity = sSlc; + info.windingConnectionMethod = sWinding; + _mapPT.insert(QString::number(info.id),info); +} diff --git a/diagramCavas/source/topologyManager.cpp b/diagramCavas/source/topologyManager.cpp index 838c1b7..ea0d1d2 100644 --- a/diagramCavas/source/topologyManager.cpp +++ b/diagramCavas/source/topologyManager.cpp @@ -29,8 +29,6 @@ void TopologyManager::clearAllData() m_entities.clear(); m_allTerminals.clear(); //端点由父亲entity释放 - - m_entityData.clear(); //data数据由系统自动释放 } PowerEntity* TopologyManager::createEntity(EntityType type,const QString& uuid, const QString& name) @@ -378,29 +376,6 @@ bool TopologyManager::deleteDiagram(const QString& id) return true; } -void TopologyManager::insertEntityData(QUuid uid,BaseProperty* p) -{ - if(!m_entityData.contains(uid)) - m_entityData.insert(uid,p); -} - -BaseProperty* TopologyManager::findEntityData(QUuid uid) -{ - return m_entityData.value(uid,nullptr); -} - -void TopologyManager::deleteEntityData(QUuid uid) -{ - BaseProperty* pData = m_entityData.value(uid,nullptr); - if(pData) - delete pData; -} - -QMap TopologyManager::getEntityData() const -{ - return m_entityData; -} - PowerTerminal* TopologyManager::createTerminal(const QString& parentEntityId, TerminalType type, const QString& name, diff --git a/diagramCavas/ui/baseInfoDlg.ui b/diagramCavas/ui/baseInfoDlg.ui index dedc87d..98864d8 100644 --- a/diagramCavas/ui/baseInfoDlg.ui +++ b/diagramCavas/ui/baseInfoDlg.ui @@ -183,7 +183,7 @@ border-radius:5px; - + false @@ -298,7 +298,7 @@ border-radius:5px; - + false diff --git a/diagramCavas/ui/ctExtraInfoDlg.ui b/diagramCavas/ui/ctExtraInfoDlg.ui new file mode 100644 index 0000000..941e45a --- /dev/null +++ b/diagramCavas/ui/ctExtraInfoDlg.ui @@ -0,0 +1,355 @@ + + + ctExtraInfoDlg + + + + 0 + 0 + 764 + 597 + + + + + 12 + + + + Form + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 10 + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + border:4px double dark; + + + + + + + + + + 额定电流 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + A + + + + + + + 动稳定电流 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + A + + + + + + + 短时热电流 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + As + + + + + + + 工频耐压 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + V/1min + + + + + + + 冲击耐压 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + V + + + + + + + 仪表保安系数 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + 额定频率 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + Hz + + + + + + + 相数 + + + + + + + 三相互感器 + + + + + + + 零序互感器 + + + + + + + 本元件内含CT的配置: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + 变比 + + + + + + + false + + + + + + + 精度等级 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + 二次负载容量 + + + + + + + false + + + + + + + + 23 + 23 + + + + + 23 + 23 + + + + + + + + + + + + false + + + 180 + + + true + + + + 变比 + + + + + 精度等级 + + + + + 二次负载容量 + + + + + 删除 + + + + + + + + + diff --git a/diagramCavas/ui/ptExtraInfoDlg.ui b/diagramCavas/ui/ptExtraInfoDlg.ui new file mode 100644 index 0000000..0555cf9 --- /dev/null +++ b/diagramCavas/ui/ptExtraInfoDlg.ui @@ -0,0 +1,344 @@ + + + ptExtraInfoDlg + + + + 0 + 0 + 728 + 564 + + + + + 12 + + + + Form + + + + 10 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + border:4px double dark; + + + + + + + + + + 额定电压 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + V + + + + + + + 工频耐压 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + V/1min + + + + + + + 冲击耐压 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + V + + + + + + + 额定电压因数 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + 一次绕组接线接地方式 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + 额定频率 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + + + + + Hz + + + + + + + 相数 + + + + + + + 三相互感器 + + + + + + + 单相互感器 + + + + + + + 本元件内含PT二次绕组的配置: + + + + + + + 变比 + + + + + + + false + + + + + + + 精度等级 + + + + + + + false + + + + + + + 二次负载容量 + + + + + + + false + + + + + + + 绕组接法 + + + + + + + Y + + + + Y + + + + + Δ + + + + + + + + + 23 + 23 + + + + + 23 + 23 + + + + + + + + + + + + false + + + 130 + + + true + + + + 变比 + + + + + 精度等级 + + + + + 二次负载容量 + + + + + 绕组接法 + + + + + 删除 + + + + + + + + + diff --git a/diagramUtils/CMakeLists.txt b/diagramUtils/CMakeLists.txt index 8a1a283..e3891ea 100644 --- a/diagramUtils/CMakeLists.txt +++ b/diagramUtils/CMakeLists.txt @@ -4,7 +4,9 @@ set(DIAGRAMUTILS_HEADER_FILES include/logger.h include/dataManager.h include/componentIconManager.h + include/basePropertyManager.h ../common/include/global.h + ../common/include/baseProperty.h ../common/include/compiler.hpp ../common/include/export.hpp ../common/include/operatingSystem.hpp @@ -14,8 +16,10 @@ set(DIAGRAMUTILS_SOURCE_FILES source/logger.cpp source/dataBase.cpp source/dataManager.cpp + source/basePropertyManager.cpp source/componentIconManager.cpp ../common/source/global.cpp + ../common/source/baseProperty.cpp ) diff --git a/diagramUtils/include/basePropertyManager.h b/diagramUtils/include/basePropertyManager.h new file mode 100644 index 0000000..ba93847 --- /dev/null +++ b/diagramUtils/include/basePropertyManager.h @@ -0,0 +1,34 @@ +#ifndef BASEPROPERTYMANAGER_H +#define BASEPROPERTYMANAGER_H + +#include +#include +#include "export.hpp" +/****元件属性数据管理类*****/ + +class BaseProperty; + +class DIAGRAM_DESIGNER_PUBLIC BasePropertyManager : public QObject +{ + Q_OBJECT + +public: + explicit BasePropertyManager(QObject *parent = nullptr); + ~BasePropertyManager(); + + static BasePropertyManager& instance(); + + //===========================元件实时数据================================ + void insertEntityData(QUuid,BaseProperty*); + BaseProperty* findEntityData(QUuid); + void deleteEntityData(QUuid); + QMap getEntityData() const; +signals: + void dataCreated(QString uuid); + void dataChanged(QString uuid); +public slots: + void onDataDelete(QString uuid); +private: + QMap m_entityData; //每个实例化元件的唯一数据 +}; +#endif // BASEPROPERTYMANAGER_H diff --git a/diagramUtils/include/dataBase.h b/diagramUtils/include/dataBase.h index 1e0a493..fbeda7e 100644 --- a/diagramUtils/include/dataBase.h +++ b/diagramUtils/include/dataBase.h @@ -26,23 +26,27 @@ public: static DataBase* GetInstance(); public: - bool insertPage(QString tag,QString name,int status,QJsonObject label,QJsonObject context,QString description,int op); + bool insertPage(QString tag,QString name,QJsonObject label,QJsonObject context,QString description,int op); bool insertStation(int zoneId,QString name,QString description,bool isLocal,int op); bool insertGrid(QString name,QString description,int op); bool insertZone(int grid_id,QString name,QString description,int op); - bool insertTopologic(int page_id,QUuid uuid_from,QUuid uuid_to,QUuid pin_from,QUuid pin_to,int flag,QString description,int op); + bool insertTopologic(QUuid uuid_from,QUuid uuid_to,QUuid from_pin,QUuid to_pin,int flag,QString description,int op); QString getGridNameById(int); QString getZoneNameById(int); QString getStationNameById(int); + QList getAllGrid(); + QList getAllZone(); + QList getAllStation(); + QList getAllTopologics(); int topologicExist(QUuid fromPin,QUuid toPin); topologicInfo getTopologicById(int id); bool deleteTopologic(QUuid fromPin,QUuid toPin); /*********************************************************************************/ bool updateComponent(QUuid uuid,QString tag,QString name,QJsonObject context); - bool insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int page_id,int op); + bool insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,int status,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int op); bool insertDynamicProperty(QUuid uuid,groupStateValue groupValue); bool updateDynamicProperty(QUuid uuid,groupStateValue groupValue); componentInfo getComponentInfoByUuid(QString uuid); diff --git a/diagramUtils/source/basePropertyManager.cpp b/diagramUtils/source/basePropertyManager.cpp new file mode 100644 index 0000000..555dea7 --- /dev/null +++ b/diagramUtils/source/basePropertyManager.cpp @@ -0,0 +1,49 @@ +#include +#include "basePropertyManager.h" +#include "baseProperty.h" + +BasePropertyManager& BasePropertyManager::instance() +{ + //采用静态局部变量的方式,静态局部变量的初始化是在第一次访问时,以后的调用不会多次初始化,并且生命周期和程序一致 + static BasePropertyManager instance; + return instance; +} + +BasePropertyManager::BasePropertyManager(QObject *parent) + : QObject(parent) +{ + +} + +BasePropertyManager::~BasePropertyManager() +{ + +} + +void BasePropertyManager::insertEntityData(QUuid uid,BaseProperty* p) +{ + if(!m_entityData.contains(uid)) + m_entityData.insert(uid,p); +} + +BaseProperty* BasePropertyManager::findEntityData(QUuid uid) +{ + return m_entityData.value(uid,nullptr); +} + +void BasePropertyManager::deleteEntityData(QUuid uid) +{ + BaseProperty* pData = m_entityData.value(uid,nullptr); + if(pData) + delete pData; +} + +QMap BasePropertyManager::getEntityData() const +{ + return m_entityData; +} + +void BasePropertyManager::onDataDelete(QString uuid) +{ + +} diff --git a/diagramUtils/source/dataBase.cpp b/diagramUtils/source/dataBase.cpp index d103afd..72dc204 100644 --- a/diagramUtils/source/dataBase.cpp +++ b/diagramUtils/source/dataBase.cpp @@ -226,7 +226,7 @@ QSqlQuery DataBase::executeBatchSQL(const QStringList& sqlStatements, bool creat } -bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int page_id,int op) +bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,int status,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int op) { if(db.open()) { @@ -235,7 +235,7 @@ bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QStri QJsonDocument contextDoc(context); QString strCon = contextDoc.toJson(QJsonDocument::Compact); - qry.prepare("INSERT INTO component(global_uuid, model_name,tag, name, grid, zone, station, type, context, page_id, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + qry.prepare("INSERT INTO component(global_uuid, model_name,tag, name, grid, zone, station, type, context, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); qry.bindValue(0,uuid); qry.bindValue(1,modelName); qry.bindValue(2,tag); @@ -245,9 +245,8 @@ bool DataBase::insertComponent(QUuid uuid,QString modelName,QString nspath,QStri qry.bindValue(6,station); qry.bindValue(7,type); qry.bindValue(8,strCon); - qry.bindValue(9,page_id); - qry.bindValue(10,op); - qry.bindValue(11,QDateTime::currentDateTime()); + qry.bindValue(9,op); + qry.bindValue(10,QDateTime::currentDateTime()); bool res = qry.exec(); QString str = qry.lastQuery(); const QVariantList list = qry.boundValues(); @@ -349,7 +348,7 @@ bool DataBase::updateDynamicProperty(QUuid uuid,groupStateValue groupValue) } } -bool DataBase::insertPage(QString tag,QString name,int status,QJsonObject label,QJsonObject context,QString description,int op) +bool DataBase::insertPage(QString tag,QString name,QJsonObject label,QJsonObject context,QString description,int op) { if(db.open()) { @@ -361,15 +360,14 @@ bool DataBase::insertPage(QString tag,QString name,int status,QJsonObject label, QJsonDocument contextDoc(context); QString strCon = contextDoc.toJson(QJsonDocument::Compact); - qry.prepare("INSERT INTO page(tag, name, status, label, context, description, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); + qry.prepare("INSERT INTO page(tag, name, label, context, description, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?)"); qry.bindValue(0,tag); qry.bindValue(1,name); - qry.bindValue(2,status); - qry.bindValue(3,strLabel); - qry.bindValue(4,strCon); - qry.bindValue(5,description); - qry.bindValue(6,op); - qry.bindValue(7,QDateTime::currentDateTime()); + qry.bindValue(2,strLabel); + qry.bindValue(3,strCon); + qry.bindValue(4,description); + qry.bindValue(5,op); + qry.bindValue(6,QDateTime::currentDateTime()); bool res = qry.exec(); QString str = qry.lastQuery(); if(!res) @@ -457,21 +455,20 @@ bool DataBase::insertZone(int grid_id,QString name,QString description,int op) return false; } -bool DataBase::insertTopologic(int page_id,QUuid uuid_from,QUuid uuid_to,QUuid pin_from,QUuid pin_to,int flag,QString description,int op) +bool DataBase::insertTopologic(QUuid uuid_from,QUuid uuid_to,QUuid from_pin,QUuid to_pin,int flag,QString description,int op) { if(db.open()) { QSqlQuery qry(db); - qry.prepare("INSERT INTO topologic(page_id, uuid_from, uuid_to, pin_from, pin_to, flag, description, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"); - qry.bindValue(0,page_id); - qry.bindValue(1,uuid_from); - qry.bindValue(2,uuid_to); - qry.bindValue(3,pin_from); - qry.bindValue(4,pin_to); - qry.bindValue(5,flag); - qry.bindValue(6,description); - qry.bindValue(7,op); - qry.bindValue(8,QDateTime::currentDateTime()); + qry.prepare("INSERT INTO topologic(uuid_from, uuid_to, from_pin, to_pin, flag, description, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"); + qry.bindValue(0,uuid_from); + qry.bindValue(1,uuid_to); + qry.bindValue(2,from_pin); + qry.bindValue(3,to_pin); + qry.bindValue(4,flag); + qry.bindValue(5,description); + qry.bindValue(6,op); + qry.bindValue(7,QDateTime::currentDateTime()); bool res = qry.exec(); QString str = qry.lastQuery(); if(!res) @@ -554,10 +551,88 @@ QString DataBase::getStationNameById(int id) } } +QList DataBase::getAllGrid() +{ + QList lst; + QString strSQL = "SELECT id, name, description FROM grid"; + + try + { + QSqlQuery query = executeSQL(strSQL); + while (query.next()) + { + gridInfo info; + info.id = query.value(0).toInt(); + info.name = query.value(1).toString(); + info.description = query.value(2).toString(); + lst.append(info); + } + query.clear(); + return lst; + } + catch (const std::exception& e) + { + return lst; + } +} + +QList DataBase::getAllZone() +{ + QList lst; + QString strSQL = "SELECT id,grid_id,name,description FROM zone"; + + try + { + QSqlQuery query = executeSQL(strSQL); + while (query.next()) + { + zoneInfo info; + info.id = query.value(0).toInt(); + info.grid_id = query.value(1).toInt(); + info.name = query.value(2).toString(); + info.description = query.value(3).toString(); + lst.append(info); + } + query.clear(); + return lst; + } + catch (const std::exception& e) + { + return lst; + } +} + +QList DataBase::getAllStation() +{ + QList lst; + QString strSQL = "SELECT id,zone_id,name,description,is_local FROM station"; + + try + { + QSqlQuery query = executeSQL(strSQL); + while (query.next()) + { + stationInfo info; + info.id = query.value(0).toInt(); + info.zone_id = query.value(1).toInt(); + info.name = query.value(2).toString(); + info.description = query.value(3).toString(); + info.is_local = query.value(4).toBool(); + lst.append(info); + } + query.clear(); + return lst; + } + catch (const std::exception& e) + { + return lst; + } +} + QList DataBase::getAllTopologics() { QList lst; - QString strSQL = "SELECT id,uuid_from,uuid_to,pin_from,pin_to,flag FROM topologic"; + QString strSQL = "SELECT id,uuid_from,uuid_to,from_pin,to_pin,flag FROM topologic"; try { @@ -568,8 +643,8 @@ QList DataBase::getAllTopologics() info.id = query.value(0).toInt(); info.uuid_from = QUuid(query.value(1).toString()); info.uuid_to = QUuid(query.value(2).toString()); - info.pin_from = QUuid(query.value(3).toString()); - info.pin_to = QUuid(query.value(4).toString()); + info.from_pin = QUuid(query.value(3).toString()); + info.to_pin = QUuid(query.value(4).toString()); info.flag = query.value(5).toInt(); lst.append(info); @@ -585,7 +660,7 @@ QList DataBase::getAllTopologics() int DataBase::topologicExist(QUuid fromPin,QUuid toPin) { - QString strSQL = "SELECT id FROM topologic WHERE pin_from = ? AND pin_to = ?"; + QString strSQL = "SELECT id FROM topologic WHERE from_pin = ? AND to_pin = ?"; QVariantList params; params.append(fromPin.toString()); params.append(toPin.toString()); @@ -610,7 +685,7 @@ int DataBase::topologicExist(QUuid fromPin,QUuid toPin) topologicInfo DataBase::getTopologicById(int id) { topologicInfo info; - QString strSQL = "SELECT id,uuid_from,uuid_to,pin_from,pin_to,flag FROM topologic WHERE id = ?"; + QString strSQL = "SELECT id,uuid_from,uuid_to,from_pin,to_pin,flag FROM topologic WHERE id = ?"; QVariantList params; params.append(id); @@ -622,8 +697,8 @@ topologicInfo DataBase::getTopologicById(int id) info.id = query.value(0).toInt(); info.uuid_from = QUuid(query.value(1).toString()); info.uuid_to = QUuid(query.value(2).toString()); - info.pin_from = QUuid(query.value(3).toString()); - info.pin_to = QUuid(query.value(4).toString()); + info.from_pin = QUuid(query.value(3).toString()); + info.to_pin = QUuid(query.value(4).toString()); info.flag = query.value(5).toInt(); } query.clear(); @@ -637,7 +712,7 @@ topologicInfo DataBase::getTopologicById(int id) bool DataBase::deleteTopologic(QUuid fromPin,QUuid toPin) { - QString strSQL = "DELETE FROM topologic WHERE pin_from = ? AND pin_to = ?"; + QString strSQL = "DELETE FROM topologic WHERE from_pin = ? AND to_pin = ?"; QVariantList params; params.append(fromPin.toString()); params.append(toPin.toString()); @@ -664,7 +739,7 @@ componentInfo DataBase::getComponentInfoByUuid(QString uuid) QSqlQuery qry(db); //qry.prepare("SELECT * FROM component WHERE global_uuid = ?"); - qry.prepare("SELECT id, global_uuid, model_name, tag, name, grid, zone, station, type, context, page_id, op FROM component WHERE global_uuid = ?"); + qry.prepare("SELECT id, global_uuid, model_name, tag, name, grid, zone, station, type, context, op FROM component WHERE global_uuid = ?"); qry.bindValue(0,uuid); bool res = qry.exec(); QString str = qry.lastQuery(); @@ -688,8 +763,7 @@ componentInfo DataBase::getComponentInfoByUuid(QString uuid) inf.type = qry.value(8).toInt(); QString str = qry.value(9).toString(); inf.context = QstringToJson(str); - inf.page_id = qry.value(10).toInt(); - inf.op = qry.value(11).toInt(); + inf.op = qry.value(10).toInt(); qry.clear(); } } @@ -704,7 +778,7 @@ QList DataBase::getAllComponents() { QSqlQuery qry(db); - qry.prepare("SELECT id, global_uuid, model_name,tag, name, grid, zone, station, type, context, page_id, op FROM component"); + qry.prepare("SELECT id, global_uuid, model_name,tag, name, grid, zone, station, type, context, op FROM component"); bool res = qry.exec(); QString str = qry.lastQuery(); if(!res) @@ -728,8 +802,7 @@ QList DataBase::getAllComponents() inf.type = qry.value(8).toInt(); QString str = qry.value(9).toString(); inf.context = QstringToJson(str); - inf.page_id = qry.value(10).toInt(); - inf.op = qry.value(11).toInt(); + inf.op = qry.value(10).toInt(); lst.push_back(inf); } qry.clear(); @@ -883,7 +956,7 @@ QJsonObject DataBase::getPageContextByName(QString name) QList DataBase::getAllPage() { QList lst; - QString strSQL = "SELECT id,tag,name,status,label,context,description,op FROM page"; + QString strSQL = "SELECT id,tag,name,label,context,description,op FROM page"; try { @@ -894,13 +967,12 @@ QList DataBase::getAllPage() info.id = query.value(0).toInt(); info.tag = query.value(1).toString(); info.name = query.value(2).toString(); - info.status = query.value(3).toInt(); - QString label = query.value(4).toString(); + QString label = query.value(3).toString(); info.label = QstringToJson(label); - QString context = query.value(5).toString(); + QString context = query.value(4).toString(); info.context = QstringToJson(context); - info.description = query.value(6).toString(); - info.op = query.value(7).toInt(); + info.description = query.value(5).toString(); + info.op = query.value(6).toInt(); lst.append(info); } @@ -1250,6 +1322,7 @@ bool DataBase::getAttribute() int inn = query.value(6).toInt(); //非空 QString dv = query.value(7).toString(); //默认值 QString vr = query.value(8).toString(); //范围 + int visible = query.value(9).toInt(); if(!_attribute.contains(id)) { @@ -1263,6 +1336,7 @@ bool DataBase::getAttribute() attribute.isNotNull = inn; attribute.defaultValue = dv; attribute.valueRange = vr; + attribute.isVisible = visible; _attribute.insert(id,attribute); } diff --git a/include/mainwindow.h b/include/mainwindow.h index 27da4f9..bf9b51e 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -45,6 +45,7 @@ private slots: void onAction_createGroup(); void onAction_destroyGroup(); void onAction_editProject(); + void onAction_editBay(); void onSignal_addItem(QGraphicsItem*); void onSignal_deleteItem(); void onSignal_loadPage(); diff --git a/include/selectorDialog.h b/include/selectorDialog.h index 1742b71..cc3a504 100644 --- a/include/selectorDialog.h +++ b/include/selectorDialog.h @@ -16,9 +16,14 @@ public: QString selectedComponent() const { return m_selectedComponent; } + modelType selectedMeta() const { + return m_selectedMeta; + } + private: QListView* m_listView; QString m_selectedComponent; + modelType m_selectedMeta; QDialogButtonBox* m_buttonBox; SelectorDialogType m_dlgType; @@ -26,7 +31,7 @@ private: void setupConnections(); QStandardItemModel * initialModel(); private: - QStringList getMetaList() const; + QList getMetaList() const; }; #endif //SELECTORDIALOG_H diff --git a/include/topologyView.h b/include/topologyView.h index 4b01bac..26382c1 100644 --- a/include/topologyView.h +++ b/include/topologyView.h @@ -30,6 +30,11 @@ public slots: void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单 void onItemChanged(QStandardItem *item); void onItemClicked(const QModelIndex &index); + + void onDataCreated(QString uuid); + void onDataChanged(QString uuid); +private: + void addItemToView(QString sGrid,QString sZone,QString sStation,QStandardItem *root,QStandardItem *item); private: Ui::topologyView *ui; QStandardItemModel* _pModel; diff --git a/source/main.cpp b/source/main.cpp index fa4c4fd..756b60f 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,10 +1,12 @@ #include #include +#include "global.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); CMainWindow w; w.show(); + qRegisterMetaType("propertyStateInfo"); return a.exec(); } diff --git a/source/mainwindow.cpp b/source/mainwindow.cpp index e7c3d06..031e48a 100644 --- a/source/mainwindow.cpp +++ b/source/mainwindow.cpp @@ -145,6 +145,9 @@ void CMainWindow::initializeAction() QAction* actEdit = ui->menuProject->addAction(QString::fromWCharArray(L"编辑工程模")); connect(actEdit,&QAction::triggered,this,&CMainWindow::onAction_editProject); + + QAction* actEditBay = ui->menuBay->addAction(QString::fromWCharArray(L"编辑间隔")); + connect(actEditBay,&QAction::triggered,this,&CMainWindow::onAction_editBay); } void CMainWindow::onAction_zoomIn() @@ -198,6 +201,11 @@ void CMainWindow::onAction_editProject() m_pProjectModelDlg->show(); } +void CMainWindow::onAction_editBay() +{ + +} + void CMainWindow::onSignal_addItem(QGraphicsItem* item) { if(item) diff --git a/source/projectModelDlg.cpp b/source/projectModelDlg.cpp index 5f14415..fca428f 100644 --- a/source/projectModelDlg.cpp +++ b/source/projectModelDlg.cpp @@ -904,7 +904,8 @@ void projectModelDlg::onTableItemClicked(QTableWidgetItem *item) } if(strMeta != "未选择") { - _curMeta = strMeta; + QString sMeta = ui->tableWidget_model->item(row, 1)->data(Qt::EditRole+1).toString(); + _curMeta = sMeta; } } else if(col == TD_ComponentType) //类型选择 @@ -1286,6 +1287,7 @@ void projectModelDlg::setItemAttribute(const QString& name,QStandardItem* p) p->setData(att.isNotNull,IsNotNull); p->setData(att.defaultValue,DefaultValue); p->setData(att.valueRange,ValueRange); + p->setData(att.isVisible,IsVisible); return; } } @@ -1625,6 +1627,7 @@ QJsonObject projectModelDlg::getSelectedState(QList select,QList int lengthPrecision = item->data(LengthPrecision).toInt(); int scale = item->data(Scale).toInt(); QString defaultValue = item->data(DefaultValue).toString(); + int isVisible = item->data(IsVisible).toInt(); QString dataTypePart = dataType; //拼接数据类型 if (lengthPrecision > 0) { @@ -1641,6 +1644,7 @@ QJsonObject projectModelDlg::getSelectedState(QList select,QList node["type"] = dataTypePart; node["defaultValue"] = defaultValue; node["lengthPrecision"] = lengthPrecision; + node["isVisible"] = isVisible; arrState.append(node); } @@ -1650,6 +1654,7 @@ QJsonObject projectModelDlg::getSelectedState(QList select,QList int lengthPrecision = item->data(LengthPrecision).toInt(); int scale = item->data(Scale).toInt(); QString defaultValue = item->data(DefaultValue).toString(); + int isVisible = item->data(IsVisible).toInt(); QString dataTypePart = dataType; //拼接数据类型 if (lengthPrecision > 0) { @@ -1666,6 +1671,7 @@ QJsonObject projectModelDlg::getSelectedState(QList select,QList node["type"] = dataTypePart; node["defaultValue"] = defaultValue; node["lengthPrecision"] = lengthPrecision; + node["isVisible"] = isVisible; arrState.append(node); } diff --git a/source/projectTableDelegate.cpp b/source/projectTableDelegate.cpp index 06aea6e..4498980 100644 --- a/source/projectTableDelegate.cpp +++ b/source/projectTableDelegate.cpp @@ -85,10 +85,11 @@ bool ProjectTableDelegate::editorEvent(QEvent* event, QAbstractItemModel* model, SelectorDialog dialog(option.widget->parentWidget()->parentWidget()->parentWidget()->parentWidget()); dialog.initial(ST_MetaModel); if(dialog.exec() == QDialog::Accepted) { - QString component = dialog.selectedComponent(); - if(!component.isEmpty()) { - model->setData(index, component, Qt::EditRole); - emit editingFinished(index,component); + modelType meta = dialog.selectedMeta(); + if(!meta.modelType.isEmpty()) { + model->setData(index, meta.modelName, Qt::EditRole); + model->setData(index, meta.modelType, Qt::EditRole+1); + emit editingFinished(index,meta.modelType); } } return true; diff --git a/source/selectorDialog.cpp b/source/selectorDialog.cpp index 951e9ec..b4af7aa 100644 --- a/source/selectorDialog.cpp +++ b/source/selectorDialog.cpp @@ -38,12 +38,13 @@ QStandardItemModel * SelectorDialog::initialModel() { QStandardItemModel *model = new QStandardItemModel(this); if(m_dlgType == ST_MetaModel){ - QStringList metas = getMetaList(); + QList metas = getMetaList(); for(auto &meta:metas) { QStandardItem *item = new QStandardItem(); //item->setIcon(QIcon(":/icons/folder.png")); // 设置图标 - item->setText(meta); // 设置文本 + item->setText(meta.modelName); // 设置文本 + item->setData(meta.modelType,Qt::UserRole); model->appendRow(item); } } @@ -65,13 +66,25 @@ QStandardItemModel * SelectorDialog::initialModel() void SelectorDialog::setupConnections() { connect(m_listView, &QListView::doubleClicked, [this](const QModelIndex& index){ - m_selectedComponent = index.data().toString(); + if(m_dlgType == ST_MetaModel){ + m_selectedMeta.modelName = index.data().toString(); + m_selectedMeta.modelType = index.data(Qt::UserRole).toString(); + } + else{ + m_selectedComponent = index.data().toString(); + } accept(); }); connect(m_buttonBox, &QDialogButtonBox::accepted, [this]{ if(auto index = m_listView->currentIndex(); index.isValid()) { - m_selectedComponent = index.data().toString(); + if(m_dlgType == ST_MetaModel){ + m_selectedMeta.modelName = index.data().toString(); + m_selectedMeta.modelType = index.data(Qt::UserRole).toString(); + } + else{ + m_selectedComponent = index.data().toString(); + } } accept(); }); @@ -79,16 +92,16 @@ void SelectorDialog::setupConnections() { connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); } -QStringList SelectorDialog::getMetaList() const +QList SelectorDialog::getMetaList() const { QMap modelMap = DataBase::GetInstance()->ModelType(); - QSet modelSet; + QList modelSet; for(auto &model:modelMap) { - modelSet.insert(model.modelType); + modelSet.append(model); } - return QStringList(modelSet.values()); + return modelSet; } diff --git a/source/topologyView.cpp b/source/topologyView.cpp index 8f07d95..0fd53b3 100644 --- a/source/topologyView.cpp +++ b/source/topologyView.cpp @@ -3,6 +3,8 @@ #include "tools.h" #include "topologyTree.h" #include "dataBase.h" +#include "basePropertyManager.h" +#include "baseProperty.h" #include #include #include @@ -32,6 +34,8 @@ void TopologyView::initial() connect(_treeView, &QTreeView::customContextMenuRequested, this, &TopologyView::onIndexRbtnClicked); connect(_treeView, &QTreeView::clicked, this, &TopologyView::onItemClicked); connect(_pModel, &QStandardItemModel::itemChanged, this, &TopologyView::onItemChanged); + connect(&BasePropertyManager::instance(),&BasePropertyManager::dataChanged,this,&TopologyView::onDataChanged); + _treeView->setHeaderHidden(true); // 设置模型的列数 _pModel->setColumnCount(1); @@ -39,11 +43,7 @@ void TopologyView::initial() // 设置模型的标题 //_pModel->setHeaderData(0, Qt::Horizontal, QObject::tr("层级")); - // 创建根节点 - QStandardItem *rootItem = new QStandardItem("电网"); - rootItem->setFlags(rootItem->flags() & ~Qt::ItemIsEditable); - _pModel->appendRow(rootItem); - + QStandardItem *rootItem = _pModel->invisibleRootItem(); QList lst= DataBase::GetInstance()->getAllComponents(); for(auto &info:lst) { @@ -55,49 +55,9 @@ void TopologyView::initial() QString sZone = DataBase::GetInstance()->getZoneNameById(nZ.toInt()); QString sStation = DataBase::GetInstance()->getStationNameById(nS.toInt()); - QModelIndex iG = findIndex(_pModel,sGrid); - QModelIndex iZ = findIndex(_pModel,sZone); - QModelIndex iS = findIndex(_pModel,sStation); - QStandardItem *pItem = new QStandardItem(info.tag); - pItem->setData(info.uuid,Qt::UserRole); - if(iG.isValid()) //已创建 - { - QStandardItem* itemGrid = _pModel->itemFromIndex(iG); - if(iZ.isValid()) - { - QStandardItem* itemZone = _pModel->itemFromIndex(iZ); - if(iS.isValid()) - { - QStandardItem* itemStation = _pModel->itemFromIndex(iS); - itemStation->appendRow(pItem); - } - else - { - QStandardItem* itemStation = new QStandardItem(sStation); - itemStation->appendRow(pItem); - itemZone->appendRow(itemStation); - } - } - else - { - QStandardItem* itemZone = new QStandardItem(sZone); - QStandardItem* itemStation = new QStandardItem(sStation); - itemStation->appendRow(pItem); - itemZone->appendRow(itemStation); - itemGrid->appendRow(itemZone); - } - } - else - { - QStandardItem* itemGrid = new QStandardItem(sGrid); - QStandardItem* itemZone = new QStandardItem(sZone); - QStandardItem* itemStation = new QStandardItem(sStation); - itemStation->appendRow(pItem); - itemZone->appendRow(itemStation); - itemGrid->appendRow(itemZone); - rootItem->appendRow(itemGrid); - } + pItem->setData(info.uuid.toString(),Qt::UserRole); + addItemToView(sGrid,sZone,sStation,rootItem,pItem); } // 创建树视图 @@ -197,54 +157,6 @@ void TopologyView::onIndexRbtnClicked(const QPoint &pos) menu.addAction(addAction); } - else if(nLevel == 3) //station - { - /*QAction *addAction = new QAction("添加组态图", this); - QString sParentid = item->data(Qt::UserRole+1).toString(); - - connect(addAction,&QAction::triggered,this,[&](){ - QString uuid = QUuid::createUuid().toString(); - QStandardItem *diagramItem = new QStandardItem(QString("组态图_")+QString::number(nCount)); - diagramItem->setData(uuid,Qt::UserRole+1); - diagramItem->setData(int(EntityType::ConfigurationDiagram),Qt::UserRole+2); - item->appendRow(diagramItem); - - EntityInfo info; - info.eType = EntityType::ConfigurationDiagram; - info.sName = diagramItem->text(); - info.sUuid = uuid; - info.sParentId = sParentid; - emit entityCreate(info); - - _treeView->expandAll(); - }); - - menu.addAction(addAction);*/ - } - else if(nLevel == 4) //组态图 - { - /*QAction *addAction = new QAction("添加子组态图", this); - QString sText = item->text(); - QString sParentid = item->data(Qt::UserRole+1).toString(); - connect(addAction,&QAction::triggered,this,[&](){ - QString uuid = QUuid::createUuid().toString(); - QStandardItem *diagramItem = new QStandardItem(sText+QString("_")+QString::number(nCount)); - diagramItem->setData(uuid,Qt::UserRole+1); - diagramItem->setData(int(EntityType::ConfigurationDiagram),Qt::UserRole+2); - item->appendRow(diagramItem); - - EntityInfo info; - info.eType = EntityType::ConfigurationDiagram; - info.sName = diagramItem->text(); - info.sUuid = uuid; - info.sParentId = sParentid; - emit entityCreate(info); - - _treeView->expandAll(); - }); - - menu.addAction(addAction);*/ - } if(nLevel != -1) //除了根节点其余都能删除 { @@ -307,3 +219,92 @@ void TopologyView::onItemClicked(const QModelIndex &index) } } } + +void TopologyView::onDataCreated(QString uuid) +{ + +} + +void TopologyView::onDataChanged(QString uuid) +{ + QModelIndex itemIndex = findIndex(_pModel,uuid,Qt::UserRole); + BaseProperty* pData = BasePropertyManager::instance().findEntityData(QUuid(uuid)); + if(pData) + { + if(itemIndex.isValid()) //已存在 + { + QStandardItem *pItem = _pModel->itemFromIndex(itemIndex); + if(pItem) + { + if(pItem->text() != pData->tag()) //已改名 + { + pItem->setText(pData->tag()); + } + + QString sStation = pItem->parent()->text(); + QString sZone = pItem->parent()->parent()->text(); + QString sGrid = pItem->parent()->parent()->parent()->text(); + if(sStation == pData->station() && sZone == pData->zone() && sGrid == pData->grid()) //从属关系未变 + { + + } + else + { + QStandardItem* item = _pModel->takeItem(pItem->row()); //从原层级中取出,添加到新的层级 + addItemToView(pData->grid(),pData->zone(),pData->station(),_pModel->invisibleRootItem(),item); + } + } + } + else + { + QStandardItem *pItem = new QStandardItem(pData->tag()); + pItem->setData(uuid,Qt::UserRole); + addItemToView(pData->grid(),pData->zone(),pData->station(),_pModel->invisibleRootItem(),pItem); + } + } +} + +void TopologyView::addItemToView(QString sGrid,QString sZone,QString sStation,QStandardItem *root,QStandardItem *pItem) +{ + QModelIndex iG = findIndex(_pModel,sGrid); + QModelIndex iZ = findIndex(_pModel,sZone); + QModelIndex iS = findIndex(_pModel,sStation); + + if(iG.isValid()) //已创建 + { + QStandardItem* itemGrid = _pModel->itemFromIndex(iG); + if(iZ.isValid()) + { + QStandardItem* itemZone = _pModel->itemFromIndex(iZ); + if(iS.isValid()) + { + QStandardItem* itemStation = _pModel->itemFromIndex(iS); + itemStation->appendRow(pItem); + } + else + { + QStandardItem* itemStation = new QStandardItem(sStation); + itemStation->appendRow(pItem); + itemZone->appendRow(itemStation); + } + } + else + { + QStandardItem* itemZone = new QStandardItem(sZone); + QStandardItem* itemStation = new QStandardItem(sStation); + itemStation->appendRow(pItem); + itemZone->appendRow(itemStation); + itemGrid->appendRow(itemZone); + } + } + else + { + QStandardItem* itemGrid = new QStandardItem(sGrid); + QStandardItem* itemZone = new QStandardItem(sZone); + QStandardItem* itemStation = new QStandardItem(sStation); + itemStation->appendRow(pItem); + itemZone->appendRow(itemStation); + itemGrid->appendRow(itemZone); + root->appendRow(itemGrid); + } +} diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index ffdc163..fc48a1a 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -43,10 +43,16 @@ 工程模 + + + 间隔管理 + + +