refactor: abstract type check

This commit is contained in:
parker
2025-06-21 22:51:14 +01:00
parent 5e70d14d5c
commit 00adbd08e5
2 changed files with 16 additions and 11 deletions

View File

@@ -71,8 +71,7 @@ void Network::resizeEvent(QResizeEvent *event)
void Network::leftMousePress(QMouseEvent *event) void Network::leftMousePress(QMouseEvent *event)
{ {
QGraphicsItem* itemClicked = view_->itemAt(event->pos()); QGraphicsItem* itemClicked = view_->itemAt(event->pos());
bool isSocket = itemClicked && typeid(*itemClicked)==typeid(SocketGraphic); if(isType<SocketGraphic>(itemClicked))
if(isSocket)
{ {
std::cout << "SOCKET!\n"; std::cout << "SOCKET!\n";
socketClicked(static_cast<SocketGraphic*>(itemClicked), event); socketClicked(static_cast<SocketGraphic*>(itemClicked), event);
@@ -85,6 +84,8 @@ void Network::leftMousePress(QMouseEvent *event)
} }
void Network::socketClicked(SocketGraphic* socket, QMouseEvent *event) void Network::socketClicked(SocketGraphic* socket, QMouseEvent *event)
{ {
std::cout << "socket clicked\n"; std::cout << "socket clicked\n";
@@ -135,24 +136,20 @@ void Network::mouseMoved(QMouseEvent *event)
} }
QGraphicsItem* hoverItem = view_->itemAt(event->pos()); QGraphicsItem* hoverItem = view_->itemAt(event->pos());
bool isEdge = hoverItem && typeid(*hoverItem)==typeid(NodeEdgeGraphic);
// set // set node edge color
if(ctrlMod && isEdge) if(ctrlMod && isType<NodeEdgeGraphic>(hoverItem))
{ {
std::cout << "EDGE\n";
static_cast<NodeEdgeGraphic*>(hoverItem)->setColor(QColor("red")); static_cast<NodeEdgeGraphic*>(hoverItem)->setColor(QColor("red"));
hoverItem->update(); hoverItem->update();
prevHoverItem_=hoverItem; prevHoverItem_=hoverItem;
} }
// reset node edge color // reset node edge color
if( if(
prevHoverItem &&
(!ctrlMod || hoverItem!=prevHoverItem) && (!ctrlMod || hoverItem!=prevHoverItem) &&
typeid(*prevHoverItem)==typeid(NodeEdgeGraphic) isType<NodeEdgeGraphic>(prevHoverItem)
) )
{ {
std::cout << " reset\n";
static_cast<NodeEdgeGraphic*>(prevHoverItem)->useDefaultColor(); static_cast<NodeEdgeGraphic*>(prevHoverItem)->useDefaultColor();
prevHoverItem->update(); prevHoverItem->update();
} }
@@ -174,7 +171,7 @@ void Network::keyPressEvent(QKeyEvent *event)
if( if(
event->key() == Qt::Key_Control && event->key() == Qt::Key_Control &&
hoverItem && typeid(*hoverItem)==typeid(NodeEdgeGraphic) isType<NodeEdgeGraphic>(hoverItem)
) )
{ {
static_cast<NodeEdgeGraphic*>(hoverItem)->setColor(QColor("red")); static_cast<NodeEdgeGraphic*>(hoverItem)->setColor(QColor("red"));
@@ -197,7 +194,7 @@ void Network::keyReleaseEvent(QKeyEvent *event)
if( if(
prevHoverItem_ && prevHoverItem_ &&
event->key() == Qt::Key_Control && event->key() == Qt::Key_Control &&
typeid(*prevHoverItem_)==typeid(NodeEdgeGraphic) isType<NodeEdgeGraphic>(prevHoverItem_)
) )
{ {
static_cast<NodeEdgeGraphic*>(prevHoverItem_)->useDefaultColor(); static_cast<NodeEdgeGraphic*>(prevHoverItem_)->useDefaultColor();

View File

@@ -1,5 +1,7 @@
#pragma once #pragma once
#include <QWidget> #include <QWidget>
#include <qgraphicsitem.h>
#include <typeinfo>
#include "gui/network/NetworkGraphicsView.h" #include "gui/network/NetworkGraphicsView.h"
#include "gui/network/NetworkGraphicsScene.h" #include "gui/network/NetworkGraphicsScene.h"
#include "gui/network/SocketGraphic.h" #include "gui/network/SocketGraphic.h"
@@ -27,6 +29,12 @@ private:
void keyReleaseEvent(QKeyEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override;
void destroyFloatingEdge(); void destroyFloatingEdge();
template<typename T>
bool isType(QGraphicsItem* item)
{
return item && typeid(*item)==typeid(T);
}
protected: protected:
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
}; };