WindowAppBlockForloop.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "WindowAppBlockForloop.h"
  2. #include "WindowAppItemInterface.h"
  3. #include "DialogForLoop.h"
  4. WindowAppBlockForloop::WindowAppBlockForloop(TOOL* pNewTool, POU* Pou, bool bShowOnly /*= false*/, QGraphicsObject* parent /*= nullptr*/)
  5. : WindowAppBlockStandardBase(pNewTool, Pou, bShowOnly, parent)
  6. {
  7. // 更新矩形区域的尺寸
  8. this->updateRect();
  9. }
  10. WindowAppBlockForloop::~WindowAppBlockForloop()
  11. {
  12. }
  13. /// <summary>
  14. /// 添加接口(Forloop工具需要额外添加ToolInerface)
  15. /// </summary>
  16. void WindowAppBlockForloop::addItemInterfaces()
  17. {
  18. // 添加标准接口
  19. WindowAppBlockStandardBase::addItemInterfaces();
  20. // 添加ToolStart和ToolEnd接口
  21. WindowAppBlockStandardBase::addItemToolInterfaces();
  22. }
  23. /// <summary>
  24. /// 双击弹出配置对话框
  25. /// </summary>
  26. /// <param name="event"></param>
  27. void WindowAppBlockForloop::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
  28. {
  29. if (event->button() != Qt::LeftButton || m_bShowOnly == true)
  30. {
  31. return;
  32. }
  33. int nSize = 0, nIndex = 0;
  34. // 从Tool中取出当前的Size
  35. if (!m_toolInfo->Interfaces[0]->isValueNullptr())
  36. {
  37. nSize = m_toolInfo->Interfaces[0]->getValue<int>();
  38. }
  39. // 从Tool中取出当前的Index
  40. if (!m_toolInfo->Interfaces[1]->isValueNullptr())
  41. {
  42. nIndex = m_toolInfo->Interfaces[1]->getValue<int>();
  43. }
  44. // 弹出Forloop设置对话框
  45. DialogForLoop dialogForloop(nSize ,nIndex);
  46. if (dialogForloop.exec() != DialogForLoop::Accepted)
  47. {
  48. return;
  49. }
  50. // 取得用户设置的Size
  51. nSize = dialogForloop.m_nSize;
  52. // 为工具设置Size输入
  53. m_toolInfo->Interfaces[0]->setValue(nSize, VALUE_PASS_MODE::PASS_BY_VALUE);
  54. qDebug() << "[WindowAppBlockForloop] - Set ForLoop size to :" << nSize;
  55. QGraphicsItem::mouseDoubleClickEvent(event);
  56. }
  57. /// <summary>
  58. /// 更新矩形区域的尺寸
  59. /// </summary>
  60. void WindowAppBlockForloop::updateRect()
  61. {
  62. // 计算高度
  63. int blockHeight = FORLOOP_BASIC_HEIGHT;
  64. // 计算宽度
  65. int blockWidth = PARA_BASIC_WIDTH;
  66. // 主体矩形区域
  67. blockRect.setRect(
  68. -blockWidth / 2,
  69. -blockHeight / 2,
  70. blockWidth,
  71. blockHeight
  72. );
  73. // 序号矩形区域
  74. blockIndexRect.setRect(
  75. blockRect.right() - TBD_INDEX_WIDTH,
  76. blockRect.top() - TBD_INDEX_HEIGHT / 2,
  77. TBD_INDEX_WIDTH,
  78. TBD_INDEX_HEIGHT
  79. );
  80. // 总体矩形边界
  81. blockBoundingRect.setRect(
  82. blockRect.left(),
  83. blockRect.top() - TBD_INDEX_HEIGHT / 2,
  84. blockRect.width() + TBD_SHADOW_COUNT * PEN_LINE_WIDTH,
  85. blockRect.height() + TBD_INDEX_HEIGHT / 2 + TBD_SHADOW_COUNT * PEN_LINE_WIDTH
  86. );
  87. }