#include #include "diagramEditor/diagramEditorTransSettingDlg.h" #include "diagramEditor/diagramEditorWizard.h" #include "diagramEditor/diagramEditorBaseBlock.h" #include "ui_diagramEditorTransSettingDlg.h" #include "diagramEditor/diagramEditorStructContainer.h" #include "diagramEditor/wizardBayContentDlg.h" DiagramEditorTransSettingDlg::DiagramEditorTransSettingDlg(QWidget *parent) : QDialog(parent) , ui(new Ui::diagramEditorTransSettingDlg) ,_curOperateBlock(nullptr) { ui->setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); this->setWindowModality(Qt::WindowModal); initial(); } DiagramEditorTransSettingDlg::~DiagramEditorTransSettingDlg() { delete ui; } void DiagramEditorTransSettingDlg::showDlg() { _curModel = 0; show(); addNewTrans(); if(_pWizard){ ui->le_name->setText("#主变"); } } void DiagramEditorTransSettingDlg::showDlg(DiagramEditorTransformerBlock* p) { _curModel = 1; if(_curOperateBlock == nullptr) _curOperateBlock = p; show(); addNewTrans(); if(_pWizard){ ui->le_name->setText(p->getName()); if(p){ auto lstCon = p->getConnect(); QStringList lst; for(auto& conId:lstCon){ if(_pWizard->getConnection().contains(conId)){ auto con = _pWizard->getConnection().value(conId); QString sOpposite = con.getOppositeName(p->getName()); lst.append(sOpposite); } } ui->listWidget->addItems(lst); } } } void DiagramEditorTransSettingDlg::addNewTrans() { ui->cb_type->setCurrentIndex(0); ui->cb_level->clear(); ui->cb_target->clear(); ui->listWidget->clear(); if(_pWizard){ auto mapAllCon = _pWizard->getContainerStruct(); for(auto iter = mapAllCon.begin();iter != mapAllCon.end();++iter){ if(iter.key() == g_transformerLevel) continue; ui->cb_level->addItem("第"+QString::number(iter.key()+1)+"层",iter.key()); } } } void DiagramEditorTransSettingDlg::initial() { _curModel = 0; connect(ui->btn_add,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onAddClicked); connect(ui->btn_delete,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onDeleteClicked); connect(ui->btn_ok,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onOkClicked); connect(ui->btn_cancel,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onCancelClicked); connect(ui->cb_level,&QComboBox::currentTextChanged,this,&DiagramEditorTransSettingDlg::onConnectLevelChanged); connect(ui->cb_bayType,&QComboBox::currentIndexChanged,this,&DiagramEditorTransSettingDlg::onBayTypeChanged); ui->cb_bayType->setItemData(0,3); //将类型与item关联 ui->cb_bayType->setItemData(1,4); } void DiagramEditorTransSettingDlg::onAddClicked() { QString str = ui->cb_target->currentText(); auto lst = ui->listWidget->findItems(str,Qt::MatchExactly); if(lst.size() == 0){ //为空才添加 ui->listWidget->addItem(str); } } void DiagramEditorTransSettingDlg::onDeleteClicked() { int n = ui->listWidget->currentRow(); if(n){ auto pItem = ui->listWidget->takeItem(n); delete pItem; } } void DiagramEditorTransSettingDlg::onOkClicked() { QString sName = ui->le_name->text(); TransformerType nType = TransformerType(ui->cb_type->currentIndex()); if(_curModel == 0){ auto lstBlock = _pWizard->getTargetLevelBlocks(g_transformerLevel,3); for(auto bay:lstBlock) { if(bay->getName() == sName){ //判断间隔存在 QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"变压器已存在")); return; } } QStringList lst; for(int i = 0;i < ui->listWidget->count();++i){ lst.append(ui->listWidget->item(i)->text()); } DiagramEditorWizardTransformerInfo info; info.sName = sName; info.nType = nType; info.lstBindObj = lst; _pWizard->onAddTransFinished(info); } else if(_curModel == 1){ if(_curOperateBlock){ _curOperateBlock->setName(sName); _curOperateBlock->setTransType(nType); _curOperateBlock->clearConnect(); for(int i = 0;i < ui->listWidget->count();++i){ QUuid uid = _pWizard->addConnection(_curOperateBlock->getName(),ui->listWidget->item(i)->text(),3,2,true); _curOperateBlock->addConnect(uid); } _pWizard->flushTransPage(); _curOperateBlock = nullptr; } } hide(); } void DiagramEditorTransSettingDlg::onCancelClicked() { hide(); } void DiagramEditorTransSettingDlg::onConnectLevelChanged(const QString& str) { if(_pWizard){ int n = ui->cb_level->findText(str); BayType nType = BayType(ui->cb_bayType->currentData().toInt()); if(n != -1){ ui->cb_target->clear(); int nIndex = ui->cb_level->itemData(n).toInt(); auto lstBlock = _pWizard->getTargetLevelBlocks(nIndex,2); for(auto& block:lstBlock){ auto pBay = dynamic_cast(block); if(pBay){ BayType tpe = pBay->getBayType(); if(nType == tpe) ui->cb_target->addItem(pBay->getName()); } } } } } void DiagramEditorTransSettingDlg::onBayTypeChanged(int idx) { BayType nType = BayType(ui->cb_bayType->currentData().toInt()); int n = ui->cb_level->currentIndex(); if(n != -1){ ui->cb_target->clear(); int nIndex = ui->cb_level->itemData(n).toInt(); auto lstBlock = _pWizard->getTargetLevelBlocks(nIndex,2); for(auto& block:lstBlock){ auto pBay = dynamic_cast(block); if(pBay){ BayType tpe = pBay->getBayType(); if(nType == tpe) ui->cb_target->addItem(pBay->getName()); } } } }