123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- #include "DialogBlockProperty.h"
- #include "WindowAppBlockStandard.h"
- #include "WindowAppItemInterface.h"
- #include "Pou.h"
- // 对话框默认标题
- #define DEFAULT_WINDOW_TITLE QString("Property Sheets - ")
- DialogBlockProperty::DialogBlockProperty(TOOL* tool, POU* Pou, QWidget *parent)
- : QDialog(parent)
- , m_toolInfo(tool)
- , m_pPou(Pou)
- {
- ui.setupUi(this);
- // 初始化界面
- this->initUI();
- }
- DialogBlockProperty::~DialogBlockProperty()
- {
- }
- /// <summary>
- /// 对话框初始化
- /// </summary>
- void DialogBlockProperty::initUI()
- {
- // 根据工具名字设置窗口标题
- this->setWindowTitle(DEFAULT_WINDOW_TITLE + m_toolInfo->strInstanceName);
- // 设置默认Sheet
- ui.tabSettings->setCurrentIndex(0);
- // 根据工具的信息填充UI界面
- ui.editInfo->setText(m_toolInfo->strInfo);
- ui.editName->setText(m_toolInfo->strInstanceName);
- ui.editBeforeDelay->setText(QString::number(m_toolInfo->execParams.nPreDelay));
- ui.editAfterDelay->setText(QString::number(m_toolInfo->execParams.nPostDelay));
- // 保存工具的旧名字备用
- blockSettings.strOldInstanceName = m_toolInfo->strInstanceName;
- // 设置工具是否可用
- if (m_toolInfo->bEnable)
- {
- ui.checkEnableTool->setChecked(true);
- }
- else
- {
- ui.checkEnableTool->setChecked(false);
- }
- QRegExp regExp("[0-9]+$");//只能输入数字
- ui.editBeforeDelay->setValidator(new QRegExpValidator(regExp, this));
- ui.editAfterDelay->setValidator(new QRegExpValidator(regExp, this));
- // 绘制工具图像
- this->initToolBlock();
- // 初始化设置工具Index的ComboBox
- this->initComboToolIndex();
- // 槽函数
- connect(ui.okButton, SIGNAL(clicked()), this, SLOT(onButtonOkClicked()));
- connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
- // 设置固定窗体大小
- this->setFixedSize(538, 391);
- //this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
- }
- /// <summary>
- /// 绘制工具的图像(以及CheckBox)
- /// </summary>
- void DialogBlockProperty::initToolBlock()
- {
- // 设置为不可交互
- // ui.viewBlockProperty->setInteractive(false);
- // 设置不传递任何消息到子控件
- // ui.viewBlockProperty->setAttribute(Qt::WA_TransparentForMouseEvents, true);
- // 初始化scene
- QGraphicsScene* blockScene = new QGraphicsScene(this);
- blockScene->setSceneRect(QRectF(0, 0, 0, 0));
- ui.viewBlockProperty->setScene(blockScene);
- // 新建一个功能块信息
- WindowAppBlockStandard* newItem = new WindowAppBlockStandard(m_toolInfo, m_pPou, true);
- // scene中添加功能块
- blockScene->addItem(newItem);
- // 在界面中心位置添加此Block
- newItem->setPos(QPoint(0,0));
- // 添加功能块接口
- newItem->addItemInterfaces();
- // 根据接口情况动态添加checkbox
- for (int i = 0; i < newItem->m_itemInterfaces.size(); i++)
- {
- WindowAppItemInterface* pInfItem = newItem->m_itemInterfaces[i];
- // 跳过ToolStart接口, 并行接口,goto 接口,非标准接口
- if (pInfItem->m_infInfo->isToolStart()
- || pInfItem->m_infInfo->isParallelToolStart()
- || pInfItem->m_infInfo->isParallelToolEnd()
- || pInfItem->m_infInfo->isGotoToolEnd()
- || pInfItem->m_infInfo->Type != INF_TYPE::INF_TYPE_STANDARD
- )
- {
- continue;
- }
- // 获取本接口的真实线段位置
- QLineF realLine = QLineF(
- pInfItem->mapToScene(pInfItem->line().p1()),
- pInfItem->mapToScene(pInfItem->line().p2())
- );
- // 添加Checkbox
- QCheckBox* pNewCheckBox = new QCheckBox();
-
- if (pInfItem->m_infInfo->nRefCount > 0)
- {
- pNewCheckBox->setText(QString::number(pInfItem->m_infInfo->nRefCount));
- pNewCheckBox->setEnabled(false);
- }
- // 添加到scene中
- QGraphicsProxyWidget* pCheckWidget = blockScene->addWidget(pNewCheckBox);
- if (pInfItem->m_infInfo->isDirInput())
- {
- // 微调一下偏移
- QPointF pos = QPointF(
- realLine.p1().x() - pNewCheckBox->geometry().width() - 5,
- realLine.p1().y() - pNewCheckBox->geometry().height() / 2
- );
- pCheckWidget->setPos(pos);
- }
- else
- {
- // 微调一下偏移
- QPointF pos = QPointF(
- realLine.p1().x() + pNewCheckBox->geometry().width() + 5,
- realLine.p1().y() - pNewCheckBox->geometry().height() / 2
- );
- pCheckWidget->setPos(pos);
- }
- // 根据接口启用与否打钩
- pNewCheckBox->setChecked(pInfItem->m_infInfo->bEnable);
- infCheckBoxs.push_back(pNewCheckBox);
- }
- }
- /// <summary>
- /// 2022-9-28 初始化设置工具Index的ComboBox
- /// </summary>
- void DialogBlockProperty::initComboToolIndex()
- {
- // 取出工具当前Index
- int nCurrentIndex = this->m_toolInfo->nIndex;
- // 取出当前Pou所有工具的Index
- int nTotalIndex = this->m_pPou->GetIndexedToolsCount();
- // ComboBox中的数字为当前工具所有可以选的Index合集
- for (int i = 1; i <= nTotalIndex; i++)
- {
- ui.comboIndex->addItem(QString::number(i));
- }
- // 将当前Tool的Index设置为ComboBox的默认文字
- ui.comboIndex->setCurrentIndex(nCurrentIndex);
- }
- /// <summary>
- /// 保存用户的设置项
- /// </summary>
- void DialogBlockProperty::saveBlockSettings()
- {
- for (int i = 0; i < infCheckBoxs.size(); i++)
- {
- blockSettings.infEnables.push_back(infCheckBoxs[i]->isChecked());
- }
- blockSettings.bToolEnable = ui.checkEnableTool->isChecked();
- blockSettings.strNewInstanceName = ui.editName->text();
- blockSettings.strInfo = ui.editInfo->toPlainText();
- blockSettings.nInDelay = ui.editBeforeDelay->text().toInt();
- blockSettings.nOutDelay = ui.editAfterDelay->text().toInt();
- // 2022-9-28,保存用户输入的新索引号,注意这里值要-1,因为界面上的值是从1开始的,实际功能块是从0开始的
- blockSettings.nNewIndex = ui.comboIndex->currentText().toInt() - 1;
- }
- /// <summary>
- /// Ok按钮
- /// </summary>
- void DialogBlockProperty::onButtonOkClicked()
- {
- // 首先检查用户设置的实例名称是否重名,要是有重名的则报错
- if ( blockSettings.strOldInstanceName!=ui.editName->text() &&
- m_pPou->isInstanceNameDuplicated(ui.editName->text())
- )
- {
- Utility::VPCriticalMessageBox(QString(ui.editName->text() + "is duplicated!"));
- return;
- }
- // 保存用户的设置项
- saveBlockSettings();
-
- // 关闭对话框
- this->accept();
- }
|