Beispiel #1
0
    def setUp(self):
        self.mock_graph = Mock()
        self.sr = Mock()
        mock_size = Mock()
        mock_size.return_value.width.return_value = 1000
        mock_size.return_value.height.return_value = 1000

        self.mvb = MapViewBox(self.mock_graph)
        self.mvb.set_tile_provider(TILE_PROVIDERS[DEFAULT_TILE_PROVIDER])
        self.mvb.setRange = self.sr
        self.mvb.size = mock_size
    def __init__(self, widget, parent=None):
        QObject.__init__(self)
        gui.OWComponent.__init__(self, widget)

        self.view_box = MapViewBox(self)
        self.plot_widget = pg.PlotWidget(viewBox=self.view_box,
                                         parent=parent,
                                         background="w")
        self.plot_widget.hideAxis("left")
        self.plot_widget.hideAxis("bottom")
        self.plot_widget.getPlotItem().buttonsHidden = True
        self.plot_widget.setAntialiasing(True)
        self.plot_widget.sizeHint = lambda: QSize(500, 500)

        self.master = widget  # type: OWChoropleth
        self._create_drag_tooltip(self.plot_widget.scene())

        self.choropleth_items = []  # type: List[ChoroplethItem]

        self.n_ids = 0
        self.selection = None  # np.ndarray

        self.palette = None
        self.color_legend = self._create_legend(((1, 1), (1, 1)))
        self.update_legend_visibility()

        self._tooltip_delegate = HelpEventDelegate(self.help_event)
        self.plot_widget.scene().installEventFilter(self._tooltip_delegate)
Beispiel #3
0
class TestMapViewBox(WidgetTest):
    def setUp(self):
        self.mock_graph = Mock()
        self.sr = Mock()
        mock_size = Mock()
        mock_size.return_value.width.return_value = 1000
        mock_size.return_value.height.return_value = 1000

        self.mvb = MapViewBox(self.mock_graph)
        self.mvb.set_tile_provider(TILE_PROVIDERS[DEFAULT_TILE_PROVIDER])
        self.mvb.setRange = self.sr
        self.mvb.size = mock_size

    def test_match_zoom(self):
        point1 = pg.Point(0.5, 0.5)
        self.mvb.match_zoom(point1)
        qrect1 = self.sr.call_args[0][0]

        point2 = pg.Point(0.75, 0.75)
        self.mvb.match_zoom(point2, offset=True)
        qrect2 = self.sr.call_args[0][0]
        # when center is offset the new rect should also be offset
        self.assertTrue(qrect1.x() < qrect2.x())
        self.assertAlmostEqual(qrect1.width(), qrect2.width())

    def test_wheel_event(self):
        mock_event = Mock()
        mock_event.delta.return_value = 1
        mock_event.pos.return_value = pg.Point(0.5, 0.5)

        self.assertEqual(self.mvb.get_zoom(), 2)
        self.mvb.wheelEvent(mock_event)
        self.mvb.wheelEvent(mock_event)
        self.assertEqual(self.mvb.get_zoom(), 3)
        qrect1 = self.sr.call_args[0][0]
        mock_event.accept.assert_called()
        self.mvb.wheelEvent(mock_event)
        self.mvb.wheelEvent(mock_event)
        self.assertEqual(self.mvb.get_zoom(), 4)
        qrect2 = self.sr.call_args[0][0]
        # after zooming in the shown rectangle should be smaller
        self.assertTrue(qrect1.width() > qrect2.width())

        mock_event.delta.return_value = -1
        self.mvb.wheelEvent(mock_event)
        self.mvb.wheelEvent(mock_event)
        self.assertEqual(self.mvb.get_zoom(), 3)
        qrect3 = self.sr.call_args[0][0]
        # after zooming out the shown rectangle should be larger
        self.assertTrue(qrect3.width() > qrect2.width())

        self.mvb.wheelEvent(mock_event)
        self.mvb.wheelEvent(mock_event)
        self.mvb.wheelEvent(mock_event)
        self.mvb.wheelEvent(mock_event)
        self.assertEqual(self.mvb.get_zoom(), 2)

    def test_mouse_drag_event(self):
        self.mock_graph.state = ZOOMING
        mock_event = Mock()
        mock_event.button.return_value = Qt.LeftButton
        mock_event.pos.return_value = pg.Point(0.6, 0.6)
        mock_event.isFinish.return_value = True
        mock_event.buttonDownPos.return_value = pg.Point(0.4, 0.4)
        self.mvb.mapToView = lambda x: x
        self.mvb.state['mouseMode'] = pg.ViewBox.RectMode

        self.mvb.match_zoom(pg.Point(0.5, 0.5))
        qrect1 = self.sr.call_args[0][0]
        zoom1 = self.mvb.get_zoom()
        self.mvb.mouseDragEvent(mock_event)
        mock_event.accept.assert_called()
        zoom2 = self.mvb.get_zoom()
        qrect2 = self.sr.call_args[0][0]
        # when selecting a smaller region zoom level should increase and
        # shown area should decrees
        self.assertTrue(zoom2 > zoom1)
        self.assertTrue(qrect2.width() < qrect1.width())

        mock_event.button.return_value = Qt.RightButton
        self.mvb.mouseDragEvent(mock_event)
        mock_event.ignore.assert_called()

    def test_recalculate_zoom(self):
        self.mvb.recalculate_zoom(0.5, 0.5)
        zoom1 = self.mvb.get_zoom()
        self.mvb.recalculate_zoom(0.1, 0.1)
        zoom2 = self.mvb.get_zoom()
        # zoom level should be larger for smaller portions
        self.assertTrue(zoom1 < zoom2)