GridFrame/diagramCavas/source/diagramEditor/diagramEditorBaySettingDlg.cpp

236 lines
7.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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"
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()
{
_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;
}
}
}
}