ui: graph showing neighbours
The graph view can now display the n1 neighbours of the active node, including connections between neighbours.
This commit is contained in:
@@ -20,6 +20,15 @@ QtGraphNode::QtGraphNode(const Vec2i& position, const std::string& name, const I
|
||||
|
||||
QtGraphNode::~QtGraphNode()
|
||||
{
|
||||
std::list<std::weak_ptr<GraphEdge> >::iterator it = m_inEdges.begin();
|
||||
for(it; it != m_inEdges.end(); it++)
|
||||
{
|
||||
std::shared_ptr<GraphEdge> edge = it->lock();
|
||||
if(edge != NULL)
|
||||
{
|
||||
edge->removeEdgeFromScene();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string QtGraphNode::getName()
|
||||
@@ -32,61 +41,63 @@ Vec2i QtGraphNode::getPosition()
|
||||
return Vec2i(this->scenePos().x(), this->scenePos().y());
|
||||
}
|
||||
|
||||
void QtGraphNode::addOutEdge(const std::shared_ptr<GraphEdge>& edge)
|
||||
{
|
||||
m_outEdges.push_back(edge);
|
||||
}
|
||||
|
||||
void QtGraphNode::addInEdge(const std::weak_ptr<GraphEdge>& edge)
|
||||
{
|
||||
m_inEdges.push_back(edge);
|
||||
}
|
||||
|
||||
void QtGraphNode::removeOutEdge(const std::shared_ptr<GraphEdge>& edge)
|
||||
bool QtGraphNode::addOutEdge(const std::shared_ptr<GraphEdge>& edge)
|
||||
{
|
||||
std::list<std::shared_ptr<GraphEdge> >::iterator it = m_outEdges.begin();
|
||||
for(it; it != m_outEdges.end(); it++)
|
||||
{
|
||||
if(*it == edge)
|
||||
if ((*it)->getOwner().lock() == edge->getOwner().lock() && (*it)->getTarget().lock() == edge->getTarget().lock())
|
||||
{
|
||||
m_outEdges.erase(it, it);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
m_outEdges.push_back(edge);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QtGraphNode::addInEdge(const std::weak_ptr<GraphEdge>& edge)
|
||||
{
|
||||
std::list<std::weak_ptr<GraphEdge> >::iterator it = m_inEdges.begin();
|
||||
for(it; it != m_inEdges.end(); it++)
|
||||
{
|
||||
std::shared_ptr<GraphEdge> existingEdge = it->lock();
|
||||
if(existingEdge != NULL)
|
||||
{
|
||||
if (existingEdge->getOwner().lock() == edge.lock()->getOwner().lock() &&
|
||||
existingEdge->getTarget().lock() == edge.lock()->getTarget().lock())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_inEdges.push_back(edge);
|
||||
return true;
|
||||
}
|
||||
|
||||
void QtGraphNode::removeOutEdge(GraphEdge* edge)
|
||||
{
|
||||
std::list<std::shared_ptr<GraphEdge> >::iterator it = m_outEdges.begin();
|
||||
while(it != m_outEdges.end())
|
||||
{
|
||||
if((*it).get() == edge)
|
||||
{
|
||||
m_outEdges.erase(it);
|
||||
break;
|
||||
}
|
||||
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
void QtGraphNode::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
void QtGraphNode::addSubNode(const std::shared_ptr<GraphNode>& node)
|
||||
{
|
||||
m_mouseOffset.x = event->pos().x();
|
||||
m_mouseOffset.y = event->pos().y();
|
||||
m_subNodes.push_back(node);
|
||||
}
|
||||
|
||||
void QtGraphNode::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
|
||||
{
|
||||
MessageActivateToken message(m_tokenId);
|
||||
message.dispatch();
|
||||
}
|
||||
|
||||
void QtGraphNode::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
this->setPos(event->scenePos().x() - m_mouseOffset.x, event->scenePos().y() - m_mouseOffset.y);
|
||||
|
||||
Vec2i p(event->scenePos().x(), event->scenePos().y());
|
||||
|
||||
std::list<std::shared_ptr<GraphEdge> >::iterator it = m_outEdges.begin();
|
||||
for(it; it != m_outEdges.end(); it++)
|
||||
{
|
||||
(*it)->ownerMoved();
|
||||
}
|
||||
|
||||
std::list<std::weak_ptr<GraphEdge> >::iterator it2 = m_inEdges.begin();
|
||||
for(it2; it2 != m_inEdges.end(); it2++)
|
||||
{
|
||||
std::shared_ptr<GraphEdge> edge = it2->lock();
|
||||
if(edge.get() != NULL)
|
||||
{
|
||||
edge->targetMoved();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_inEdges.erase(it2, it2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user