241 lines
7.6 KiB
C++
241 lines
7.6 KiB
C++
#include <QMessageBox>
|
||
#include "diagramEditor/diagramEditorBaySettingDlg.h"
|
||
#include "diagramEditor/diagramEditorWizard.h"
|
||
#include "diagramEditor/diagramEditorBaseBlock.h"
|
||
//#include "global.h"
|
||
#include "common/core_model/constants.h"
|
||
#include "ui_diagramEditorBaySettingDlg.h"
|
||
#include "diagramEditor/diagramEditorStructContainer.h"
|
||
#include "diagramEditor/wizardBayContentDlg.h"
|
||
#include "titleBar.h"
|
||
|
||
DiagramEditorBaySettingDlg::DiagramEditorBaySettingDlg(QWidget *parent)
|
||
: QDialog(parent)
|
||
, ui(new Ui::diagramEditorBaySettingDlg)
|
||
,_curOperateBlock(nullptr)
|
||
{
|
||
ui->setupUi(this);
|
||
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
|
||
this->setWindowModality(Qt::WindowModal);
|
||
initial();
|
||
}
|
||
|
||
DiagramEditorBaySettingDlg::~DiagramEditorBaySettingDlg()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::showDlg(int nLevel)
|
||
{
|
||
_curModel = 0;
|
||
show();
|
||
addNewBay();
|
||
if(_pWizard){
|
||
auto mapBus = _pWizard->getMapBusInfo();
|
||
double d = mapBus.value(nLevel).dVoltage;
|
||
ui->le_name->setText(QString::number(d)+"kV");
|
||
ui->cb_level->setCurrentIndex(nLevel);
|
||
}
|
||
_curLevel = nLevel;
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::showDlg(int nLevel,DiagramEditorBayBlock* p)
|
||
{
|
||
_curModel = 1;
|
||
if(_curOperateBlock == nullptr)
|
||
_curOperateBlock = p;
|
||
show();
|
||
addNewBay();
|
||
if(_pWizard){
|
||
int nType = int(p->getBayType());
|
||
ui->cb_type->setCurrentIndex(nType);
|
||
ui->le_name->setText(p->getName());
|
||
ui->cb_level->setCurrentIndex(nLevel);
|
||
if(p){
|
||
auto lstCon = p->getConnect();
|
||
QStringList lst;
|
||
QSet<QString> otherItems;
|
||
|
||
for(auto& conId:lstCon){
|
||
if(_pWizard->getConnection().contains(conId)){
|
||
auto con = _pWizard->getConnection().value(conId);
|
||
QString sOpposite = con.getOpposite(p->getName()).sName;
|
||
lst.append(sOpposite);
|
||
if(con.getOpposite(p->getName()).nType == 3){
|
||
otherItems.insert(sOpposite);
|
||
}
|
||
}
|
||
}
|
||
ui->listWidget->addItems(lst);
|
||
|
||
for(int i = 0; i < ui->listWidget->count(); ++i){
|
||
QListWidgetItem *item = ui->listWidget->item(i);
|
||
if (otherItems.contains(item->text()))
|
||
{
|
||
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
_curLevel = nLevel;
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::addNewBay()
|
||
{
|
||
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() == Constants::TRANSFORMER_LEVEL)
|
||
continue;
|
||
ui->cb_level->addItem("第"+QString::number(iter.key()+1)+"层",iter.key());
|
||
}
|
||
}
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::initial()
|
||
{
|
||
m_titleBar = new TitleBar(this);
|
||
m_titleBar->setTitle("间隔设置");
|
||
ui->verticalLayout_3->insertWidget(0,m_titleBar);
|
||
|
||
_curModel = 0;
|
||
_curLevel = 0;
|
||
connect(ui->btn_add,&QPushButton::clicked,this,&DiagramEditorBaySettingDlg::onAddClicked);
|
||
connect(ui->btn_delete,&QPushButton::clicked,this,&DiagramEditorBaySettingDlg::onDeleteClicked);
|
||
connect(ui->btn_ok,&QPushButton::clicked,this,&DiagramEditorBaySettingDlg::onOkClicked);
|
||
connect(ui->btn_cancel,&QPushButton::clicked,this,&DiagramEditorBaySettingDlg::onCancelClicked);
|
||
connect(ui->cb_level,&QComboBox::currentTextChanged,this,&DiagramEditorBaySettingDlg::onConnectLevelChanged);
|
||
connect(ui->listWidget, &QListWidget::itemClicked,this,&DiagramEditorBaySettingDlg::onListItemClicked);
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::onAddClicked()
|
||
{
|
||
//auto pItem = ui->listWidget->currentItem();
|
||
QString str = ui->cb_target->currentText();
|
||
auto lst = ui->listWidget->findItems(str,Qt::MatchExactly);
|
||
if(lst.size() == 0){ //为空才添加
|
||
ui->listWidget->addItem(str);
|
||
}
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::onDeleteClicked()
|
||
{
|
||
int n = ui->listWidget->currentRow();
|
||
if(n){
|
||
auto pItem = ui->listWidget->takeItem(n);
|
||
delete pItem;
|
||
}
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::onOkClicked()
|
||
{
|
||
QString sName = ui->le_name->text();
|
||
BayType nType = BayType(ui->cb_type->currentIndex());
|
||
if(_curModel == 0){
|
||
if(_pWizard){
|
||
auto map = _pWizard->getMapBusInfo();
|
||
for(auto iter = map.begin();iter != map.end();++iter){
|
||
auto lstBlock = _pWizard->getTargetLevelBlocks(iter.key(),2);
|
||
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());
|
||
}
|
||
|
||
double d = map.value(_curLevel).dVoltage;
|
||
|
||
DiagramEditorWizardBayInfo info;
|
||
info.sName = sName;
|
||
info.nType = nType;
|
||
info.lstBindObj = lst;
|
||
info.dVoltageLevel = d;
|
||
|
||
_pWizard->onAddBayFinished(info);
|
||
}
|
||
}
|
||
else if(_curModel == 1){
|
||
if(_curOperateBlock){
|
||
_curOperateBlock->setName(sName);
|
||
_curOperateBlock->setBayType(nType);
|
||
_curOperateBlock->clearConnect();
|
||
|
||
for(int i = 0;i < ui->listWidget->count();++i){
|
||
QUuid uid = _pWizard->addConnection(_curOperateBlock->getName(),ui->listWidget->item(i)->text(),2,1);
|
||
_curOperateBlock->addConnect(uid);
|
||
}
|
||
|
||
auto pContent = _pWizard->getContentDlg();
|
||
pContent->flushData(_curLevel);
|
||
_curOperateBlock = nullptr;
|
||
}
|
||
}
|
||
hide();
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::onCancelClicked()
|
||
{
|
||
hide();
|
||
if(_curOperateBlock)
|
||
_curOperateBlock = nullptr;
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::onConnectLevelChanged(const QString& str)
|
||
{
|
||
if(_pWizard){
|
||
int n = ui->cb_level->findText(str);
|
||
if(n != -1){
|
||
ui->cb_target->clear();
|
||
int nIndex = ui->cb_level->itemData(n).toInt();
|
||
auto lstBlock = _pWizard->getTargetLevelBlocks(nIndex,1);
|
||
for(auto& block:lstBlock){
|
||
ui->cb_target->addItem(block->getName());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void DiagramEditorBaySettingDlg::onListItemClicked(QListWidgetItem *item)
|
||
{
|
||
if (!item || !_pWizard)
|
||
return;
|
||
|
||
QString targetName = item->text();
|
||
|
||
// 1. 根据 targetName 反查 level
|
||
// 这里假设:level -> target 是一对多关系
|
||
// 需要遍历所有 level,查找包含该 target 的 level
|
||
int levelCount = ui->cb_level->count();
|
||
for (int i = 0; i < levelCount; ++i)
|
||
{
|
||
int nIndex = ui->cb_level->itemData(i).toInt();
|
||
auto lstBlock = _pWizard->getTargetLevelBlocks(nIndex, 1);
|
||
|
||
for (auto& block : lstBlock)
|
||
{
|
||
if (block->getName() == targetName)
|
||
{
|
||
// 2. 设置 cb_level
|
||
ui->cb_level->setCurrentIndex(i);
|
||
|
||
// 3. cb_target 会自动由 onConnectLevelChanged 刷新
|
||
// 4. 再设置 cb_target 为当前项
|
||
ui->cb_target->setCurrentText(targetName);
|
||
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
}
|