Changeset 8668:10f67ab36637 in orange


Ignore:
Timestamp:
08/12/11 11:47:17 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
68578326ec11fdc6ab4be1911d3edfbaffefdfc7
Message:

Add support for marking points from subsets.

Files:
11 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWScatterPlotGraphQt.py

    r8667 r8668  
    5858    def updateData(self, xAttr, yAttr, colorAttr, shapeAttr = "", sizeShapeAttr = "", labelAttr = None, **args): 
    5959        self.clear() 
     60        qDebug('Updating with data %s and subset %s' % (self.rawData, self.rawSubsetData)) 
    6061        self.tooltipData = [] 
    6162        self.potentialsClassifier = None 
     
    163164            Create a single curve with different points 
    164165        """ 
    165         self.singleCurve = True 
    166         if self.singleCurve:                 
    167             if colorIndex != -1: 
    168                 if self.dataDomain[colorIndex].varType == orange.VarTypes.Continuous: 
    169                     colorData = [QColor(*self.contPalette.getRGB(i)) for i in self.noJitteringScaledData[colorIndex]] 
    170                 else: 
    171                     colorData = [QColor(*self.discPalette.getRGB(i)) for i in self.originalData[colorIndex]] 
    172             else: colorData = [(0,0,0)] 
    173  
    174             if sizeIndex != -1: 
    175                 sizeData = [MIN_SHAPE_SIZE + round(i * self.pointWidth) for i in self.noJitteringScaledData[sizeIndex]] 
     166 
     167        if colorIndex != -1: 
     168            if self.dataDomain[colorIndex].varType == orange.VarTypes.Continuous: 
     169                colorData = [QColor(*self.contPalette.getRGB(i)) for i in self.noJitteringScaledData[colorIndex]] 
    176170            else: 
    177                 sizeData = [self.pointWidth] 
    178                  
    179             if shapeIndex != -1 and self.dataDomain[shapeIndex].varType == orange.VarTypes.Discrete: 
    180                 shapeData = [self.curveSymbols[int(i)] for i in self.originalData[shapeIndex]] 
     171                colorData = [QColor(*self.discPalette.getRGB(i)) for i in self.originalData[colorIndex]] 
     172        else: colorData = [Qt.black] 
     173 
     174        if sizeIndex != -1: 
     175            sizeData = [MIN_SHAPE_SIZE + round(i * self.pointWidth) for i in self.noJitteringScaledData[sizeIndex]] 
     176        else: 
     177            sizeData = [self.pointWidth] 
     178             
     179        if shapeIndex != -1 and self.dataDomain[shapeIndex].varType == orange.VarTypes.Discrete: 
     180            shapeData = [self.curveSymbols[int(i)] for i in self.originalData[shapeIndex]] 
     181        else: 
     182            shapeData = [self.curveSymbols[0]] 
     183             
     184        if labelAttr and labelAttr in [self.rawData.domain.getmeta(mykey).name for mykey in self.rawData.domain.getmetas().keys()] + [var.name for var in self.rawData.domain]: 
     185            if self.rawData[0][labelAttr].varType == orange.VarTypes.Continuous: 
     186                labelData = ["%4.1f" % orange.Value(i[labelAttr]) if not i[labelAttr].isSpecial() else "" for i in self.rawData] 
    181187            else: 
    182                 shapeData = [self.curveSymbols[0]] 
    183                  
    184             if labelAttr and labelAttr in [self.rawData.domain.getmeta(mykey).name for mykey in self.rawData.domain.getmetas().keys()] + [var.name for var in self.rawData.domain]: 
    185                 if self.rawData[0][labelAttr].varType == orange.VarTypes.Continuous: 
    186                     labelData = ["%4.1f" % orange.Value(i[labelAttr]) if not i[labelAttr].isSpecial() else "" for i in self.rawData] 
    187                 else: 
    188                     labelData = [str(i[labelAttr].value) if not i[labelAttr].isSpecial() else "" for i in self.rawData] 
    189             else: 
    190                 labelData = [""] 
    191  
    192             self.set_main_curve_data(xData, yData, colorData, labelData, sizeData, shapeData) 
     188                labelData = [str(i[labelAttr].value) if not i[labelAttr].isSpecial() else "" for i in self.rawData] 
     189        else: 
     190            labelData = [""] 
     191             
     192        qDebug(' '.join(str(len(i)) for i in [xData, yData, colorData, labelData, sizeData, shapeData])) 
     193        qDebug(repr(xData[:50])) 
     194 
     195        if self.haveSubsetData: 
     196            subset_ids = [example.id for example in self.rawSubsetData] 
     197            marked_data = [example.id in subset_ids for example in self.rawData] 
     198            showFilled = 0 
    193199            sub_x_data, sub_y_data = self.getXYSubsetDataPositions(xAttr, yAttr) 
    194             self.mark_points_at(sub_x_data, sub_y_data) 
    195  
    196         # ############################################################## 
    197         # if we have insideColors defined 
    198         elif self.insideColors and self.dataHasDiscreteClass and self.haveData: 
    199             # variables and domain for the table 
    200             classData = self.originalData[self.dataClassIndex] 
    201             (insideData, stringData) = self.insideColors 
    202             j = 0 
    203             equalSize = len(self.rawData) == len(insideData) 
    204             for i in range(len(self.rawData)): 
    205                 if not validData[i]: 
    206                     j += equalSize 
    207                     continue 
    208  
    209                 fillColor = self.discPalette[classData[i], 255*insideData[j]] 
    210                 edgeColor = self.discPalette[classData[i]] 
    211  
    212                 key = self.addCurve("", fillColor, edgeColor, self.pointWidth, xData = [xData[i]], yData = [yData[i]]) 
    213  
    214                 # we add a tooltip for this point 
    215                 text = self.getExampleTooltipText(self.rawData[j], attrIndices) 
    216                 text += "<hr>" + stringData % (100*insideData[i]) 
    217                 self.addTip(xData[i], yData[i], text = text.decode("unicode_escape")) 
    218                 j+=1 
    219  
    220         # ############################################################## 
    221         # no subset data and discrete color index 
    222         elif (colorIndex == -1 or self.dataDomain[colorIndex].varType == orange.VarTypes.Discrete) and shapeIndex == -1 and sizeIndex == -1 and self.haveData and not self.haveSubsetData and not labelAttr: 
    223             if colorIndex != -1: 
    224                 classCount = len(self.dataDomain[colorIndex].values) 
    225             else: classCount = 1 
    226  
    227             pos = [[ [] , [] ] for i in range(classCount)] 
    228             indices = [colorIndex, xAttrIndex, yAttrIndex] 
    229             if -1 in indices: indices.remove(-1) 
    230             validData = self.getValidList(indices) 
    231             colorData = self.originalData[colorIndex] 
    232             for i in range(len(self.rawData)): 
    233                 if not validData[i]: continue 
    234                 if colorIndex != -1: index = int(colorData[i]) 
    235                 else:                index = 0 
    236                 pos[index][0].append(xData[i]) 
    237                 pos[index][1].append(yData[i]) 
    238                 self.tips.addToolTip(xData[i], yData[i], i)    # we add a tooltip for this point 
    239  
    240             for i in range(classCount): 
    241                 newColor = colorIndex != -1 and QColor(self.discPalette[i]) or QColor(Qt.black) 
    242                 newColor.setAlpha(self.alphaValue) 
    243                 key = self.addCurve("", newColor, newColor, self.pointWidth, symbol = self.curveSymbols[0], xData = pos[i][0], yData = pos[i][1]) 
    244  
    245  
    246         # ############################################################## 
    247         # slower, unoptimized drawing because we use different symbols and/or different sizes of symbols 
    248         else: 
    249             attrs = [xAttrIndex, yAttrIndex, colorIndex, shapeIndex, sizeIndex] 
    250             while -1 in attrs: attrs.remove(-1) 
    251             validData = self.getValidList(attrs) 
    252             if self.haveSubsetData: 
    253                 subsetIdsToDraw = dict([(example.id, 1) for example in self.rawSubsetData]) 
    254                 showFilled = 0 
    255             else: 
    256                 subsetIdsToDraw ={} 
    257                 showFilled = self.showFilledSymbols 
    258  
    259             xPointsToAdd = {} 
    260             yPointsToAdd = {} 
    261             for i in range(len(self.rawData)): 
    262                 if not validData[i]: continue 
    263                 if subsetIdsToDraw.has_key(self.rawData[i].id): 
    264                     continue 
    265  
    266                 if colorIndex != -1: 
    267                     if self.dataDomain[colorIndex].varType == orange.VarTypes.Continuous: 
    268                         newColor = self.contPalette.getRGB(self.noJitteringScaledData[colorIndex][i]) 
    269                     else: 
    270                         newColor = self.discPalette.getRGB(self.originalData[colorIndex][i]) 
    271                 else: newColor = (0,0,0) 
    272  
    273                 Symbol = self.curveSymbols[0] 
    274                 if shapeIndex != -1: Symbol = self.curveSymbols[int(self.originalData[shapeIndex][i])] 
    275  
    276                 size = self.pointWidth 
    277                 if sizeIndex != -1: size = MIN_SHAPE_SIZE + round(self.noJitteringScaledData[sizeIndex][i] * self.pointWidth) 
    278  
    279                 if not xPointsToAdd.has_key((newColor, size, Symbol, showFilled)): 
    280                     xPointsToAdd[(newColor, size, Symbol, showFilled)] = [] 
    281                     yPointsToAdd[(newColor, size, Symbol, showFilled)] = [] 
    282                 xPointsToAdd[(newColor, size, Symbol, showFilled)].append(xData[i]) 
    283                 yPointsToAdd[(newColor, size, Symbol, showFilled)].append(yData[i]) 
    284                 self.tips.addToolTip(xData[i], yData[i], i)     # we add a tooltip for this point 
    285  
    286                 # Show a label by each marker 
    287                 if labelAttr: 
    288                     if labelAttr in [self.rawData.domain.getmeta(mykey).name for mykey in self.rawData.domain.getmetas().keys()] + [var.name for var in self.rawData.domain]: 
    289                         if self.rawData[i][labelAttr].isSpecial(): continue 
    290                         if self.rawData[i][labelAttr].varType==orange.VarTypes.Continuous: 
    291                             lbl = "%4.1f" % orange.Value(self.rawData[i][labelAttr]) 
    292                         else: 
    293                             lbl = str(self.rawData[i][labelAttr].value) 
    294                         self.addMarker(lbl, xData[i], yData[i], Qt.AlignCenter | Qt.AlignBottom) 
    295  
    296             # if we have a data subset that contains examples that don't exist in the original dataset we show them here 
    297             if self.haveSubsetData: 
    298                 validSubData = self.getValidSubsetList(attrs) 
    299                 xData, yData = self.getXYSubsetDataPositions(xAttr, yAttr) 
    300                 for i in range(len(self.rawSubsetData)): 
    301                     if not validSubData[i]: continue 
    302  
    303                     if colorIndex != -1 and self.validSubsetDataArray[colorIndex][i]: 
    304                         if self.rawData.domain[colorIndex].varType == orange.VarTypes.Continuous: 
    305                             newColor = self.contPalette.getRGB(self.scaledSubsetData[colorIndex][i]) 
    306                         else: 
    307                             newColor = self.discPalette.getRGB(self.originalSubsetData[colorIndex][i]) 
    308                     else: newColor = (0,0,0) 
    309  
    310                     if shapeIndex != -1: Symbol = self.curveSymbols[int(self.originalSubsetData[shapeIndex][i])] 
    311                     else:                Symbol = self.curveSymbols[0] 
    312  
    313                     size = self.pointWidth 
    314                     if sizeIndex != -1: size = MIN_SHAPE_SIZE + round(self.noJitteringScaledSubsetData[sizeIndex][i] * self.pointWidth) 
    315  
    316                     if not xPointsToAdd.has_key((newColor, size, Symbol, 1)): 
    317                         xPointsToAdd[(newColor, size, Symbol, 1)] = [] 
    318                         yPointsToAdd[(newColor, size, Symbol, 1)] = [] 
    319                     xPointsToAdd[(newColor, size, Symbol, 1)].append(xData[i]) 
    320                     yPointsToAdd[(newColor, size, Symbol, 1)].append(yData[i]) 
    321                     self.tips.addToolTip(xData[i], yData[i], -i-1)     # we add a tooltip for this point 
    322  
    323                     # Show a label by each marker 
    324                     if labelAttr: 
    325                         if labelAttr in [self.rawSubsetData.domain.getmeta(mykey).name for mykey in self.rawSubsetData.domain.getmetas().keys()] + [var.name for var in self.rawSubsetData.domain]: 
    326                             if self.rawSubsetData[i][labelAttr].isSpecial(): continue 
    327                             if self.rawSubsetData[i][labelAttr].varType==orange.VarTypes.Continuous: 
    328                                 lbl = "%4.1f" % orange.Value(self.rawSubsetData[i][labelAttr]) 
    329                             else: 
    330                                 lbl = str(self.rawSubsetData[i][labelAttr].value) 
    331                             self.addMarker(lbl, xData[i], yData[i], Qt.AlignCenter | Qt.AlignBottom) 
    332  
    333             for i, (color, size, symbol, showFilled) in enumerate(xPointsToAdd.keys()): 
    334                 xData = xPointsToAdd[(color, size, symbol, showFilled)] 
    335                 yData = yPointsToAdd[(color, size, symbol, showFilled)] 
    336                 c = QColor(*color) 
    337                 c.setAlpha(self.alphaValue) 
    338                 self.addCurve("", c, c, size, symbol = symbol, xData = xData, yData = yData, showFilledSymbols = showFilled) 
    339  
    340         # ############################################################## 
    341         # show legend if necessary 
    342         if self.showLegend == 1: 
    343             legendKeys = {} 
    344             discColorIndex = colorIndex if colorIndex != -1 and self.dataDomain[colorIndex].varType == orange.VarTypes.Discrete else -1 
    345             discShapeIndex = shapeIndex if shapeIndex != -1 and self.dataDomain[shapeIndex].varType == orange.VarTypes.Discrete else -1 
    346             discSizeIndex = sizeIndex if sizeIndex != -1 and self.dataDomain[sizeIndex].varType == orange.VarTypes.Discrete else -1 
    347                          
    348             if discColorIndex != -1: 
    349                 num = len(self.dataDomain[discColorIndex].values) 
    350                 varValues = getVariableValuesSorted(self.dataDomain[discColorIndex]) 
    351                 for ind in range(num): 
    352                     self.legend().add_item(self.dataDomain[discColorIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, self.discPalette[ind], self.pointWidth)) 
    353  
    354             if discShapeIndex != -1: 
    355                 num = len(self.dataDomain[discShapeIndex].values) 
    356                 varValues = getVariableValuesSorted(self.dataDomain[discShapeIndex]) 
    357                 for ind in range(num): 
    358                     self.legend().add_item(self.dataDomain[discShapeIndex].name, varValues[ind], OWPoint(self.curveSymbols[ind], Qt.black, self.pointWidth)) 
    359  
    360             if sizeIndex != -1: 
    361                 num = len(self.dataDomain[discSizeIndex].values) 
    362                 varValues = getVariableValuesSorted(self.dataDomain[discSizeIndex]) 
    363                 for ind in range(num): 
    364                     self.legend().add_item(self.dataDomain[discSizeIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, Qt.black, MIN_SHAPE_SIZE + round(ind*self.pointWidth/len(varValues)))) 
     200        else: 
     201            marked_data = [] 
     202        self.set_main_curve_data(xData, yData, colorData, labelData, sizeData, shapeData, marked_data=marked_data) 
     203        qDebug(repr(sub_x_data[:20])) 
     204        self.mark_points(zip(sub_x_data, sub_y_data), self.ReplaceSelection) 
     205         
     206        ''' 
     207            Create legend items in any case 
     208            so that show/hide legend only 
     209        ''' 
     210        discColorIndex = colorIndex if colorIndex != -1 and self.dataDomain[colorIndex].varType == orange.VarTypes.Discrete else -1 
     211        discShapeIndex = shapeIndex if shapeIndex != -1 and self.dataDomain[shapeIndex].varType == orange.VarTypes.Discrete else -1 
     212        discSizeIndex = sizeIndex if sizeIndex != -1 and self.dataDomain[sizeIndex].varType == orange.VarTypes.Discrete else -1 
     213                     
     214        if discColorIndex != -1: 
     215            num = len(self.dataDomain[discColorIndex].values) 
     216            varValues = getVariableValuesSorted(self.dataDomain[discColorIndex]) 
     217            for ind in range(num): 
     218                self.legend().add_item(self.dataDomain[discColorIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, self.discPalette[ind], self.pointWidth)) 
     219 
     220        if discShapeIndex != -1: 
     221            num = len(self.dataDomain[discShapeIndex].values) 
     222            varValues = getVariableValuesSorted(self.dataDomain[discShapeIndex]) 
     223            for ind in range(num): 
     224                self.legend().add_item(self.dataDomain[discShapeIndex].name, varValues[ind], OWPoint(self.curveSymbols[ind], Qt.black, self.pointWidth)) 
     225 
     226        if discSizeIndex != -1: 
     227            num = len(self.dataDomain[discSizeIndex].values) 
     228            varValues = getVariableValuesSorted(self.dataDomain[discSizeIndex]) 
     229            for ind in range(num): 
     230                self.legend().add_item(self.dataDomain[discSizeIndex].name, varValues[ind], OWPoint(OWPoint.Ellipse, Qt.black, MIN_SHAPE_SIZE + round(ind*self.pointWidth/len(varValues)))) 
    365231 
    366232        # ############################################################## 
  • orange/OrangeWidgets/Visualize/OWScatterPlotGraph.py

    r8042 r8668  
    289289                    yPointsToAdd[(newColor, size, Symbol, 1)].append(yData[i]) 
    290290                    self.tips.addToolTip(xData[i], yData[i], -i-1)     # we add a tooltip for this point 
    291  
     291     
    292292                    # Show a label by each marker 
    293293                    if labelAttr: 
  • orange/OrangeWidgets/plot/owplot.py

    r8667 r8668  
    664664        return self.add_custom_curve(c, enableLegend) 
    665665                 
    666     def set_main_curve_data(self, x_data, y_data, color_data, label_data, size_data, shape_data, x_axis_key=xBottom, y_axis_key=yLeft): 
     666    def set_main_curve_data(self, x_data, y_data, color_data, label_data, size_data, shape_data, marked_data = [], x_axis_key=xBottom, y_axis_key=yLeft): 
    667667        """ 
    668668            Creates a single curve that can have points of different colors, shapes and sizes.  
     
    707707        c.set_point_sizes(size_data) 
    708708        c.set_point_symbols(shape_data) 
     709        if marked_data: 
     710            c.set_points_marked(marked_data) 
     711            self.marked_points_changed.emit() 
    709712        c.name = 'Main Curve' 
    710          
    711     def mark_points_at(self, x_data, y_data): 
    712         for data_point in zip(x_data, y_data): 
    713             point = self.point_at(data_point) 
    714             if point: 
    715                 point.set_marked(true) 
    716713         
    717714    def remove_curve(self, item): 
     
    777774            if i is not self.grid_curve: 
    778775                self.remove_item(i) 
     776        self.main_curve = None 
    779777        self._bounds_cache = {} 
    780778        self._transform_cache = {} 
  • source/orangeplot/curve.cpp

    r8667 r8668  
    381381        p->remove_all_points(this); 
    382382        p->add_points(m_pointItems, this); 
    383         qDebug() << "Registered" << m_pointItems.size() << "points"; 
    384383    } 
    385384} 
  • source/orangeplot/multicurve.cpp

    r8667 r8668  
    148148    update_items(points(), PointAlphaUpdater(alpha), UpdateBrush); 
    149149} 
     150 
     151void MultiCurve::set_points_marked(const QList< bool >& marked) 
     152{ 
     153    updateNumberOfItems(); 
     154    QList<Point*> p = points(); 
     155    const int n = p.size(); 
     156    if (marked.size() == n) 
     157    { 
     158        for (int i = 0; i < n; ++i) 
     159        { 
     160            p[i]->set_marked(marked[i]); 
     161        } 
     162    } 
     163    else  
     164    { 
     165        bool m = marked.isEmpty() ? false : marked.first(); 
     166        foreach (Point* point, p) 
     167        { 
     168            point->set_marked(m); 
     169        } 
     170    } 
     171} 
     172 
  • source/orangeplot/multicurve.h

    r8660 r8668  
    4747    void set_point_sizes(const QList<int>& colors); 
    4848     
     49    void set_points_marked(const QList<bool>& marked); 
     50     
    4951    void shuffle_points(); 
    5052    void set_alpha_value(int alpha); 
  • source/orangeplot/multicurve.sip

    r8640 r8668  
    1414    void set_point_sizes(const QList<int>& colors); 
    1515 
     16    void set_points_marked(const QList<bool>& marked); 
     17 
    1618    void shuffle_points(); 
    1719    void set_alpha_value(int alpha); 
  • source/orangeplot/plot.cpp

    r8667 r8668  
    261261} 
    262262 
    263 QList< int > Plot::selected_points(const QList< double > x_data, const QList< double > y_data) 
     263QList< bool > Plot::selected_points(const QList< double > x_data, const QList< double > y_data) 
    264264{ 
    265265    Q_ASSERT(x_data.size() == y_data.size()); 
    266266    const int n = qMin(x_data.size(), y_data.size()); 
    267     QList<int> selected; 
     267    QList<bool> selected; 
    268268    selected.reserve(n); 
    269269    DataPoint p; 
     
    272272        p.x = x_data[i]; 
    273273        p.y = y_data[i]; 
    274         selected << (selected_point_at(p) ? 1 : 0); 
     274        selected << (selected_point_at(p) ? true : false); 
    275275    } 
    276276    return selected; 
     
    456456void Plot::mark_points(const Data& data, Plot::SelectionBehavior behavior) 
    457457{ 
     458    qDebug() << "Trying to mark" << data.size() << "points"; 
    458459    foreach (const PointHash& hash, m_point_hash) 
    459460    { 
     
    462463            if (data.contains(point->coordinates())) 
    463464            { 
    464                 point->set_marked(behavior == AddSelection || (behavior == ToggleSelection && !point->is_marked())); 
     465                qDebug() << "Found a point, marking it"; 
     466                point->set_marked(behavior == AddSelection || behavior == ReplaceSelection || (behavior == ToggleSelection && !point->is_marked())); 
    465467            } 
    466468            else if (behavior == ReplaceSelection) 
  • source/orangeplot/plot.h

    r8667 r8668  
    7777     * created the points 
    7878     **/ 
    79     QList< int > selected_points(const QList< double > x_data, const QList< double > y_data); 
     79    QList< bool > selected_points(const QList< double > x_data, const QList< double > y_data); 
    8080    QList< Point*> selected_points(); 
    8181    QList< Point*> marked_points(); 
  • source/orangeplot/plot.sip

    r8658 r8668  
    6161    void select_points(const QRectF& rect, SelectionBehavior behavior = AddSelection); 
    6262    void select_points(const QPolygonF& area, SelectionBehavior behavior = AddSelection); 
     63    void select_points(const Data& data, SelectionBehavior behavior = AddSelection); 
    6364    void unselect_all_points(); 
    6465     
    6566    void mark_points(const QRectF& rect, SelectionBehavior behavior = AddSelection); 
    6667    void mark_points(const QPolygonF& area, SelectionBehavior behavior = AddSelection); 
     68    void mark_points(const Data& data, SelectionBehavior behavior = AddSelection); 
    6769    void unmark_all_points(); 
    6870     
     
    7072    void marked_to_selected(); 
    7173     
    72     QList< int > selected_points(const QList< double > x_data, const QList< double > y_data); 
     74    QList< bool > selected_points(const QList< double > x_data, const QList< double > y_data); 
    7375    QList< Point* > selected_points(); 
    7476    QList< Point*> marked_points(); 
  • source/orangeplot/types.sip

    r8647 r8668  
    351351%End 
    352352}; 
     353 
     354 
     355%MappedType QList<bool> /DocType="list-of-int"/ 
     356{ 
     357%TypeHeaderCode 
     358#include <qlist.h> 
     359%End 
     360 
     361%ConvertFromTypeCode 
     362    // Create the list. 
     363    PyObject *l; 
     364 
     365    if ((l = PyList_New(sipCpp->size())) == NULL) 
     366        return NULL; 
     367 
     368    // Set the list elements. 
     369    for (int i = 0; i < sipCpp->size(); ++i) 
     370    { 
     371        PyObject *pobj = sipCpp->value(i) ? Py_True : Py_False; 
     372 
     373        if (pobj == NULL) 
     374        { 
     375            Py_DECREF(l); 
     376 
     377            return NULL; 
     378        } 
     379 
     380        PyList_SET_ITEM(l, i, pobj); 
     381    } 
     382 
     383    return l; 
     384%End 
     385 
     386%ConvertToTypeCode 
     387    // Check the type if that is all that is required. 
     388    if (sipIsErr == NULL) 
     389        return (PySequence_Check(sipPy) && PySequence_Size(sipPy) >= 0); 
     390 
     391    QList<bool> *ql = new QList<bool>; 
     392    SIP_SSIZE_T len = PySequence_Size(sipPy); 
     393  
     394    for (SIP_SSIZE_T i = 0; i < len; ++i) 
     395    { 
     396        PyObject *itm = PySequence_ITEM(sipPy, i); 
     397 
     398        if (!itm) 
     399        { 
     400            delete ql; 
     401            *sipIsErr = 1; 
     402 
     403            return 0; 
     404        } 
     405 
     406        ql->append(itm == Py_True ? true : false); 
     407 
     408        Py_DECREF(itm); 
     409    } 
     410  
     411    *sipCppPtr = ql; 
     412  
     413    return sipGetState(sipTransferObj); 
     414%End 
     415}; 
Note: See TracChangeset for help on using the changeset viewer.