#include "WindowAppBlockForloop.h"
#include "WindowAppItemInterface.h"
#include "DialogForLoop.h"
WindowAppBlockForloop::WindowAppBlockForloop(TOOL* pNewTool, POU* Pou, bool bShowOnly /*= false*/, QGraphicsObject* parent /*= nullptr*/)
: WindowAppBlockStandardBase(pNewTool, Pou, bShowOnly, parent)
{
// 更新矩形区域的尺寸
this->updateRect();
}
WindowAppBlockForloop::~WindowAppBlockForloop()
{
}
///
/// 添加接口(Forloop工具需要额外添加ToolInerface)
///
void WindowAppBlockForloop::addItemInterfaces()
{
// 添加标准接口
WindowAppBlockStandardBase::addItemInterfaces();
// 添加ToolStart和ToolEnd接口
WindowAppBlockStandardBase::addItemToolInterfaces();
}
///
/// 双击弹出配置对话框
///
///
void WindowAppBlockForloop::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
{
if (event->button() != Qt::LeftButton || m_bShowOnly == true)
{
return;
}
int nSize = 0, nIndex = 0;
// 从Tool中取出当前的Size
if (!m_toolInfo->Interfaces[0]->isValueNullptr())
{
nSize = m_toolInfo->Interfaces[0]->getValue();
}
// 从Tool中取出当前的Index
if (!m_toolInfo->Interfaces[1]->isValueNullptr())
{
nIndex = m_toolInfo->Interfaces[1]->getValue();
}
// 弹出Forloop设置对话框
DialogForLoop dialogForloop(nSize ,nIndex);
if (dialogForloop.exec() != DialogForLoop::Accepted)
{
return;
}
// 取得用户设置的Size
nSize = dialogForloop.m_nSize;
// 为工具设置Size输入
m_toolInfo->Interfaces[0]->setValue(nSize, VALUE_PASS_MODE::PASS_BY_VALUE);
qDebug() << "[WindowAppBlockForloop] - Set ForLoop size to :" << nSize;
QGraphicsItem::mouseDoubleClickEvent(event);
}
///
/// 更新矩形区域的尺寸
///
void WindowAppBlockForloop::updateRect()
{
// 计算高度
int blockHeight = FORLOOP_BASIC_HEIGHT;
// 计算宽度
int blockWidth = PARA_BASIC_WIDTH;
// 主体矩形区域
blockRect.setRect(
-blockWidth / 2,
-blockHeight / 2,
blockWidth,
blockHeight
);
// 序号矩形区域
blockIndexRect.setRect(
blockRect.right() - TBD_INDEX_WIDTH,
blockRect.top() - TBD_INDEX_HEIGHT / 2,
TBD_INDEX_WIDTH,
TBD_INDEX_HEIGHT
);
// 总体矩形边界
blockBoundingRect.setRect(
blockRect.left(),
blockRect.top() - TBD_INDEX_HEIGHT / 2,
blockRect.width() + TBD_SHADOW_COUNT * PEN_LINE_WIDTH,
blockRect.height() + TBD_INDEX_HEIGHT / 2 + TBD_SHADOW_COUNT * PEN_LINE_WIDTH
);
}