Changeset 8300:6f47a3ec96bb in orange


Ignore:
Timestamp:
06/04/11 21:35:52 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
6cbd913b34c58c396b14e12cdb0385ba11be29f0
Message:

Work on mouse events and zooming

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

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

    r8299 r8300  
    6666            self.path_item.show() 
    6767        else: 
     68            a = self.graph.graph_area.translated(-self.graph.graph_area.bottomLeft()) 
    6869            for p in self.data: 
    6970                (x, y) = self.graph.map_to_graph(p) 
    70                 i = self.symbol(x, y) 
    71                 self.point_items.append(i) 
     71                if a.contains(QPointF(x, y)): 
     72                    i = self.symbol(x, y) 
     73                    self.point_items.append(i) 
    7274         
    7375    def symbol(self, x, y, s=None, parent=None): 
  • orange/OrangeWidgets/OWGraphQt.py

    r8299 r8300  
    6868 
    6969from Graph import * 
    70 from PyQt4.QtGui import QGraphicsView,  QGraphicsScene, QPainter 
     70from PyQt4.QtGui import QGraphicsView,  QGraphicsScene, QPainter, QTransform 
     71from PyQt4.QtCore import QPointF 
    7172 
    7273from OWDlgs import OWChooseImageSizeDlg 
     
    7576 
    7677class OWGraph(QGraphicsView): 
    77      
    78      
    7978    def __init__(self, parent=None,  name="None",  show_legend=1 ): 
    8079        QGraphicsView.__init__(self, parent) 
     
    126125        self.mouseMoveEventHandler = None 
    127126        self.mouseReleaseEventHandler = None 
    128         self.mouseStaticClickHandler = None 
    129          
    130  
     127        self.mouseStaticClickHandler = self.mouseStaticClick 
     128         
     129        self.zoom_factor = 1 
     130        self.zoom_point = None 
     131        self.zoom_transform = QTransform() 
     132        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) 
     133        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) 
     134         
    131135        self.update() 
    132136         
     
    152156        min_x, max_x, t = self.axes[axes[0]].scale 
    153157        min_y, max_y, t = self.axes[axes[1]].scale 
    154         rect = self.graph_area 
    155         rx = (px - min_x) * rect.width() / (max_x - min_x) 
    156         ry = -(py - min_y) * rect.height() / (max_y - min_y) 
     158        rect = self.zoom_rect 
     159        rx = rect.left() - self.graph_area.left() + (px - min_x) * rect.width() / (max_x - min_x) 
     160        ry = rect.bottom() - self.graph_area.bottom() -(py - min_y) * rect.height() / (max_y - min_y) 
    157161        return (rx, ry) 
    158162         
     
    355359                axis_rects[xTop].setRight(right) 
    356360                 
    357         self.graph_area = graph_rect 
    358          
     361        self.graph_area = QRectF(graph_rect) 
     362         
     363        self.zoom_transform = self.transform_for_zoom(self.zoom_factor, self.zoom_point, self.graph_area) 
     364        self.zoom_rect = self.zoom_transform.mapRect(self.graph_area) 
     365             
    359366        for id, item in self.axes.iteritems(): 
    360367            self.canvas.removeItem(item) 
     
    392399    def mousePressEvent(self, event): 
    393400        if self.mousePressEventHandler and self.mousePressEventHandler(event): 
     401            event.accept() 
    394402            return 
    395403        self.static_click = True 
     
    397405    def mouseMoveEvent(self, event): 
    398406        if self.mouseMoveEventHandler and self.mouseMoveEventHandler(event): 
     407            event.accept() 
    399408            return 
    400409        if event.buttons(): 
     
    403412    def mouseReleaseEvent(self, event): 
    404413        if self.mouseReleaseEventHandler and self.mouseReleaseEventHandler(event): 
     414            event.accept() 
    405415            return 
    406416        if self.static_click and self.mouseStaticClickHandler and self.mouseStaticClickHandler(event): 
     417            event.accept() 
    407418            return 
    408          
     419     
     420    def mouseStaticClick(self, event): 
     421        if self.state == ZOOMING: 
     422            if event.button() == Qt.LeftButton: 
     423                self.zoom_factor = self.zoom_factor * 2 
     424            elif event.button() == Qt.RightButton: 
     425                self.zoom_factor = max(self.zoom_factor/2, 1) 
     426            self.zoom_point = (QPointF(event.pos())) 
     427            qDebug(str(self.zoom_factor) + ' ' + str(self.zoom_point)) 
     428            self.replot() 
     429            return True 
     430        else: 
     431            return False 
     432             
     433    @staticmethod 
     434    def transform_from_rects(r1, r2): 
     435        tr1 = QTransform().translate(-r1.left(), -r1.top()) 
     436        ts = QTransform().scale(r2.width()/r1.width(), r2.height()/r1.height()) 
     437        tr2 = QTransform().translate(r2.left(), r2.top()) 
     438        return tr2 * ts * tr1 
     439         
     440    def transform_for_zoom(self, factor, point, rect): 
     441        if factor == 1: 
     442            return QTransform() 
     443        rect = rect.normalized() 
     444        s = (1.0-1.0/factor)/2.0 
     445        qDebug('factor=%d, s=%f' % (factor, s)) 
     446        t = QTransform() 
     447        t.translate(point.x(), point.y()) 
     448        t.scale(factor, factor) 
     449        t.translate(-point.x(), -point.y()) 
     450        return t 
Note: See TracChangeset for help on using the changeset viewer.