Changeset 8520:a119d477327e in orange


Ignore:
Timestamp:
07/29/11 07:59:45 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
294fff782367bf47e6b49dc7f8ce8c6f872d2193
Message:

When removing a node, remove its connected edges from the list and delete them

Location:
source/orangeplot
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source/orangeplot/networkcurve.cpp

    r8518 r8520  
    1010 
    1111/************/ 
    12 /* NodeItem */ 
     12/* NodeItem */   
    1313/************/ 
    1414 
     
    2626NodeItem::~NodeItem() 
    2727{ 
    28     /* 
    29     foreach(EdgeItem* edge, m_connected_edges) 
    30     { 
    31         m_connected_edges.removeOne(edge); 
    32         delete edge; 
    33     } 
    34     */ 
    3528} 
    3629 
     
    125118void NodeItem::add_connected_edge(EdgeItem* edge) 
    126119{ 
    127     m_connected_edges << edge; 
     120    if (!m_connected_edges.contains(edge)) 
     121    { 
     122        m_connected_edges << edge; 
     123    } 
    128124} 
    129125 
     
    143139/************/ 
    144140 
    145 EdgeItem::EdgeItem(NodeItem* u, NodeItem* v, QGraphicsItem* parent, QGraphicsScene* scene): QGraphicsLineItem(parent, scene) 
     141EdgeItem::EdgeItem(NodeItem* u, NodeItem* v, QGraphicsItem* parent, QGraphicsScene* scene): QGraphicsLineItem(parent, scene), 
     142m_u(0), m_v(0) 
    146143{ 
    147144    set_u(u); 
     
    161158void EdgeItem::set_u(NodeItem* item) 
    162159{ 
    163     item->add_connected_edge(this); 
     160    if (m_u) 
     161    { 
     162        m_u->remove_connected_edge(this); 
     163    } 
     164    if (item) 
     165    { 
     166        item->add_connected_edge(this); 
     167    } 
    164168    m_u = item; 
    165169} 
     
    172176void EdgeItem::set_v(NodeItem* item) 
    173177{ 
    174     item->add_connected_edge(this); 
     178    if (m_v) 
     179    { 
     180        m_v->remove_connected_edge(this); 
     181    } 
     182    if (item) 
     183    { 
     184        item->add_connected_edge(this); 
     185    } 
    175186    m_v = item; 
    176187} 
     
    492503void NetworkCurve::remove_nodes(const QList<int> nodes) 
    493504{ 
    494     /* 
    495     QList<int>::ConstIterator it; 
    496     for (it = nodes.constBegin(); it != nodes.constEnd(); ++it) 
    497     { 
    498         delete m_nodes.take(*it); 
    499     } 
    500     */ 
     505    foreach (int i, nodes) 
     506    { 
     507        remove_node(i); 
     508    } 
     509     
     510} 
     511 
     512void NetworkCurve::remove_node(int index) 
     513{ 
     514    NodeItem* node = m_nodes.take(index); 
     515    foreach (EdgeItem* edge, node->connected_edges()) 
     516    { 
     517        m_edges.removeOne(edge); 
     518        delete edge; 
     519    } 
     520    delete node; 
    501521} 
    502522 
  • source/orangeplot/networkcurve.h

    r8518 r8520  
    156156    void set_nodes(Nodes nodes); 
    157157    void remove_nodes(const QList<int> nodes); 
     158    void remove_node(int index); 
    158159    void set_edges(Edges edges); 
    159160    QList<QPair<int, int> > edge_indices(); 
Note: See TracChangeset for help on using the changeset viewer.