Changeset 8353:fc93d8b40e15 in orange


Ignore:
Timestamp:
07/05/11 09:59:32 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
281504cfcedc28b1626132efd45b1121f4a6ab7b
Message:

A rather large restructuring, remove multiple inheritance.

Multiple inheritance with SIP produces no error, but it works wrong. So I removed it and instead provided all the needed functionality in one base C++ class called PlotItem. The classes in Python were also adapted to this change.

Files:
17 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Graph/curve.py

    r8342 r8353  
    2525""" 
    2626 
    27 class Curve(orangegraph.Curve, PlotItem): 
    28     def __init__(self, xData=[], yData=[], x_axis_key=xBottom, y_axis_key=yLeft, parent=None, scene=None): 
     27class Curve(orangegraph.Curve): 
     28    def __init__(self, xData=[], yData=[], x_axis_key=xBottom, y_axis_key=yLeft, tooltip=None, parent=None, scene=None): 
    2929        orangegraph.Curve.__init__(self, xData, yData, parent, scene) 
    30         PlotItem.__init__(self, xData, yData, x_axis_key, y_axis_key, parent=parent, scene=scene) 
    31         self.set_graph_transform = self.setGraphTransform 
    3230        self.setAutoScale(False) 
     31        if tooltip: 
     32            self.setToolTip(tooltip) 
    3333        self._cached_rect = None 
    3434 
  • orange/OrangeWidgets/Graph/item.py

    r8342 r8353  
    44 
    55class PlotItem(orangegraph.PlotItem): 
    6     def __init__(self, xData=[], yData=[], x_axis_key=xBottom, y_axis_key=yLeft, tooltip=None, parent=None, scene=None): 
    7         orangegraph.PlotItem.__init__(self, xData, yData) 
     6    def __init__(self, x_axis_key=xBottom, y_axis_key=yLeft, tooltip=None, parent=None, scene=None): 
     7        orangegraph.PlotItem.__init__(self, parent, scene) 
    88        self.setAxes(x_axis_key, y_axis_key) 
    99        self.tooltip = tooltip 
  • orange/OrangeWidgets/Graph/tools.py

    r8342 r8353  
    22from PyQt4.QtCore import Qt, QRectF, QPointF, qDebug 
    33 
    4 from item import * 
     4from curve import * 
     5 
     6""" 
     7    Efficiently resizes a list of QGraphicsItems (PlotItems, Curves, etc.) 
     8    If the list is to be reduced, i.e. if len(lst) > size, then the extra items are first removed from the scene 
     9""" 
     10 
     11def resize_plot_item_list(lst, size, item_type, scene): 
     12    n = len(lst) 
     13    if n > size: 
     14        if scene: 
     15            for i in lst[n:]: 
     16                scene.removeItem(i) 
     17        return lst[:n] 
     18    elif n < size: 
     19        return lst + [item_type() for i in range(size - n)] 
     20    else: 
     21        return lst 
    522 
    623#A dynamic tool tip class 
     
    4057 
    4158# Convenience curve classes 
    42 class PolygonCurve(orangegraph.Curve, PlotItem): 
     59class PolygonCurve(Curve): 
    4360    def __init__(self, pen = QPen(Qt.black), brush = QBrush(Qt.white), xData = [], yData = [], tooltip = None): 
    44         orangegraph.Curve.__init__(self, xData, yData) 
    45         PlotItem.__init__(self, xData, yData, tooltip=tooltip) 
     61        Curve.__init__(self, xData, yData, tooltip=tooltip) 
    4662        self._data_polygon = self.polygon_from_data(xData, yData) 
    4763        self._polygon_item = QGraphicsPolygonItem(self) 
     
    6783             
    6884 
    69 class RectangleCurve(QGraphicsRectItem, PlotItem): 
     85class RectangleCurve(Curve): 
    7086    def __init__(self, pen = QPen(Qt.black), brush = QBrush(Qt.white), xData = None, yData = None, tooltip = None): 
    71         QGraphicsRectItem.__init__(self) 
    72         PlotItem.__init__(self, xData, yData, tooltip) 
     87        Curve.__init__(self, xData, yData, tooltip=tooltip) 
    7388        self.setPen(pen) 
    7489        self.setBrush(brush) 
     90        self._item = QGraphicsRectItem() 
     91         
     92    def updateProperties(self): 
     93        d = self.data() 
     94        if len(d) < 4: 
     95            self._item.setRect(QRectF()) 
     96        else: 
     97            self._item.setRect(self.graphTransform().mapRect(self.boundingRectFromData(d))) 
    7598 
    76     def set_graph_transform(self, transform): 
    77         self.setRect(transform.mapRect(self.data_rect())) 
    78          
    79 class UnconnectedLinesCurve(orangegraph.UnconnectedLinesCurve, PlotItem): 
     99class UnconnectedLinesCurve(orangegraph.UnconnectedLinesCurve): 
    80100    def __init__(self, name, pen = QPen(Qt.black), xData = None, yData = None): 
    81101        orangegraph.UnconnectedLinesCurve.__init__(self, xData, yData) 
    82         PlotItem.__init__(self, xData, yData) 
    83102        if pen: 
    84103            self.setPen(pen) 
    85         self.set_graph_transform = self.setGraphTransform 
    86104        self.setAutoScale(False) 
    87105        self.name = name 
  • orange/OrangeWidgets/OWGraphQt.py

    r8348 r8353  
    297297         
    298298    def add_custom_curve(self, curve, enableLegend = False): 
    299         qDebug('Adding item ' + repr(curve)) 
    300299        self.addItem(curve) 
    301300        if enableLegend: 
     
    305304                del self._bounds_cache[key] 
    306305        self._transform_cache = {} 
    307         if curve.tooltip: 
     306        if hasattr(curve, 'tooltip'): 
    308307            curve.setToolTip(curve.tooltip) 
    309308        return curve 
     
    316315        c = curve.Curve(xData, yData, parent=self.graph_item) 
    317316        c.setAxes(x_axis_key, y_axis_key) 
     317        c.setToolTip(name) 
    318318        c.name = name 
    319319        c.setAutoUpdate(False) 
     
    323323        c.setPointSize(size) 
    324324        c.setData(xData,  yData) 
    325         c.set_graph_transform(self.transform_for_axes(x_axis_key, y_axis_key) * self.zoom_transform) 
     325        c.setGraphTransform(self.transform_for_axes(x_axis_key, y_axis_key) * self.zoom_transform) 
    326326         
    327327        c.setAutoScale(autoScale) 
     
    380380         
    381381    def clear(self): 
    382         self.removeAllItems() 
     382        for i in self.itemList(): 
     383            self.removeItem(i) 
    383384        self._bounds_cache = {} 
    384385        self._transform_cache = {} 
     
    454455                 
    455456    def update_zoom(self): 
    456         self.setViewportUpdateMode(QGraphicsView.NoViewportUpdate) 
     457      #  self.setViewportUpdateMode(QGraphicsView.NoViewportUpdate) 
    457458        self.zoom_transform = self.transform_for_zoom(self._zoom_factor, self._zoom_point, self.graph_area) 
    458459        self.zoom_rect = self.zoom_transform.mapRect(self.graph_area) 
     
    460461        for c in self.itemList(): 
    461462            x,y = c.axes() 
    462             if hasattr(c, 'set_graph_transform'): 
    463                 c.set_graph_transform(self.transform_for_axes(x,y) * self.zoom_transform) 
     463            if hasattr(c, 'setGraphTransform'): 
     464                c.setGraphTransform(self.transform_for_axes(x,y) * self.zoom_transform) 
    464465                c.updateProperties() 
    465466            else: 
    466467                ## This shouldn't happen, but it's possible to add such items to the graph 
    467468                ## The check could be removed if all visualizations are well-behaved 
    468                 qDebug(' !!     Warning: an item without set_graph_transform            !!') 
     469                qDebug(' !!     Warning: an item without setGraphTransform            !!') 
    469470                qDebug(' !! Make sure all your curves inherit from Graph.item.PlotItem  !!') 
    470471         
     
    525526    def replot(self, force = False): 
    526527        if not self.block_update or force: 
     528            if self.isDirty(): 
     529                qDebug('Graph is dirty, clearing caches') 
     530                self._bounds_cache = {} 
     531                self._transform_cache = {} 
     532                self.setClean() 
    527533            self.update_layout() 
    528534            self.update_zoom() 
  • orange/OrangeWidgets/Prototypes/OWDistributionsQt.py

    r8342 r8353  
    1919import statc 
    2020 
    21 from orangegraph import Curve as CppCurve 
    22 from Graph.item import * 
    23  
    24 class distribErrorBarCurve(CppCurve, PlotItem): 
     21from Graph.curve import * 
     22from Graph.tools import * 
     23 
     24class distribErrorBarCurve(Curve): 
    2525    def __init__(self, text = None): 
    26         self.items = [] 
    27         CppCurve.__init__(self,[], []) 
    28         PlotItem.__init__(self) 
    29          
    30     def set_graph_transform(self, transform): 
    31         CppCurve.setGraphTransform(self, transform) 
     26        self._items = [] 
     27        Curve.__init__(self,xData=[], yData=[]) 
    3228         
    3329    def updateProperties(self): 
    34         if self.style() != CppCurve.UserCurve: 
    35             for i in self.items: 
    36                 self.scene().removeItem(i) 
     30        if self.style() != Curve.UserCurve: 
     31            resize_plot_item_list(self._items, 0, None, self.scene()) 
    3732            self.items = [] 
    38             CppCurve.updateProperties(self) 
     33            Curve.updateProperties(self) 
    3934            return 
    4035             
     
    4237        d = self.data() 
    4338        n = len(d)/3 
    44         m = len(self.items) 
    45         if m < n: 
    46             self.items.extend([QGraphicsPathItem(self) for i in range(n-m)]) 
    47         elif m > n: 
    48             for i in range(n,m): 
    49                 self.scene().removeItem(self.items[i]) 
    50             self.items = self.items[:n] 
     39        self._items = resize_plot_item_list(self._items, n, QGraphicsPathItem, self.scene()) 
    5140        for i in range(n): 
    5241            p = QPainterPath() 
     
    6049            p.moveTo(pxl, py3) 
    6150            p.lineTo(pxr, py3) 
    62             self.items[i].setPath(t.map(p)) 
    63             self.items[i].setPen(self.pen()) 
     51            self._items[i].setPath(t.map(p)) 
     52            self._items[i].setPen(self.pen()) 
    6453 
    6554class OWDistributionGraphQt(OWGraph): 
     
    384373 
    385374            if self.variableContinuous: 
    386                 self.probCurveKey.setStyle(CppCurve.Lines) 
     375                self.probCurveKey.setStyle(Curve.Lines) 
    387376                if self.showConfidenceIntervals: 
    388377                    self.probCurveUpperCIKey.setData(xs, ups) 
     
    390379            else: 
    391380                if self.showConfidenceIntervals: 
    392                     self.probCurveKey.setStyle(CppCurve.UserCurve) 
     381                    self.probCurveKey.setStyle(Curve.UserCurve) 
    393382                else: 
    394                     self.probCurveKey.setStyle(CppCurve.Dots) 
     383                    self.probCurveKey.setStyle(Curve.Dots) 
    395384        else: 
    396385            self.enableYRaxis(0) 
  • source/orangegraph/curve.cpp

    r8342 r8353  
    77#include <QtCore/qmath.h> 
    88 
    9 Curve::Curve(QList< double > xData, QList< double > yData, QGraphicsItem* parent, QGraphicsScene* scene): PlotItem(xData, yData, parent, scene) 
     9Curve::Curve(const QList< double >& xData, const QList< double >& yData, QGraphicsItem* parent, QGraphicsScene* scene): PlotItem(parent, scene) 
    1010{ 
    1111    m_continuous = false; 
     
    4141void Curve::updateProperties() 
    4242{ 
    43    
    4443  if (m_continuous) 
    4544  { 
     
    7675    } 
    7776  } 
    78   if (m_needsUpdate & UpdateColor) 
    79   { 
    80     QBrush brush(m_color); 
     77  if (m_needsUpdate & UpdateBrush) 
     78  { 
    8179    for (int i = 0; i < n; ++i) 
    8280    { 
    83       m_pointItems[i]->setBrush(brush); 
     81      m_pointItems[i]->setBrush(m_brush); 
    8482    } 
    8583  } 
     
    9694  if (m_continuous) 
    9795  { 
    98     QPen pen; 
    99     pen.setColor(m_color); 
    100     pen.setWidth(m_pointSize); 
    101     m_lineItem->setPen(pen); 
     96    m_lineItem->setPen(m_pen); 
    10297    m_line = QPainterPath(); 
    10398    m_line.moveTo(QPointF(m_data[0].x, m_data[0].y) * m_graphTransform); 
     
    159154  switch (symbol) 
    160155  { 
     156    case NoSymbol: 
     157      break; 
     158       
    161159    case Ellipse: 
    162160      path.addEllipse(-d,-d,2*d,2*d); 
     
    247245    m_data.append(p); 
    248246  } 
     247  setDataRect(boundingRectFromData(xData, yData)); 
    249248  m_needsUpdate |= UpdatePosition; 
    250249  updateBounds(); 
     
    291290void Curve::setColor(const QColor& color) 
    292291{ 
    293   if (color == m_color) 
    294   { 
    295     return; 
    296   } 
    297   m_color = color; 
    298   m_needsUpdate |= UpdateColor; 
    299   checkForUpdate(); 
     292    m_color = color; 
     293    setPen(color); 
     294    setBrush(color); 
     295} 
     296 
     297QPen Curve::pen() const 
     298{ 
     299    return m_pen; 
     300} 
     301 
     302void Curve::setPen(QPen pen) 
     303{ 
     304    m_pen = pen; 
     305    m_needsUpdate |= UpdatePen; 
     306    checkForUpdate(); 
     307} 
     308 
     309QBrush Curve::brush() const 
     310{ 
     311    return m_brush; 
     312} 
     313 
     314void Curve::setBrush(QBrush brush) 
     315{ 
     316    m_brush = brush; 
     317    m_needsUpdate |= UpdateBrush; 
     318    checkForUpdate(); 
    300319} 
    301320 
  • source/orangegraph/curve.h

    r8342 r8353  
    33 
    44#include "plotitem.h" 
     5 
     6#include <QtGui/QPen> 
     7#include <QtGui/QBrush> 
    58 
    69struct DataPoint 
     
    4750    Steps, 
    4851    Dots = Qt::DotLine, 
    49     UserCurve 
     52    UserCurve = 100 
    5053  }; 
    5154   
     
    6063   * @param scene if this is not 0, the Curve is automatically added to it 
    6164   **/ 
    62   Curve(QList< double > xData, QList< double > yData, QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
     65  Curve(const QList< double >& xData, const QList< double >& yData, QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
    6366 
    6467  /** 
     
    103106  void setColor(const QColor& color); 
    104107   
     108  QPen pen() const; 
     109  void setPen(QPen pen); 
     110   
     111  QBrush brush() const; 
     112  void setBrush(QBrush brush); 
     113   
    105114  int pointSize() const; 
    106115  void setPointSize(int size); 
     
    115124  void setData(const QList<qreal> xData, const QList<qreal> yData); 
    116125   
    117   QTransform graphTransform() const; 
    118   void setGraphTransform(const QTransform& transform); 
     126  virtual QTransform graphTransform() const; 
     127  virtual void setGraphTransform(const QTransform& transform); 
    119128   
    120129  QRectF graphArea() const; 
     
    150159    UpdateSymbol = 0x04, 
    151160    UpdateSize = 0x08, 
    152     UpdateColor = 0x10, 
    153     UpdateContinuous = 0x20, 
     161    UpdatePen = 0x10, 
     162    UpdateBrush = 0x20, 
     163    UpdateContinuous = 0x40, 
    154164    UpdateAll = 0xFF 
    155165  }; 
     
    189199    Bounds m_xBounds; 
    190200    Bounds m_yBounds; 
     201  QPen m_pen; 
     202  QBrush m_brush; 
    191203}; 
    192204 
  • source/orangegraph/curve.sip

    r8346 r8353  
    1 struct DataPoint { 
    2  
     1// DataPoint is implemented as a Python 2-element tuple. 
     2%MappedType DataPoint /DocType="tuple-of-float-float"/ 
     3{ 
    34%TypeHeaderCode 
    45#include "curve.h" 
    56%End 
    67 
    7     qreal x; 
    8     qreal y; 
     8%ConvertFromTypeCode 
     9    // Create the tuple. 
     10    return Py_BuildValue((char *)"dd", sipCpp->x, sipCpp->y); 
     11%End 
     12 
     13%ConvertToTypeCode 
     14    // Check the type if that is all that is required. 
     15    if (sipIsErr == NULL) 
     16        return (PyTuple_Size(sipPy) == 2); 
     17     
     18    DataPoint* qp = new DataPoint(); 
     19 
     20    PyArg_ParseTuple(sipPy, "dd", &qp->x, &qp->y); 
     21    *sipCppPtr = qp; 
     22     
     23    return sipGetState(sipTransferObj); 
     24%End 
    925}; 
    1026 
     
    4965  }; 
    5066 
    51   Curve(QList< double > xData, QList< double > yData, QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
     67  Curve(const QList< double >& xData, const QList< double >& yData, QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
    5268  virtual ~Curve(); 
    5369 
     
    6278  QColor color() const; 
    6379  void setColor(const QColor& color); 
     80   
     81  QPen pen() const; 
     82  void setPen(QPen pen); 
     83   
     84  QBrush brush() const; 
     85  void setBrush(QBrush brush); 
    6486   
    6587  int pointSize() const; 
  • source/orangegraph/graph.cpp

    r8347 r8353  
    1919void Graph::addItem(PlotItem* item) 
    2020{ 
    21     qDebug() << "Adding item" << item << "in C++"; 
    2221    if (m_items.contains(item)) 
    2322    { 
     
    3736        scene()->removeItem(item); 
    3837        m_items.removeAll(item); 
     38        item->m_graph = 0; 
    3939    } 
    4040    else 
     
    4444} 
    4545 
    46 void Graph::removeAllItems() 
    47 { 
    48     foreach (PlotItem* item, m_items) 
    49     { 
    50         removeItem(item); 
    51     } 
    52     qDebug() << "Removed all items"; 
    53 } 
    54  
    5546QList< PlotItem* > Graph::itemList() 
    5647{ 
     48    qDebug() << "Returning itemlist with" << m_items.size() << "items"; 
    5749    return m_items; 
    5850} 
     
    7466QPair< double, double > Graph::boundsForAxis(int axis) 
    7567{ 
    76      
     68    QRectF y_r; 
     69    QRectF x_r; 
     70    foreach (PlotItem* item, m_items) 
     71    { 
     72        if (item->isAutoScale()) 
     73        { 
     74            if (item->axes().first == axis) 
     75            { 
     76               x_r |= item->dataRect();  
     77            } 
     78            else if (item->axes().second == axis) 
     79            { 
     80                y_r |= item->dataRect(); 
     81            } 
     82        } 
     83    } 
     84    if (x_r.isValid()) 
     85    { 
     86        return qMakePair(x_r.left(), x_r.right()); 
     87    } 
     88    else if (y_r.isValid()) 
     89    { 
     90        return qMakePair(y_r.top(), y_r.bottom()); 
     91    } 
     92    return qMakePair(0.0, 0.0); 
     93} 
     94 
     95void Graph::setDirty()  
     96{ 
     97    m_dirty = true; 
     98} 
     99 
     100void Graph::setClean()  
     101{ 
     102    m_dirty = false; 
     103} 
     104 
     105bool Graph::isDirty()  
     106{ 
     107    return m_dirty; 
    77108} 
    78109 
  • source/orangegraph/graph.h

    r8335 r8353  
    1515    void addItem(PlotItem* item); 
    1616    void removeItem(PlotItem* item); 
    17     void removeAllItems(); 
    1817     
    1918    QRectF dataRectForAxes(int xAxis, int yAxis); 
     
    2423    QGraphicsRectItem* graph_item; 
    2524     
     25    void setDirty(); 
     26     
     27protected: 
     28    void setClean();; 
     29    bool isDirty(); 
     30     
    2631private: 
    2732    QList<PlotItem*> m_items; 
     33    bool m_dirty; 
    2834}; 
    2935 
  • source/orangegraph/graph.sip

    r8347 r8353  
    3636     
    3737    void addItem(PlotItem* item /Transfer/); 
    38     void removeItem(PlotItem* item); 
    39     void removeAllItems(); 
     38    void removeItem(PlotItem* item /TransferBack/); 
    4039     
    4140    QRectF dataRectForAxes(int xAxis, int yAxis); 
     
    4342     
    4443    QList<PlotItem*> itemList(); 
     44    void setDirty(); 
    4545     
    4646    QGraphicsRectItem* graph_item; 
     47     
     48protected: 
     49    void setClean(); 
     50    bool isDirty(); 
    4751}; 
  • source/orangegraph/plotitem.cpp

    r8335 r8353  
    22#include "graph.h" 
    33 
    4 PlotItem::PlotItem(QList< double > xData, QList< double > yData, QGraphicsItem* parent, QGraphicsScene* scene): QGraphicsItem(parent, scene), 
    5 m_dataRect(boundingRectFromData(xData, yData)) 
     4PlotItem::PlotItem(QGraphicsItem* parent, QGraphicsScene* scene): QGraphicsItem(parent, scene),  
     5m_graph(0) 
    66{ 
     7     
     8} 
    79 
     10PlotItem::PlotItem(const PlotItem& ): QGraphicsItem(),  
     11m_graph(0) 
     12{ 
     13    // Disabled copy constructor 
    814} 
    915 
     
    5965} 
    6066 
    61 QRectF PlotItem::boundingRectFromData(QList< double > xData, QList< double > yData) 
     67void PlotItem::setGraphTransform(const QTransform& transform) 
     68{ 
     69    m_graphTransform = transform; 
     70} 
     71 
     72QTransform PlotItem::graphTransform() const 
     73{ 
     74    return m_graphTransform; 
     75} 
     76 
     77QRectF PlotItem::boundingRectFromData(const QList< double >& xData, const QList< double >& yData) 
    6278{ 
    6379    int n = qMin(xData.size(), yData.size()); 
     
    7793} 
    7894 
     95void PlotItem::setDataRect(const QRectF& dataRect) { 
     96    m_dataRect = dataRect; 
     97    if (m_graph) 
     98    { 
     99        m_graph->setDirty(); 
     100    } 
     101} 
    79102 
    80103 
     
    84107 
    85108 
     109 
  • source/orangegraph/plotitem.h

    r8347 r8353  
    1010 
    1111public: 
    12     PlotItem(QList<double> xData, QList<double> yData, QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
     12    PlotItem(QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
    1313    virtual ~PlotItem(); 
    1414     
     
    1717     
    1818    virtual QRectF dataRect() const; 
     19    void setDataRect(const QRectF& dataRect); 
     20     
     21    virtual void setGraphTransform(const QTransform& transform); 
     22    virtual QTransform graphTransform() const; 
    1923     
    2024    void attach(Graph* graph); 
    2125    void detach(); 
    2226     
    23     static QRectF boundingRectFromData(QList<double> xData, QList<double> yData); 
     27    static QRectF boundingRectFromData(const QList<double>& xData, const QList<double>& yData); 
    2428     
    2529    bool isAutoScale() const; 
     
    2832    QPair<int, int> axes() const; 
    2933    void setAxes(int x_axis, int y_axis); 
     34     
     35    inline void setXAxis(int x_axis) 
     36    { 
     37        setAxes(x_axis, axes().second); 
     38    } 
     39    inline void setYAxis(int y_axis) 
     40    { 
     41        setAxes(axes().first, y_axis); 
     42    } 
    3043     
    3144private: 
     
    3649    QPair<int, int> m_axes; 
    3750    bool m_autoScale; 
     51    QTransform m_graphTransform; 
    3852     
    3953    friend class Graph; 
  • source/orangegraph/plotitem.sip

    r8347 r8353  
    66 
    77public: 
    8     PlotItem(QList<double> xData, QList<double> yData, QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
     8    PlotItem(QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
    99    virtual ~PlotItem(); 
    1010     
     
    1313     
    1414    virtual QRectF dataRect() const; 
     15    void setDataRect(const QRectF& dataRect); 
     16     
     17    virtual void setGraphTransform(const QTransform& transform); 
     18    virtual QTransform graphTransform() const; 
    1519     
    1620    void attach(Graph* graph /TransferThis/); 
    1721    void detach(); 
    1822     
    19     static QRectF boundingRectFromData(QList<double> xData, QList<double> yData); 
     23    static QRectF boundingRectFromData(const QList<double>& xData, const QList<double>& yData); 
    2024     
    2125    bool isAutoScale() const; 
     
    2327     
    2428    QPair<int, int> axes() const; 
    25     void setAxes(int x_axis, int y_axis);   
    26  
    27 private: 
    28     PlotItem(const PlotItem &); 
     29    void setAxes(int x_axis, int y_axis); 
     30     
     31    void setXAxis(int x_axis); 
     32    void setYAxis(int y_axis); 
    2933}; 
  • source/orangegraph/unconnectedlinescurve.cpp

    r8339 r8353  
    33#include <QtCore/QDebug> 
    44 
    5 UnconnectedLinesCurve::UnconnectedLinesCurve(QList< double > xData, QList< double > yData, QGraphicsItem* parent, QGraphicsScene* scene): Curve(xData, yData, parent, scene) 
     5UnconnectedLinesCurve::UnconnectedLinesCurve(const QList< double >& xData, const QList< double >& yData, QGraphicsItem* parent, QGraphicsScene* scene): Curve(xData, yData, parent, scene) 
    66{ 
    77 
     
    1515void UnconnectedLinesCurve::updateProperties() 
    1616{ 
    17     Data d = data(); 
    18     int n = d.size()/2; 
    19     int m = m_items.size(); 
     17    const Data d = data(); 
     18    const int n = d.size()/2; 
     19    const int m = m_items.size(); 
    2020    if (m > n) 
    2121    { 
     
    3232        } 
    3333    } 
    34     Q_ASSERT(m_items.size() == data().size()/2); 
     34    Q_ASSERT(m_items.size() == n); 
     35    QLineF line; 
    3536    for (int i = 0; i < n; ++i) 
    3637    { 
    37         QLineF line; 
    38         line.setP1(QPointF(d[2*i].x, d[2*i].y)); 
    39         line.setP2(QPointF(d[2*i+1].x, d[2*i+1].y)); 
     38        line.setLine( d[2*i].x, d[2*i].y, d[2*i+1].x, d[2*i+1].y ); 
    4039        m_items[i]->setLine(graphTransform().map(line)); 
    41         m_items[i]->setPen(m_pen); 
     40        m_items[i]->setPen(pen()); 
    4241    } 
    4342} 
    44  
    45 void UnconnectedLinesCurve::setPen(QPen pen) 
    46 { 
    47     m_pen = pen; 
    48     updateProperties(); 
    49 } 
    50  
    51 QPen UnconnectedLinesCurve::pen() const 
    52 { 
    53     return m_pen; 
    54 } 
  • source/orangegraph/unconnectedlinescurve.h

    r8337 r8353  
    99 
    1010public: 
    11     UnconnectedLinesCurve(QList< double > xData, QList< double > yData, QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
     11    UnconnectedLinesCurve(const QList< double >& xData, const QList< double >& yData, QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
    1212    virtual ~UnconnectedLinesCurve(); 
    1313     
    1414    virtual void updateProperties(); 
    1515     
    16     void setPen(QPen pen); 
    17     QPen pen() const; 
    18      
    1916private: 
    2017    QList<QGraphicsLineItem*> m_items; 
    21     QPen m_pen; 
    2218}; 
    2319 
  • source/orangegraph/unconnectedlinescurve.sip

    r8346 r8353  
    66 
    77public: 
    8     UnconnectedLinesCurve(QList< double > xData, QList< double > yData, QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
     8    UnconnectedLinesCurve(const QList< double >& xData, const QList< double >& yData, QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
    99    virtual ~UnconnectedLinesCurve(); 
    1010     
    1111    virtual void updateProperties(); 
    12      
    13     void setPen(QPen pen); 
    14     QPen pen() const; 
    1512}; 
Note: See TracChangeset for help on using the changeset viewer.