Changeset 8469:4a2d7902f4c9 in orange


Ignore:
Timestamp:
07/26/11 12:26:41 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
e02af1e860ce2a6ca226aff600054a9b33e14ca2
Message:

Add SIP support for QMap<int, double>

Location:
source/orangeplot
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source/orangeplot/networkcurve.sip

    r8464 r8469  
    9393    void set_edges(Edges edges); 
    9494     
    95     void set_node_color(QMap<int, QColor*> colors); 
     95    void set_node_color(QMap<int, QColor*> colors);     
     96    void set_edge_size(QMap<int, double> sizes = QMap<int, double>(), double min_size=0, double max_size=0); 
    9697     
    9798    void set_min_node_size(double size); 
  • source/orangeplot/types.sip

    r8423 r8469  
    1 // QMap<int, TYPE> is implemented as a Python dictionary. 
     1// QMap<int, TYPE*> is implemented as a Python dictionary. 
    22template<TYPE> 
    33%MappedType QMap<int, TYPE*> /DocType="dict-of-int-TYPE"/ 
     
    9696%End 
    9797}; 
     98 
     99 
     100// QMap<int, double> is implemented as a Python dictionary. 
     101%MappedType QMap<int, double> /DocType="dict-of-int-float"/ 
     102{ 
     103%TypeHeaderCode 
     104#include <qmap.h> 
     105%End 
     106 
     107%ConvertFromTypeCode 
     108    // Create the dictionary. 
     109    PyObject *d = PyDict_New(); 
     110 
     111    if (!d) 
     112        return NULL; 
     113 
     114    // Set the dictionary elements. 
     115    QMap<int, double>::const_iterator i = sipCpp->constBegin(); 
     116 
     117    while (i != sipCpp->constEnd()) 
     118    { 
     119        PyObject *kobj = SIPLong_FromLong(i.key()); 
     120        PyObject *tobj = PyFloat_FromDouble(i.value()); 
     121        if (kobj == NULL || tobj == NULL || PyDict_SetItem(d, kobj, tobj) < 0) 
     122        { 
     123            Py_DECREF(d); 
     124            if (kobj) 
     125            { 
     126                Py_DECREF(kobj); 
     127            } 
     128            if (tobj) 
     129            { 
     130                Py_DECREF(tobj); 
     131            } 
     132            return NULL; 
     133        } 
     134 
     135        Py_DECREF(kobj); 
     136        Py_DECREF(tobj); 
     137 
     138        ++i; 
     139    } 
     140 
     141    return d; 
     142%End 
     143 
     144%ConvertToTypeCode 
     145    PyObject *kobj, *tobj; 
     146    SIP_SSIZE_T i = 0; 
     147 
     148    // Check the type if that is all that is required. 
     149    if (sipIsErr == NULL) 
     150    { 
     151        if (!PyDict_Check(sipPy)) 
     152            return 0; 
     153        return 1; 
     154    } 
     155 
     156    QMap<int, double> *qm = new QMap<int, double>; 
     157  
     158    while (PyDict_Next(sipPy, &i, &kobj, &tobj)) 
     159    { 
     160        int k = SIPLong_AsLong(kobj); 
     161        double t = PyFloat_AsDouble(tobj); 
     162  
     163        if (*sipIsErr) 
     164        { 
     165            delete qm; 
     166            return 0; 
     167        } 
     168 
     169        qm->insert(k, t); 
     170    } 
     171  
     172    *sipCppPtr = qm; 
     173  
     174    return sipGetState(sipTransferObj); 
     175%End 
     176}; 
Note: See TracChangeset for help on using the changeset viewer.