#ifndef MYGRAPHICSVIEW_H #define MYGRAPHICSVIEW_H #include #include #include #include #include #include #include "item.h" #include "connection.h" #include "creatitem.h" class MyGraphicsView : public QGraphicsView { Q_OBJECT public: explicit MyGraphicsView(QWidget *parent = nullptr); void dragEnterEvent(QDragEnterEvent *event) override; void dragMoveEvent(QDragMoveEvent *event) override; void dropEvent(QDropEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void contextMenuEvent(QContextMenuEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; void performPaste(const QPointF& pasteCenter); signals: void itemBoundToRegister(Item*, QString); void itemResetRegister(Item*, QString); void itemSetON(QString, quint16); public slots: void onItemRequestCopy(Item*); void onItemRequestDelete(Item*); void onItemRequestBindRegister(Item*); void onItemRequestCompare(Item*); void onItemRequestReset(Item*); void onItemRequestSetON(Item*, bool isON); private: Item* anchorItemAt(const QPoint& viewPos, Item::AnchorType& anchorType); bool drawingConnection_ = false; Item* startItem_ = nullptr; Item::AnchorType startAnchor_; QGraphicsLineItem* tempLine_ = nullptr; // struct ClipInfo { // QString input; // }; struct CopiedItem { QString type; QPointF pos; }; struct CopiedConnection { int fromIndex; int toIndex; Item::AnchorType fromType; Item::AnchorType toType; }; struct ClipInfo { QList items; QList connections; QPointF center; }; static ClipInfo clipboard_; QPointF calculateItemsCenter(const QList& items); }; #endif // MYGRAPHICSVIEW_H