DiagramDesigner/diagramCavas/source/itemPropertyDlg.cpp

224 lines
7.3 KiB
C++
Raw Normal View History

2025-05-16 19:20:46 +08:00
#include <QMessageBox>
2025-10-11 18:51:33 +08:00
#include <QJsonArray>
2025-02-06 16:36:50 +08:00
#include "itemPropertyDlg.h"
#include "propertyContentDlg.h"
2025-04-07 08:46:03 +08:00
#include "dataManager.h"
2025-04-09 16:20:34 +08:00
#include "graphicsItem/graphicsBaseItem.h"
2025-02-06 16:36:50 +08:00
#include "ui_itemPropertyDlg.h"
2025-05-16 19:20:46 +08:00
#include "baseContentDlg.h"
#include "baseInfoDlg.h"
2025-05-23 10:30:52 +08:00
//#include "topologyManager.h"
#include "basePropertyManager.h"
#include "baseProperty.h"
#include "ptExtraInfoDlg.h"
#include "ctExtraInfoDlg.h"
2025-07-04 18:47:49 +08:00
#include "bayInfoDlg.h"
2025-02-06 16:36:50 +08:00
ItemPropertyDlg::ItemPropertyDlg(QWidget *parent)
: QDialog(parent)
, ui(new Ui::itemPropertyDlg)
,layout_(nullptr)
,btnGroup_(nullptr)
2025-04-09 16:20:34 +08:00
,_curItem(nullptr)
2025-07-04 18:47:49 +08:00
,_curModelController(nullptr)
2025-02-06 16:36:50 +08:00
{
ui->setupUi(this);
2025-10-17 18:14:44 +08:00
this->setWindowFlags(Qt::FramelessWindowHint |Qt::WindowStaysOnTopHint | windowFlags());
initial();
2025-02-06 16:36:50 +08:00
}
ItemPropertyDlg::~ItemPropertyDlg()
{
delete ui;
}
void ItemPropertyDlg::initial()
2025-02-06 16:36:50 +08:00
{
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<QString,groupStateInfo> 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);
2025-04-30 16:29:17 +08:00
if(info.isPublic) //公共属性组置顶
layout_->insertWidget(0,btn);
else
layout_->addWidget(btn);
connect(btn, &QAbstractButton::clicked, [this, info](){
onGroupSelected(info.groupName);
});
}
2025-04-09 16:20:34 +08:00
layout_->addStretch();
2025-02-06 16:36:50 +08:00
}
void ItemPropertyDlg::onOkClicked()
{
//todo:将属性页中的值读取到当前uuid对象
2025-04-09 16:20:34 +08:00
if(_curItem)
{
if(_curItem->getProperty() == nullptr)
{
//todo:弹出输入框输入名称
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"对象未命名"));
return;
}
else
{
curUuid_ = _curItem->getProperty()->uuid(); //使用数据uuid数据唯一,item不唯一
}
}
2025-04-07 08:46:03 +08:00
QMap<QString, QWidget*>::Iterator iter;
2025-05-23 10:30:52 +08:00
BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_);
2025-10-11 18:51:33 +08:00
int nType = pPro->type(); //操作的对象类型
2025-04-07 08:46:03 +08:00
for(iter = groupViews_.begin();iter != groupViews_.end();++iter)
{
2025-05-23 10:30:52 +08:00
BaseContentDlg* pDlg = qobject_cast<BaseContentDlg*>(iter.value());
QMap<QString,propertyStateInfo> mapPro = pDlg->getPropertyValue(pPro);
if(!mapPro.empty())
DataManager::instance().updateModelData(_curModel,curUuid_,iter.key(),mapPro);
2025-10-11 18:51:33 +08:00
2025-10-17 18:14:44 +08:00
if(nType == 4 && iter.key() == "base_extend"){ //ct
2025-10-11 18:51:33 +08:00
int nCtSize = 0; //ct设置的个数
int nCtType = 0; //ct类型 1三相0零相
if(mapPro.contains("ct_winding")){
propertyStateInfo val = mapPro.value("ct_winding");
QJsonObject obj = val.defaultValue.toJsonObject();
if(obj.contains("winding")){
QJsonArray arr = obj["winding"].toArray();
nCtSize = arr.size();
}
}
if(mapPro.contains("phase_num")){
propertyStateInfo val = mapPro.value("phase_num");
nCtType = val.defaultValue.toInt();
}
2025-10-17 18:14:44 +08:00
QPair<int,int> pair(nCtType,nCtSize);
QVariant var = QVariant::fromValue(pair);
_curItem->setupFinish(var);
}
else if(nType == 5 && iter.key() == "base_extend"){ //pt
QList<int> lst; //二次绕组接法
if(mapPro.contains("pt_sec_winding")){
propertyStateInfo val = mapPro.value("pt_sec_winding");
QJsonObject obj = val.defaultValue.toJsonObject();
QJsonArray arr = obj["winding"].toArray();
for (QJsonValueRef jsonObj : arr)
{
QJsonObject node = jsonObj.toObject();
QString sWinding = node["windingConnectionMethod"].toString();
if(sWinding == "Y"){
lst.append(1);
}
else{
lst.append(0);
}
}
QVariant var = QVariant::fromValue(lst);
_curItem->setupFinish(var);
2025-10-11 18:51:33 +08:00
}
}
}
2025-10-17 18:14:44 +08:00
_curItem = nullptr;
2025-02-06 16:36:50 +08:00
hide();
}
void ItemPropertyDlg::onCancelClicked()
{
hide();
}
void ItemPropertyDlg::onGroupSelected(const QString& str)
{
if (!groupViews_.contains(str)) {
createGroupView(str);
}
2025-05-16 19:20:46 +08:00
BaseContentDlg* pDlg = qobject_cast<BaseContentDlg*>(groupViews_[str]);
if(pDlg)
{
2025-05-09 19:36:32 +08:00
QMap<QString,propertyStateInfo> valueMap;
2025-05-23 10:30:52 +08:00
BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_);
2025-07-04 18:47:49 +08:00
if(str != QString("component") && str != QString("bay"))
2025-05-23 10:30:52 +08:00
{
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<void*>(pPro)));
}
}
ui->stackedWidget->setCurrentWidget(groupViews_[str]);
}
void ItemPropertyDlg::createGroupView(const QString& str)
{
2025-05-16 19:20:46 +08:00
//todo:基础信息、间隔信息、动态界面在此分支
BaseContentDlg* contentDlg = nullptr;
2025-05-23 10:30:52 +08:00
BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_);
2025-05-16 19:20:46 +08:00
if(str == QString("component") || str == QString::fromWCharArray(L"基本信息")){
2025-10-17 18:14:44 +08:00
auto pDlg = new BaseInfoDlg(ui->stackedWidget);
pDlg->setParentDlg(this);
contentDlg = pDlg;
2025-05-16 19:20:46 +08:00
}
2025-05-23 10:30:52 +08:00
else if(str == "base_extend" || str == QString::fromWCharArray(L"扩展信息")){
2025-07-04 18:47:49 +08:00
if(pPro->type() == 4)
contentDlg = new CtExtraInfoDlg(ui->stackedWidget);
else if(pPro->type() == 5)
contentDlg = new PtExtraInfoDlg(ui->stackedWidget);
else
contentDlg = new PropertyContentDlg(ui->stackedWidget);
2025-05-23 10:30:52 +08:00
}
else if(str == "bay" || str == QString::fromWCharArray(L"间隔信息")){
2025-07-04 18:47:49 +08:00
contentDlg = new BayInfoDlg(ui->stackedWidget);
2025-05-16 19:20:46 +08:00
}
else{
contentDlg = new PropertyContentDlg(ui->stackedWidget);
}
if(contentDlg)
{
contentDlg->createGroupView(groupInfo_[str]);
}
2025-07-04 18:47:49 +08:00
contentDlg->setModelController(_curModelController); //传递modelControl
groupViews_.insert(str, contentDlg);
ui->stackedWidget->addWidget(contentDlg);
}
void ItemPropertyDlg::showDlg(modelDataInfo dataInfo,QUuid uuid,GraphicsProjectModelItem* pItem)
2025-02-06 16:36:50 +08:00
{
groupValue_ = dataInfo.groupInfo;
curUuid_ = uuid;
_curModel = dataInfo.modelName;
2025-04-09 16:20:34 +08:00
_curItem = pItem;
2025-07-23 17:27:35 +08:00
QString str;
auto btn = dynamic_cast<QPushButton*>(btnGroup_->checkedButton());
if(btn == nullptr){
str = groupInfo_.constBegin().key(); //打开默认显示第一个属性组
}
else{
str = btn->text();
}
onGroupSelected(str);
show();
2025-02-06 16:36:50 +08:00
}