Changeset 8413:b001bf4a8fd0 in orange


Ignore:
Timestamp:
07/22/11 11:27:12 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
7ed09326fd6fb08ee31021a06f74a228214eb023
Message:

Implement a legend that can be dragged around the plot

Location:
orange/OrangeWidgets/plot
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/plot/owlegend.py

    r8374 r8413  
    11 
    22 
    3 from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsTextItem, QGraphicsRectItem, QColor 
     3from PyQt4.QtGui import QGraphicsItem, QGraphicsTextItem, QGraphicsRectItem, QColor 
    44from PyQt4.QtCore import QPointF, QRectF, Qt 
    55 
     
    1111PointSymbol = 4 
    1212 
    13 class OWLegend(QGraphicsItemGroup): 
     13class OWLegend(QGraphicsItem): 
    1414    def __init__(self, scene): 
    1515        QGraphicsItemGroup.__init__(self, None, scene) 
     
    2424                               PointSymbol : OWCurve.Ellipse 
    2525                               } 
     26        self.box_rect = QRectF() 
     27        self.setFiltersChildEvents(True) 
    2628         
    2729    def clear(self): 
     
    5759        length = 0 
    5860        if self.point_attrs: 
    59             ## Using the OWGraph API to specify paremeters 
     61            ## Using the owplot API to specify paremeters 
     62            ## NOTE: The API is neither finished nor used 
    6063            for p_a, d_a in self.point_attrs.iteritems(): 
    6164                ## We construct a separate box for each attribute  
     
    8386                y = y + 20 
    8487            if self.curves: 
    85                 box_rect = QRectF(0, 0, 20 + length, y-10) 
    86                 box_item = QGraphicsRectItem(box_rect, self) 
     88                self.box_rect = QRectF(0, 0, 20 + length, y-10) 
     89                box_item = QGraphicsRectItem(self.box_rect, self) 
     90                box_item.setBrush(Qt.white) 
     91                box_item.setZValue(-1) 
    8792                self.items.append(box_item) 
     93            else: 
     94                box_rect = QRectF() 
     95                 
     96    def mouseMoveEvent(self, event): 
     97        self.setPos(self.pos() + event.scenePos() - event.lastScenePos()) 
     98        event.accept() 
     99             
     100    def mousePressEvent(self, event): 
     101        event.accept() 
     102 
     103    def boundingRect(self): 
     104        return self.box_rect 
     105         
     106    def paint(self, painter, option, widget=None): 
     107        pass 
     108     
  • orange/OrangeWidgets/plot/owplot.py

    r8410 r8413  
    105105         
    106106        self._legend = OWLegend(self.scene()) 
     107        self._legend.setZValue(1.0) 
    107108        self.axes = dict() 
    108109        self.axis_margin = 80 
     
    146147        ## Performance optimization 
    147148        self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) 
    148         self.setInteractive(False) 
     149     #   self.setInteractive(False) 
    149150         
    150151        self._bounds_cache = {} 
     
    551552        return self._legend 
    552553         
     554    def isLegendEvent(self, event, function): 
     555        rect = self._legend.boundingRect() 
     556        rect = self._legend.mapRectToScene(rect) 
     557       # rect.translate(self._legend.pos()) 
     558        if rect.contains(self.mapToScene(event.pos())): 
     559            function(self, event) 
     560            return True 
     561        else: 
     562            return False 
     563         
    553564    ## Event handling 
    554565    def resizeEvent(self, event): 
     
    559570            event.accept() 
    560571            return 
     572             
     573        if self.isLegendEvent(event, QGraphicsView.mousePressEvent): 
     574            return 
     575         
     576        point = self.mapToScene(event.pos()) 
     577 
    561578        self.static_click = True 
    562579        self._pressed_mouse_button = event.button() 
    563         point = self.mapToScene(event.pos()) 
    564580        if event.button() == Qt.LeftButton and self.state == SELECT_RECTANGLE and self.graph_area.contains(point): 
    565581            self._selection_start_point = self.mapToScene(event.pos()) 
     
    572588        if event.buttons(): 
    573589            self.static_click = False 
     590         
     591        if self.isLegendEvent(event, QGraphicsView.mouseMoveEvent): 
     592            return 
     593         
    574594        point = self.mapToScene(event.pos()) 
     595                 
    575596        if self._pressed_mouse_button == Qt.LeftButton: 
    576597            if self.state == SELECT_RECTANGLE and self._current_rs_item and self.graph_area.contains(point): 
     
    605626            return 
    606627        self._pressed_mouse_button = Qt.NoButton 
     628         
     629        if self.isLegendEvent(event, QGraphicsView.mouseReleaseEvent): 
     630            return 
     631         
    607632        if event.button() == Qt.LeftButton and self.state == SELECT_RECTANGLE and self._current_rs_item: 
    608633            self.add_selection_item(self._current_rs_item, self._current_rs_item.rect()) 
     
    610635     
    611636    def mouseStaticClick(self, event): 
     637             
    612638        point = self.mapToScene(event.pos()) 
    613639        if self.state == ZOOMING: 
  • orange/OrangeWidgets/plot/owtools.py

    r8410 r8413  
    142142    def updateProperties(self): 
    143143        self._item.setPos(self.graphTransform().map(self._data_point)) 
    144  
    145 class MovableItem(orangeplot.PlotItem): 
    146     def __init__(self): 
    147         orangeplot.PlotItem.__init__(self) 
    148          
    149     def mouseMoveEvent(self, event): 
    150         if event.buttons(): 
    151             self.setPos(self.pos() + event.scenePos() - event.lastScenePos()) 
    152      
Note: See TracChangeset for help on using the changeset viewer.