WindowAppBlockStandardBase.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #pragma once
  2. #include "WindowAppBlockBase.h"
  3. /// <summary>
  4. /// 标准类型的工具功能块图基类,目前包括了Standard工具和Goto工具和Parallel工具三个子类
  5. /// </summary>
  6. class WindowAppBlockStandardBase : public WindowAppBlockBase
  7. {
  8. Q_OBJECT
  9. // 添加这一行,否则会出现警告:Warning: qobject_cast to QGraphicsItem will not work!
  10. Q_INTERFACES(QGraphicsItem)
  11. protected:
  12. // bShowOnly 是否仅供展示使用,展示使用的话不提供右键菜单以及其他互动功能
  13. WindowAppBlockStandardBase(TOOL* pTool, POU* Pou, bool bShowOnly = false, QGraphicsObject* parent = nullptr);
  14. public:
  15. //// 设定本Item的自定义类型
  16. //enum { Type = ITEM_TYPE_STANDARDBASE };
  17. //int type() const override
  18. //{
  19. // return Type;
  20. //}
  21. // 添加接口
  22. virtual void addItemInterfaces();
  23. // 添加单个接口
  24. WindowAppItemInterface* addItemInterface(_INTERFACE* pInfInfo);
  25. // 更新Block的相关位置和尺寸
  26. void updatePosition();
  27. // 是否是StandardBase系列的Block
  28. bool isStandardBasedBlock();
  29. // MoveUp
  30. void onBlockMoveUp();
  31. // MoveDown
  32. void onBlockMoveDown();
  33. // MoveFirst
  34. void onBlockMoveFirst();
  35. // MoveLast
  36. void onBlockMoveLast();
  37. // 2022-9-28,直接给工具设置一个新的Index
  38. void setToolIndex(const int& newIndex);
  39. protected:
  40. void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
  41. //// 计算区域边界
  42. //QRectF boundingRect() const override;
  43. //// 显示右键菜单
  44. //void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
  45. // 功能块有变动时
  46. // QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
  47. //// 双击弹出工具dll中的对话框
  48. //void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event);
  49. //signals:
  50. //
  51. // // 当工具功能块被双击时触发
  52. // void blockDoubleClick(QGraphicsItem* pSelBlock);
  53. //QRectF boundingRect() const;
  54. protected:
  55. // 绘制功能块
  56. void DrawBlock(QPainter* painter, bool withToolName = true);
  57. // 绘制功能块名字
  58. void DrawBlockTitle(QPainter* painter, bool withInstName = true);
  59. // 绘制序号
  60. void DrawIndex(QPainter* painter);
  61. // 绘制断点标识
  62. void DrawBreakPoint(QPainter* painter);
  63. // 绘制程序指针
  64. void DrawPointer(QPainter* painter);
  65. // 设定功能块执行状态
  66. void SetExecStatus(QPainter* painter);
  67. // 更新矩形区域的尺寸
  68. virtual void updateRect();
  69. // 添加Tool接口(Start、End)
  70. void addItemToolInterfaces();
  71. // 菜单相关
  72. protected:
  73. // 初始化功能块的右键菜单
  74. void createContextMenu();
  75. // 各个菜单的响应函数
  76. // 菜单 - Execute
  77. void onMenuExecute();
  78. // 菜单 - ExecuteSubsequent
  79. void onMenuExecuteSub();
  80. // 菜单 - ExecuteAll
  81. void onMenuExecuteAll();
  82. // 菜单 - BreakPoint
  83. void onMenuBreakPoint();
  84. // 菜单 - MoveUp
  85. void onMenuMoveUp();
  86. // 菜单 - MoveDown
  87. void onMenuMoveDown();
  88. // 菜单 - MoveFirst
  89. void onMenuMoveFirst();
  90. // 菜单 - MoveLast
  91. void onMenuMoveLast();
  92. // 菜单 - Delete
  93. void onMenuDelete();
  94. // 菜单 - Property
  95. void onMenuProperty();
  96. // 菜单 - Copy block
  97. void onMenuCopyblock();
  98. // 菜单 - Copy data
  99. void onMenuCopydata();
  100. // 菜单 - Paste
  101. void onMenuPaste();
  102. // - Execute
  103. void MenuExecute();
  104. // - ExecuteSubsequent
  105. void MenuExecuteSub();
  106. // - ExecuteAll
  107. void MenuExecuteAll();
  108. };