Changeset 8631:122ee0efa650 in orange


Ignore:
Timestamp:
08/08/11 10:04:29 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
d0d6106e5b77295001869edad33f19849d0e6277
Message:

Change the behavior of mouse events to accept more modifiers

File:
1 edited

Legend:

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

    r8630 r8631  
    881881        else: 
    882882            return False 
    883          
     883     
     884    def mouse_action(self, event): 
     885        b = event.buttons() | event.button() 
     886        m = event.modifiers() 
     887        if b == Qt.LeftButton | Qt.RightButton: 
     888            b = Qt.MidButton 
     889        if m & Qt.AltModifier and b == Qt.LeftButton: 
     890            m = m & ~AltModifier 
     891            b = Qt.MidButton 
     892         
     893        if b == Qt.LeftButton and not m: 
     894            return self.state 
     895             
     896        if b == Qt.MidButton: 
     897            return PANNING 
     898             
     899        if b in [Qt.LeftButton, Qt.RightButton] and (self.state == ZOOMING or m == Qt.ControlModifier): 
     900            return ZOOMING 
     901             
     902        if b == Qt.LeftButton and m == Qt.ShiftModifier: 
     903            return SELECT 
     904     
    884905    ## Event handling 
    885906    def resizeEvent(self, event): 
     
    899920         
    900921        point = self.mapToScene(event.pos()) 
    901  
    902         if event.button() == Qt.LeftButton and self.state == PANNING: 
     922        a = self.mouse_action(event) 
     923 
     924        if a == PANNING: 
    903925            self._last_pan_pos = point 
    904926            event.accept() 
     
    926948            QGraphicsView.mouseMoveEvent(self, event) 
    927949            return 
    928          
    929         if self._pressed_mouse_button == Qt.LeftButton and not self.static_click: 
    930             if self.state in [ZOOMING, SELECT] and self.graph_area.contains(point): 
    931                 if not self._current_rs_item: 
    932                     self._selection_start_point = self.mapToScene(self._pressed_mouse_pos) 
    933                     self._current_rs_item = QGraphicsRectItem(scene=self.scene()) 
    934                     self._current_rs_item.setPen(SelectionPen) 
    935                     self._current_rs_item.setBrush(SelectionBrush) 
    936                     self._current_rs_item.setZValue(SelectionZValue) 
    937                 self._current_rs_item.setRect(QRectF(self._selection_start_point, point).normalized()) 
    938             elif self.state == PANNING: 
    939                 if not self._last_pan_pos: 
    940                     self._last_pan_pos = self.mapToScene(self._pressed_mouse_pos) 
    941                 self.pan(point - self._last_pan_pos) 
    942                 self._last_pan_pos = point 
    943         elif not self._pressed_mouse_button and self.state == SELECT_POLYGON and self._current_ps_item: 
    944             self._current_ps_polygon[-1] = point 
    945             self._current_ps_item.setPolygon(self._current_ps_polygon) 
    946             if self._current_ps_polygon.size() > 2 and self.points_equal(self._current_ps_polygon.first(), self._current_ps_polygon.last()): 
    947                 highlight_pen = QPen() 
    948                 highlight_pen.setWidth(2) 
    949                 highlight_pen.setStyle(Qt.DashDotLine) 
    950                 self._current_ps_item.setPen(highlight_pen) 
    951             else: 
    952                 self._current_ps_item.setPen(SelectionPen) 
     950             
     951        a = self.mouse_action(event) 
     952         
     953        if a in [SELECT, ZOOMING] and self.graph_area.contains(point): 
     954            if not self._current_rs_item: 
     955                self._selection_start_point = self.mapToScene(self._pressed_mouse_pos) 
     956                self._current_rs_item = QGraphicsRectItem(scene=self.scene()) 
     957                self._current_rs_item.setPen(SelectionPen) 
     958                self._current_rs_item.setBrush(SelectionBrush) 
     959                self._current_rs_item.setZValue(SelectionZValue) 
     960            self._current_rs_item.setRect(QRectF(self._selection_start_point, point).normalized()) 
     961        elif a == PANNING: 
     962            if not self._last_pan_pos: 
     963                self._last_pan_pos = self.mapToScene(self._pressed_mouse_pos) 
     964            self.pan(point - self._last_pan_pos) 
     965            self._last_pan_pos = point 
    953966        else: 
    954967            x, y = self.map_from_graph(point, zoom=True) 
     
    975988            return 
    976989         
    977         if event.button() == Qt.LeftButton and self.state in [ZOOMING, SELECT] and self._current_rs_item: 
     990        a = self.mouse_action(event) 
     991        if a in [ZOOMING, SELECT] and self._current_rs_item: 
    978992            rect = self._current_rs_item.rect() 
    979             if self.state == ZOOMING: 
     993            if a == ZOOMING: 
    980994                self.zoom_to_rect(rect) 
    981995            else: 
     
    9901004        if point not in self.graph_area: 
    9911005            return False 
    992         if self.state == ZOOMING: 
     1006             
     1007        a = self.mouse_action(event) 
     1008             
     1009        if a == ZOOMING: 
    9931010            if event.button() == Qt.LeftButton: 
    9941011                self.zoom_in(point) 
     
    9981015                return False 
    9991016            return True 
    1000              
    1001         elif self.state == SELECT_POLYGON and event.button() == Qt.LeftButton: 
    1002             if not self._current_ps_item: 
    1003                 self._current_ps_polygon = QPolygonF() 
    1004                 self._current_ps_polygon.append(point) 
    1005                 self._current_ps_item = QGraphicsPolygonItem(scene=self.scene()) 
    1006                 self._current_ps_item.setPen(SelectionPen) 
    1007                 self._current_ps_item.setBrush(SelectionBrush) 
    1008                 self._current_ps_item.setZValue(SelectionZValue) 
    1009              
    1010             self._current_ps_polygon.append(point) 
    1011             self._current_ps_item.setPolygon(self._current_ps_polygon) 
    1012             if self._current_ps_polygon.size() > 2 and self.points_equal(self._current_ps_polygon.first(), self._current_ps_polygon.last()): 
    1013                 self._current_ps_polygon.append(self._current_ps_polygon.first()) 
    1014                 self.add_selection(self._current_ps_polygon) 
    1015                 self.scene().removeItem(self._current_ps_item) 
    1016                 self._current_ps_item = None 
    1017                  
    1018         elif self.state in [SELECT_RECTANGLE, SELECT_POLYGON] and event.button() == Qt.RightButton: 
    1019             qDebug('Right conditions for removing a selection curve ' + repr(self.selection_items)) 
    1020             self.selection_items.reverse() 
    1021             for item, region in self.selection_items: 
    1022                 qDebug(repr(point) + '   ' + repr(region.rects())) 
    1023                 if region.contains(point.toPoint()): 
    1024                     self.scene().remove_item(item) 
    1025                     qDebug('Removed a selection curve') 
    1026                     self.selection_items.remove((item, region)) 
    1027                     if self.auto_send_selection_callback:  
    1028                         self.auto_send_selection_callback() 
    1029                     break 
    1030             self.selection_items.reverse() 
    1031         elif self.state == SELECT: 
     1017        elif a == SELECT: 
    10321018            point_item = self.nearest_point(point) 
    10331019            b = self.selection_behavior 
Note: See TracChangeset for help on using the changeset viewer.