#pragma once #include #include #include #include #include "gui/network/NetworkGraphicsView.h" #include "gui/network/NodeEdgeGraphic.h" #include "gui/network/NetworkGraphicsScene.h" #include "gui/network/SocketGraphic.h" #include "gui/network/FloatingEdgeGraphic.h" #include #include class Network : public QWidget { public: Network(QWidget* parent = nullptr); void socketClicked(SocketGraphic* socket, QMouseEvent *event); void mouseMoved(QMouseEvent *event); private: QLayout* mainLayout_; NetworkGraphicsScene* scene_; NetworkGraphicsView* view_; FloatingEdgeGraphic* floatingEdge_=nullptr; SocketGraphic* startSocket_=nullptr; QGraphicsItem* prevHoverItem_=nullptr; // QPointer prevHoverItem_=nullptr; // std::shared_ptr prevHoverItem_=nullptr; // QList prevHoverItems_; void keyPressEvent(QKeyEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override; void destroyFloatingEdge(); void deleteEdge(QGraphicsItem* edge); void highlightEdge(QGraphicsItem* edge, bool state); void leftMousePressed(QMouseEvent* event); template bool isType(QGraphicsItem* item) { return item && typeid(*item)==typeid(T); } template QGraphicsItem* itemOfType(QList items) { // std::cout << "count: " << items.size() << "\n"; for(QGraphicsItem* item : items) { std::cout << "item: " << typeid(*item).name() << "\n"; if(item && typeid(*item)==typeid(T)) { return item; } } return nullptr; } protected: void resizeEvent(QResizeEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override; };