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:
Manuel Dobusch
2014-07-09 16:32:15 +02:00
parent 2009b7526a
commit d12fd3edf3
14 changed files with 338 additions and 64 deletions
+54 -43
View File
@@ -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);
}
}
}