#include "WindowAppBlockWait.h" #include "DialogWait.h" #include "TaskManager.h" #include "GvlManager.h" WindowAppBlockWait::WindowAppBlockWait(TOOL* pNewTool, POU* Pou, bool bShowOnly /*= false*/, QGraphicsObject* parent /*= nullptr*/) : WindowAppBlockStandardBase(pNewTool, Pou, bShowOnly, parent) , m_selVariable(nullptr) , m_nTimeout(DEFAULT_WAIT_TIMEOUT) { // 更新矩形区域的尺寸 this->updateRect(); } WindowAppBlockWait::~WindowAppBlockWait() { } /// /// 添加接口(Wait工具需要添加两个ToolInerface以及两个输出接口) /// void WindowAppBlockWait::addItemInterfaces() { // 添加标准接口 WindowAppBlockStandardBase::addItemInterfaces(); // 添加ToolStart和ToolEnd接口 WindowAppBlockStandardBase::addItemToolInterfaces(); } /// /// 更新矩形区域的尺寸 /// void WindowAppBlockWait::updateRect() { // 计算高度 int blockHeight = WAIT_BASIC_HEIGHT; // 计算宽度 int blockWidth = WAIT_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 ); } /// /// 根据Wait工具当前的事件绑定信息,初始化变量 /// void WindowAppBlockWait::initVariable() { if (m_selVariable != nullptr) { return; } // 到TaskManager中查询ToolEvent信息 ToolEvent* event = g_pTaskManager->getEventByTool(m_toolInfo); if (event == nullptr) { return; } QString groupName = event->groupName(); QString name = event->name(); // 如果确实绑定了Event,则此处重新到TaskManager注册一下 if (!groupName.isEmpty() && !name.isEmpty()) { // 首先检查是否是系统内置事件 m_selVariable = g_pTaskManager->getSysEventByName(name); // 如果不是的话,再判断是否是某一个变量 if (m_selVariable == nullptr) { // 转换成对应的Variable(此处不应该为空) m_selVariable = g_pGvlManager->getVariableByName(groupName, name); // 校验是否有异常 if (m_selVariable == nullptr) { vDebug() << "[Error] Load event[" << groupName << "," << name << "] failed."; } } } } /// /// 双击弹出配置对话框 /// /// void WindowAppBlockWait::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) { if (event->button() != Qt::LeftButton || m_bShowOnly == true) { return; } // 如果当前Tool已经绑定了事件,则提前初始化一下 this->initVariable(); // 弹出Wait设置对话框 DialogWait dialogWait(m_selVariable, m_bSkipWait, &m_WaitValue, m_nTimeout); if (dialogWait.exec() != DialogWait::Accepted) { return; } // 保存用户设置的参数信息 this->m_selVariable = dialogWait.m_selVariable; this->m_bSkipWait = dialogWait.m_bSkipWait; this->m_nTimeout = dialogWait.m_nTimeout; // 2022-9-26,将用户设定的等待值输出到WaitTool的0号接口中(值可能是nullptr) m_toolInfo->Interfaces[0]->value = m_WaitValue; // 到TaskManager中绑定用户选择的触发事件和Tool之间的关系 g_pTaskManager->registerToolEvent(m_selVariable->eventTrigger, m_toolInfo); QGraphicsItem::mouseDoubleClickEvent(event); }