Changeset 8582:7bb99dccf6ed in orange


Ignore:
Timestamp:
08/03/11 10:32:54 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
eca1a972afbe279f46002b4b9286c14ecd4cbfbc
Message:

Add transfer directives to SIP files, and make sure NetworkCurve's nodes and edges are deleted properly

Location:
source/orangeplot
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • source/orangeplot/curve.cpp

    r8575 r8582  
    337337        { 
    338338            f.cancel(); 
     339        } 
     340    } 
     341    foreach (QFuture<void> f, m_currentUpdate) 
     342    { 
     343        if (f.isRunning()) 
     344        { 
    339345            f.waitForFinished(); 
    340346        } 
  • source/orangeplot/curve.h

    r8570 r8582  
    190190  Curve::UpdateFlags needs_update(); 
    191191  void set_updated(Curve::UpdateFlags flags); 
     192  void cancelAllUpdates(); 
    192193   
    193194private: 
     
    195196  void updateNumberOfItems(); 
    196197  void changeContinuous(); 
    197   void cancelAllUpdates(); 
    198198   
    199199  QColor m_color; 
  • source/orangeplot/networkcurve.cpp

    r8579 r8582  
    154154EdgeItem::~EdgeItem() 
    155155{ 
    156  
     156    if (m_u) 
     157    { 
     158        m_u->remove_connected_edge(this); 
     159    } 
     160    if (m_v) 
     161    { 
     162        m_v->remove_connected_edge(this); 
     163    } 
    157164} 
    158165 
     
    271278NetworkCurve::~NetworkCurve() 
    272279{ 
    273  
     280    qDeleteAll(m_edges); 
     281    m_edges.clear(); 
     282    qDeleteAll(m_nodes); 
     283    m_nodes.clear(); 
    274284} 
    275285 
     
    487497} 
    488498 
    489 void NetworkCurve::set_edges(NetworkCurve::Edges edges) 
    490 { 
     499void NetworkCurve::set_edges(const NetworkCurve::Edges& edges) 
     500{ 
     501    cancelAllUpdates(); 
    491502    qDeleteAll(m_edges); 
    492503    m_edges = edges; 
     
    513524} 
    514525 
    515 void NetworkCurve::set_nodes(NetworkCurve::Nodes nodes) 
    516 { 
     526void NetworkCurve::set_nodes(const NetworkCurve::Nodes& nodes) 
     527{ 
     528    cancelAllUpdates(); 
     529    qDeleteAll(m_edges); 
     530    m_edges.clear(); 
    517531    qDeleteAll(m_nodes); 
    518532    m_nodes = nodes; 
     
    525539} 
    526540 
    527 void NetworkCurve::remove_nodes(const QList<int> nodes) 
    528 { 
     541void NetworkCurve::remove_nodes(const QList<int>& nodes) 
     542{ 
     543    cancelAllUpdates(); 
    529544    foreach (int i, nodes) 
    530545    { 
     
    536551void NetworkCurve::remove_node(int index) 
    537552{ 
     553    cancelAllUpdates(); 
     554    if (!m_nodes.contains(index)) 
     555    { 
     556        qWarning() << "Trying to remove node" << index << "which is not in the network"; 
     557        return; 
     558    } 
    538559    NodeItem* node = m_nodes.take(index); 
     560    Q_ASSERT(node->index() == index); 
    539561    Plot* p = plot(); 
    540562    if (p) 
     
    545567        p->remove_point(d, this); 
    546568    } 
     569     
    547570    foreach (EdgeItem* edge, node->connected_edges()) 
    548571    { 
     
    550573        delete edge; 
    551574    } 
     575    Q_ASSERT(node->connected_edges().isEmpty()); 
    552576    delete node; 
    553577} 
    554578 
    555 void NetworkCurve::add_nodes(Nodes nodes, Edges edges) 
    556 { 
    557     int i, ndx; 
    558     for (i = 0; i < nodes.size(); ++i) 
    559     { 
    560         ndx = nodes[i]->index(); 
    561         if (m_nodes.contains(ndx)) 
    562         { 
    563             remove_node(ndx); 
     579void NetworkCurve::add_nodes(const NetworkCurve::Nodes& nodes, const NetworkCurve::Edges& edges) 
     580{ 
     581    Nodes::ConstIterator it = nodes.constBegin(); 
     582    Nodes::ConstIterator end = nodes.constEnd(); 
     583    for (it; it != end; ++it) 
     584    { 
     585        if (m_nodes.contains(it.key())) 
     586        { 
     587            remove_node(it.key()); 
    564588        } 
    565589    } 
     
    571595} 
    572596 
    573 void NetworkCurve::set_node_colors(const QMap<int, QColor*> colors) 
     597void NetworkCurve::set_node_colors(const QMap<int, QColor*>& colors) 
    574598{ 
    575599    QMap<int, QColor*>::ConstIterator it; 
     
    580604} 
    581605 
    582 void NetworkCurve::set_node_sizes(QMap<int, double> sizes, double min_size, double max_size) 
    583 { 
     606void NetworkCurve::set_node_sizes(const QMap<int, double>& sizes, double min_size, double max_size) 
     607{ 
     608    cancelAllUpdates(); 
    584609    // TODO inverted 
    585610    NodeItem* node; 
     
    589614    double max_size_value = std::numeric_limits<double>::min(); 
    590615 
    591     QMap<int, double>::Iterator it; 
     616    QMap<int, double>::ConstIterator it; 
    592617    for (it = sizes.begin(); it != sizes.end(); ++it) 
    593618    { 
     
    682707} 
    683708 
    684 void NetworkCurve::set_node_labels(const QMap<int, QString> labels) 
    685 { 
     709void NetworkCurve::set_node_labels(const QMap<int, QString>& labels) 
     710{ 
     711    cancelAllUpdates(); 
    686712    QMap<int, QString>::ConstIterator it; 
    687713    for (it = labels.constBegin(); it != labels.constEnd(); ++it) 
     
    691717} 
    692718 
    693 void NetworkCurve::set_node_tooltips(const QMap<int, QString> tooltips) 
    694 { 
     719void NetworkCurve::set_node_tooltips(const QMap<int, QString>& tooltips) 
     720{ 
     721    cancelAllUpdates(); 
    695722    QMap<int, QString>::ConstIterator it; 
    696723    for (it = tooltips.constBegin(); it != tooltips.constEnd(); ++it) 
     
    700727} 
    701728 
    702 void NetworkCurve::set_edge_color(const QList<QColor*> colors) 
    703 { 
     729void NetworkCurve::set_edge_color(const QList<QColor*>& colors) 
     730{ 
     731    cancelAllUpdates(); 
    704732    int i; 
    705733    for (i = 0; i < colors.size(); ++i) 
  • source/orangeplot/networkcurve.h

    r8579 r8582  
    157157    int random(); 
    158158     
    159     void set_nodes(Nodes nodes); 
    160     void remove_nodes(const QList<int> nodes); 
     159    void set_nodes(const Nodes& nodes); 
     160    void remove_nodes(const QList< int >& nodes); 
    161161    void remove_node(int index); 
    162     void add_nodes(Nodes nodes, Edges edges); 
     162    void add_nodes(const Nodes& nodes, const Edges& edges); 
    163163 
    164164    Nodes nodes(); 
    165165     
    166     void set_edges(Edges edges); 
     166    void set_edges(const Edges& edges); 
    167167    QList<QPair<int, int> > edge_indices(); 
    168168    Edges edges(); 
    169169 
    170     void set_node_colors(const QMap<int, QColor*> colors); 
    171     void set_node_sizes(QMap<int, double> sizes=QMap<int, double>(), double min_size=0, double max_size=0); 
    172     void set_edge_color(const QList<QColor*> colors); 
    173     void set_node_labels(const QMap<int, QString> labels); 
    174     void set_node_tooltips(const QMap<int, QString> tooltips); 
     170    void set_node_colors(const QMap<int, QColor*>& colors); 
     171    void set_node_sizes(const QMap<int, double>& sizes = QMap<int, double>(), double min_size=0, double max_size=0); 
     172    void set_edge_color(const QList< QColor* >& colors); 
     173    void set_node_labels(const QMap<int, QString>& labels); 
     174    void set_node_tooltips(const QMap<int, QString>& tooltips); 
    175175 
    176176    void set_min_node_size(double size); 
  • source/orangeplot/networkcurve.sip

    r8580 r8582  
    7979class NetworkCurve : Curve 
    8080{ 
     81 
     82%TypeCode 
     83static void transfer_nodes_to(const NetworkCurve::Nodes& nodes, NetworkCurve* owner) 
     84{ 
     85    foreach (NodeItem* item, nodes) 
     86    { 
     87        sipTransferTo(sipGetPyObject(item, sipType_NodeItem), sipGetPyObject(owner, sipType_NetworkCurve)); 
     88    } 
     89} 
     90 
     91static void transfer_edges_to(const NetworkCurve::Edges& edges, NetworkCurve* owner) 
     92{ 
     93    foreach (EdgeItem* item, edges) 
     94    { 
     95        sipTransferTo(sipGetPyObject(item, sipType_EdgeItem), sipGetPyObject(owner, sipType_NetworkCurve)); 
     96    } 
     97} 
     98%End 
     99 
    81100public: 
    82101    typedef QList<EdgeItem*> Edges /NoTypeName/; 
     
    92111    int random(); 
    93112     
    94     void set_nodes(QMap<int, NodeItem*> nodes); 
    95     void remove_nodes(const QList<int> nodes); 
     113    void set_nodes(const Nodes& nodes); 
     114    %MethodCode 
     115        transfer_nodes_to(*a0, sipCpp); 
     116        sipCpp->set_nodes(*a0); 
     117    %End 
     118    void remove_nodes(const QList<int>& nodes); 
    96119    void remove_node(int index); 
    97     void add_nodes(Nodes nodes, Edges edges); 
     120    void add_nodes(const Nodes& nodes, const Edges& edges); 
     121    %MethodCode 
     122        transfer_nodes_to(*a0, sipCpp); 
     123        transfer_edges_to(*a1, sipCpp); 
     124        sipCpp->add_nodes(*a0, *a1); 
     125    %End 
    98126     
    99127    Nodes nodes(); 
    100128 
    101     void set_edges(Edges edges); 
     129    void set_edges(const Edges& edges); 
     130    %MethodCode 
     131        transfer_edges_to(*a0, sipCpp); 
     132        sipCpp->set_edges(*a0); 
     133    %End 
    102134    QList<QPair<int, int> > edge_indices(); 
    103135    Edges edges(); 
    104136 
    105     void set_node_colors(const QMap<int, QColor*> colors);     
    106     void set_node_sizes(QMap<int, double> sizes = QMap<int, double>(), double min_size=0, double max_size=0); 
    107     void set_node_labels(const QMap<int, QString> labels); 
    108     void set_node_tooltips(const QMap<int, QString> tooltips); 
     137    void set_node_colors(const QMap<int, QColor*>& colors);     
     138    void set_node_sizes(const QMap<int, double>& sizes = QMap<int, double>(), double min_size=0, double max_size=0); 
     139    void set_node_labels(const QMap<int, QString>& labels); 
     140    void set_node_tooltips(const QMap<int, QString>& tooltips); 
    109141     
    110     void set_edge_color(const QList<QColor*> colors); 
     142    void set_edge_color(const QList<QColor*>& colors); 
    111143     
    112144    void set_min_node_size(double size); 
Note: See TracChangeset for help on using the changeset viewer.