DiagramDesigner/diagramCavas/source/diagramEditor/diagramEditorBaySettingDlg.cpp

185 lines
5.7 KiB
C++

#include <QMessageBox>
#include "diagramEditor/diagramEditorBaySettingDlg.h"
#include "diagramEditor/diagramEditorWizard.h"
#include "diagramEditor/diagramEditorBaseBlock.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;
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);
}
}
ui->listWidget->addItems(lst);
}
}
_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() == g_transformerLevel)
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);
}
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());
}
DiagramEditorWizardBayInfo info;
info.sName = sName;
info.nType = nType;
info.lstBindObj = lst;
_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());
}
}
}
}