Changeset 8385:080ce17abe37 in orange


Ignore:
Timestamp:
07/08/11 12:28:04 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
cac5093bed1f3807a24846a91855117675784db1
Message:

Add a simple widget to test the new NetworkCurve

Files:
1 added
5 edited

Legend:

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

    r8384 r8385  
    1818class NodeItem(orangeplot.NodeItem): 
    1919    def __init__(self, index=-1): 
     20        orangeplot.NodeItem.__init__(self) 
    2021        self.index = index 
    2122        self.marked = False 
     
    2324        self.highlight = False 
    2425        self.selected = False 
    25         self.label = [] 
    26         self.tooltip = [] 
    27         self.uuid = None 
     26        self.label = '' 
     27        self.tooltip = '' 
     28        self.uuid = 0 
    2829         
    2930        self.image = None 
     
    3738class EdgeItem(orangeplot.EdgeItem): 
    3839    def __init__(self, u=None, v=None, weight=0, arrowu=0, arrowv=0,  
    39                  links_index=None, label=[]): 
     40                 links_index=None, label=''): 
     41        orangeplot.EdgeItem.__init__(self) 
    4042        self.u = u 
    4143        self.v = v 
    42         self.links_index = links_index 
     44        self.links_index = int(links_index) if links_index is not None else -1 
    4345        self.arrowu = arrowu 
    4446        self.arrowv = arrowv 
     
    5052 
    5153class NetworkCurve(orangeplot.NetworkCurve): 
    52   def __init__(self, parent, pen=QPen(Qt.black), xData=None, yData=None): 
     54  def __init__(self, parent=None, pen=QPen(Qt.black), xData=None, yData=None): 
    5355      orangeplot.NetworkCurve.__init__(self, parent) 
    5456      self.name = "Network Curve" 
    5557      self.showEdgeLabels = 0 
     58       
     59      self.nodes = {} 
     60      self.edges = [] 
     61       
     62  def get_nodes(self): 
     63      return self.nodes 
     64         
     65  def get_edges(self): 
     66      return self.edges 
    5667 
    5768  def move_selected_nodes(self, dx, dy): 
     
    218229      return [key for key in self.coors if x1 < self.coors[key][0] < x2 and y1 < self.coors[key][1] < y2] 
    219230         
    220 class OWNxCanvas(OWGraph): 
     231class OWNxCanvas(OWPlot): 
    221232    def __init__(self, master, parent=None, name="None"): 
    222         OWGraph.__init__(self, parent, name) 
     233        OWPlot.__init__(self, parent, name) 
    223234        self.master = master 
    224235        self.parent = parent 
     
    238249        self.edgesKey = -1 
    239250        #self.vertexSize = 6 
    240         self.enableXaxis(0) 
    241         self.enableYLaxis(0) 
    242251        self.state = NOTHING  #default je rocno premikanje 
    243252        self.hiddenNodes = [] 
     
    276285        self.fontSize = 12 
    277286              
    278         self.setAxisAutoScale(self.xBottom) 
    279         self.setAxisAutoScale(self.yLeft) 
    280          
    281         self.networkCurve = NetworkCurve(self) 
     287        self.networkCurve = NetworkCurve() 
     288        self.add_custom_curve(self.networkCurve) 
    282289        self.callbackMoveVertex = None 
    283290        self.callbackSelectVertex = None 
     
    451458                self.callbackMoveVertex() 
    452459        else: 
    453             OWGraph.mouseMoveEvent(self, event) 
     460            OWPlot.mouseMoveEvent(self, event) 
    454461                 
    455462        if not self.freezeNeighbours and self.tooltipNeighbours: 
     
    528535              self.mouseCurrentlyPressed = 1 
    529536          else: 
    530               OWGraph.mousePressEvent(self, event)   
     537              OWPlot.mousePressEvent(self, event)   
    531538      else: 
    532           OWGraph.mousePressEvent(self, event)      
     539          OWPlot.mousePressEvent(self, event)      
    533540     
    534541    def mouseReleaseEvent(self, event):   
     
    569576             
    570577                self.markSelectionNeighbours() 
    571                 OWGraph.mouseReleaseEvent(self, event) 
     578                OWPlot.mouseReleaseEvent(self, event) 
    572579                self.removeAllSelections() 
    573580     
    574581        elif self.state == SELECT_POLYGON: 
    575                 OWGraph.mouseReleaseEvent(self, event) 
     582                OWPlot.mouseReleaseEvent(self, event) 
    576583                if self.tempSelectionCurve == None:   #if OWVisGraph closed polygon 
    577584                    self.selectVertices() 
    578585        else: 
    579             OWGraph.mouseReleaseEvent(self, event) 
     586            OWPlot.mouseReleaseEvent(self, event) 
    580587             
    581588        self.mouseCurrentlyPressed = 0 
     
    605612            self.graph.freezeNeighbours = not self.graph.freezeNeighbours 
    606613         
    607         OWGraph.keyPressEvent(self, e) 
     614        OWPlot.keyPressEvent(self, e) 
    608615             
    609616    def keyReleaseEvent(self, e): 
     
    614621            self.altPressed = False 
    615622         
    616         OWGraph.keyReleaseEvent(self, e) 
     623        OWPlot.keyReleaseEvent(self, e) 
    617624         
    618625    def clickedSelectedOnVertex(self, pos): 
     
    11391146            self.items = None 
    11401147            self.links = None 
    1141             xMin = self.axisScaleDiv(QwtPlot.xBottom).interval().minValue() 
    1142             xMax = self.axisScaleDiv(QwtPlot.xBottom).interval().maxValue() 
    1143             yMin = self.axisScaleDiv(QwtPlot.yLeft).interval().minValue() 
    1144             yMax = self.axisScaleDiv(QwtPlot.yLeft).interval().maxValue() 
     1148            xMin = -1.0 
     1149            xMax = 1.0 
     1150            yMin = -1.0 
     1151            yMax = 1.0 
    11451152            self.addMarker("no network", (xMax - xMin) / 2, (yMax - yMin) / 2, alignment=Qt.AlignCenter, size=self.fontSize) 
    11461153            self.tooltipNeighbours = 0 
     
    12891296       
    12901297    def updateCanvas(self): 
    1291         self.setAxisAutoScale(self.xBottom) 
    1292         self.setAxisAutoScale(self.yLeft) 
    12931298        self.updateData() 
    12941299        self.replot()   
    12951300     
    12961301    def zoomExtent(self): 
    1297         self.setAxisAutoScale(self.xBottom) 
    1298         self.setAxisAutoScale(self.yLeft) 
    12991302        self.replot() 
    13001303         
  • orange/OrangeWidgets/plot/owplot.py

    r8376 r8385  
    800800        self.set_axis_enabled(yRight, enable) 
    801801         
     802    def enableXaxis(self, enable=1): 
     803        self.set_axis_enabled(xBottom, enable) 
     804         
    802805    def set_axis_enabled(self, axis, enable): 
    803806        if axis not in self.axes: 
  • source/orangeplot/networkcurve.cpp

    r8381 r8385  
    33#include <QtCore/QMap> 
    44#include <QtCore/QList> 
    5  
    6 NetworkCurve::NetworkCurve(const Coordinates& coordinates, const Edges& edges, QGraphicsItem* parent, QGraphicsScene* scene):  
    7 Curve(parent, scene), 
    8     coors(coordinates), 
    9 edges(edges) 
    10 { 
    11  
    12 } 
    135 
    146NetworkCurve::NetworkCurve(QGraphicsItem* parent, QGraphicsScene* scene): Curve(parent, scene) 
     
    2820    int m, n; 
    2921     
    30     if (m_vertex_items.keys() != coors.keys()) 
     22    const Nodes nodes = get_nodes(); 
     23     
     24    if (m_vertex_items.keys() != nodes.keys()) 
    3125    { 
    3226        qDeleteAll(m_vertex_items); 
    3327        m_vertex_items.clear(); 
    34         Coordinates::ConstIterator cit = coors.constBegin(); 
    35         Coordinates::ConstIterator cend = coors.constEnd(); 
    36         for (; cit != cend; ++cit) 
     28        Nodes::ConstIterator it = nodes.constBegin(); 
     29        Nodes::ConstIterator end = nodes.constEnd(); 
     30        for (; it != end; ++it) 
    3731        { 
    38             m_vertex_items.insert(cit.key(), new QGraphicsPathItem(this)); 
     32            m_vertex_items.insert(it.key(), new QGraphicsPathItem(this)); 
    3933        } 
    4034    } 
    4135     
    42     QPair<double, double> p; 
     36    NodeItem node; 
    4337    QGraphicsPathItem* item; 
    44     Coordinates::ConstIterator cit = coors.constBegin(); 
    45     Coordinates::ConstIterator cend = coors.constEnd(); 
    46     for (; cit != cend; ++cit) 
     38    Nodes::ConstIterator nit = nodes.constBegin(); 
     39    Nodes::ConstIterator nend = nodes.constEnd(); 
     40    for (; nit != nend; ++nit) 
    4741    { 
    48         p = cit.value(); 
    49         item = m_vertex_items[cit.key()]; 
    50         item->setPos( t.map(QPointF(p.first, p.second)) ); 
     42        node = nit.value(); 
     43        item = m_vertex_items[nit.key()]; 
     44        item->setPos( t.map(QPointF(node.x, node.y)) ); 
    5145        item->setBrush(brush()); 
    52         NodeItem v = vertices[cit.key()]; 
    53         item->setPen(v.pen); 
    54         item->setToolTip(v.tooltip); 
    55         item->setPath(pathForSymbol(symbol(), v.size)); 
     46        item->setPen(node.pen); 
     47        item->setToolTip(node.tooltip); 
     48        item->setPath(pathForSymbol(node.style, node.size)); 
    5649    } 
    5750     
    58     Q_ASSERT(m_vertex_items.size() == coors.size()); 
     51    Q_ASSERT(m_vertex_items.size() == nodes.size()); 
     52     
     53    const Edges edges = get_edges(); 
    5954     
    6055    n = edges.size(); 
     
    7368    Q_ASSERT(m_edge_items.size() == edges.size()); 
    7469     
    75     QPair<int, int> points; 
    76     EdgeItem edge; 
    7770    QLineF line; 
    7871    QGraphicsLineItem* line_item; 
     
    8073    for (int i = 0; i < n; ++i) 
    8174    { 
    82         edge = edges[i]; 
    83         p = coors[edge.u->index]; 
    84         line.setP1(QPointF( p.first, p.second )); 
    85         p = coors[edge.v->index]; 
    86         line.setP2(QPointF( p.first, p.second )); 
     75        EdgeItem edge = edges[i]; 
     76        node = nodes[edge.u->index]; 
     77        line.setP1(QPointF(node.x, node.y)); 
     78        node = nodes[edge.v->index]; 
     79        line.setP2(QPointF(node.x, node.y)); 
    8780        line_item = m_edge_items[i]; 
    8881        line_item->setLine( t.map(line) ); 
     
    9083    } 
    9184} 
     85 
     86QRectF NetworkCurve::dataRect() const 
     87{ 
     88    QRectF r; 
     89    bool first = true; 
     90    foreach (const NodeItem& node, get_nodes()) 
     91    { 
     92        if (first) 
     93        { 
     94            r = QRectF(node.x, node.y, 0, 0); 
     95            first = false; 
     96        } 
     97        else 
     98        { 
     99            r.setTop( qMin(r.top(), node.y) ); 
     100            r.setBottom( qMax(r.bottom(), node.y) ); 
     101            r.setLeft( qMin(r.left(), node.x) ); 
     102            r.setRight( qMax(r.right(), node.y) ); 
     103        } 
     104    } 
     105    qDebug() << "NetworkCurve::dataRect()" << r; 
     106    return r; 
     107} 
     108 
  • source/orangeplot/networkcurve.h

    r8381 r8385  
    66struct NodeItem 
    77{ 
     8    double x; 
     9    double y; 
     10     
    811    int index; 
    912    bool marked; 
     
    3437}; 
    3538 
    36 typedef QPair<double, double> Coord; 
    37  
    3839class NetworkCurve : public Curve 
    3940{ 
    4041public: 
    41     typedef QMap<int, Coord> Coordinates; 
    4242    typedef QList<EdgeItem> Edges; 
    43     typedef QMap<int, NodeItem> Vertices; 
     43    typedef QMap<int, NodeItem> Nodes; 
    4444 
    45     NetworkCurve(const Coordinates& coordinates, const Edges& edges, QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
    4645    NetworkCurve(QGraphicsItem* parent = 0, QGraphicsScene* scene = 0); 
    4746    virtual ~NetworkCurve(); 
     
    4948    virtual void updateProperties(); 
    5049     
    51     Coordinates coors; 
    52     Vertices vertices; 
    53     Edges edges; 
     50    virtual Nodes get_nodes() const = 0; 
     51    virtual Edges get_edges() const = 0; 
     52     
     53    virtual QRectF dataRect() const; 
    5454     
    5555private: 
  • source/orangeplot/networkcurve.sip

    r8383 r8385  
    33%End 
    44 
    5 %MappedType Coord /DocType="tuple-of-float-float"/ 
    6 { 
    7 %TypeHeaderCode 
    8 #include "networkcurve.h" 
    9 %End 
    10  
    11 %ConvertFromTypeCode 
    12     // Create the tuple. 
    13     return Py_BuildValue((char *)"dd", sipCpp->first, sipCpp->second); 
    14 %End 
    15  
    16 %ConvertToTypeCode 
    17     // Check the type if that is all that is required. 
    18     if (sipIsErr == NULL) 
    19         return (PyTuple_Size(sipPy) == 2); 
    20      
    21     Coord* qp = new Coord; 
    22  
    23     PyArg_ParseTuple(sipPy, "dd", &qp->first, &qp->second); 
    24     *sipCppPtr = qp; 
    25      
    26     return sipGetState(sipTransferObj); 
    27 %End 
    28 }; 
    29  
    30  
    315struct NodeItem 
    326{ 
     7    double x; 
     8    double y; 
     9 
    3310    int index; 
    3411    bool marked; 
     
    6744 
    6845public: 
    69     typedef QMap<int, Coord> Coordinates; 
     46    typedef QMap<int, NodeItem> Nodes; 
    7047    typedef QList<EdgeItem> Edges; 
    7148     
    72     NetworkCurve(const NetworkCurve::Coordinates& coordinates, const NetworkCurve::Edges& edges, QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
    7349    NetworkCurve(QGraphicsItem* parent /TransferThis/ = 0, QGraphicsScene* scene /TransferThis/ = 0); 
    7450    virtual ~NetworkCurve(); 
     
    7652    virtual void updateProperties(); 
    7753     
    78     NetworkCurve::Edges edges; 
    79     NetworkCurve::Coordinates coors; 
    80     NetworkCurve::Vertices vertices; 
     54    virtual NetworkCurve::Edges get_edges() const = 0; 
     55    virtual NetworkCurve::Nodes get_nodes() const = 0; 
     56 
     57    virtual QRectF dataRect() const; 
    8158}; 
Note: See TracChangeset for help on using the changeset viewer.