#pragma once #include "WindowAppBlockBase.h" /// /// 标准类型的工具功能块图基类,目前包括了Standard工具和Goto工具和Parallel工具三个子类 /// class WindowAppBlockStandardBase : public WindowAppBlockBase { Q_OBJECT // 添加这一行,否则会出现警告:Warning: qobject_cast to QGraphicsItem will not work! Q_INTERFACES(QGraphicsItem) protected: // bShowOnly 是否仅供展示使用,展示使用的话不提供右键菜单以及其他互动功能 WindowAppBlockStandardBase(TOOL* pTool, POU* Pou, bool bShowOnly = false, QGraphicsObject* parent = nullptr); public: //// 设定本Item的自定义类型 //enum { Type = ITEM_TYPE_STANDARDBASE }; //int type() const override //{ // return Type; //} // 添加接口 virtual void addItemInterfaces(); // 添加单个接口 WindowAppItemInterface* addItemInterface(_INTERFACE* pInfInfo); // 更新Block的相关位置和尺寸 void updatePosition(); // 是否是StandardBase系列的Block bool isStandardBasedBlock(); // MoveUp void onBlockMoveUp(); // MoveDown void onBlockMoveDown(); // MoveFirst void onBlockMoveFirst(); // MoveLast void onBlockMoveLast(); // 2022-9-28,直接给工具设置一个新的Index void setToolIndex(const int& newIndex); protected: void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; //// 计算区域边界 //QRectF boundingRect() const override; //// 显示右键菜单 //void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override; // 功能块有变动时 // QVariant itemChange(GraphicsItemChange change, const QVariant& value) override; //// 双击弹出工具dll中的对话框 //void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event); //signals: // // // 当工具功能块被双击时触发 // void blockDoubleClick(QGraphicsItem* pSelBlock); //QRectF boundingRect() const; protected: // 绘制功能块 void DrawBlock(QPainter* painter, bool withToolName = true); // 绘制功能块名字 void DrawBlockTitle(QPainter* painter, bool withInstName = true); // 绘制序号 void DrawIndex(QPainter* painter); // 绘制断点标识 void DrawBreakPoint(QPainter* painter); // 绘制程序指针 void DrawPointer(QPainter* painter); // 设定功能块执行状态 void SetExecStatus(QPainter* painter); // 更新矩形区域的尺寸 virtual void updateRect(); // 添加Tool接口(Start、End) void addItemToolInterfaces(); // 菜单相关 protected: // 初始化功能块的右键菜单 void createContextMenu(); // 各个菜单的响应函数 // 菜单 - Execute void onMenuExecute(); // 菜单 - ExecuteSubsequent void onMenuExecuteSub(); // 菜单 - ExecuteAll void onMenuExecuteAll(); // 菜单 - BreakPoint void onMenuBreakPoint(); // 菜单 - MoveUp void onMenuMoveUp(); // 菜单 - MoveDown void onMenuMoveDown(); // 菜单 - MoveFirst void onMenuMoveFirst(); // 菜单 - MoveLast void onMenuMoveLast(); // 菜单 - Delete void onMenuDelete(); // 菜单 - Property void onMenuProperty(); // 菜单 - Copy block void onMenuCopyblock(); // 菜单 - Copy data void onMenuCopydata(); // 菜单 - Paste void onMenuPaste(); // - Execute void MenuExecute(); // - ExecuteSubsequent void MenuExecuteSub(); // - ExecuteAll void MenuExecuteAll(); };