From a9c07ab6abde71c9e9a5d97bdc88c12697ed4328 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Mon, 4 Apr 2022 00:35:32 -0400 Subject: [PATCH] Make panning pause feeds, call into update method from downsampler cb loop --- piker/ui/_interaction.py | 80 ++++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/piker/ui/_interaction.py b/piker/ui/_interaction.py index faf45c4b..adc551dc 100644 --- a/piker/ui/_interaction.py +++ b/piker/ui/_interaction.py @@ -20,6 +20,7 @@ Chart view box primitives """ from __future__ import annotations from contextlib import asynccontextmanager +# import itertools import time from typing import Optional, Callable @@ -36,7 +37,7 @@ from ..log import get_logger from ._style import _min_points_to_show from ._editors import SelectRect from . import _event -from ._ohlc import BarItems +# from ._ohlc import BarItems log = get_logger(__name__) @@ -319,6 +320,7 @@ async def handle_viewmode_mouse( ): # when in order mode, submit execution # msg.event.accept() + # breakpoint() view.order_mode.submit_order() @@ -384,6 +386,29 @@ class ChartView(ViewBox): self.order_mode: bool = False self.setFocusPolicy(QtCore.Qt.StrongFocus) + self._ic = None + + def start_ic( + self, + ) -> None: + if self._ic is None: + self.chart.pause_all_feeds() + self._ic = trio.Event() + + def signal_ic( + self, + *args, + # ev = None, + ) -> None: + if args: + print(f'range change dun: {args}') + else: + print('proxy called') + + if self._ic: + self._ic.set() + self._ic = None + self.chart.resume_all_feeds() @asynccontextmanager async def open_async_input_handler( @@ -429,11 +454,6 @@ class ChartView(ViewBox): def maxmin(self, callback: Callable) -> None: self._maxmin = callback - def maybe_downsample_graphics(self): - for graphic in self._chart._graphics.values(): - if isinstance(graphic, BarItems): - graphic.maybe_paint_line() - def wheelEvent( self, ev, @@ -542,6 +562,11 @@ class ChartView(ViewBox): self._resetTarget() self.scaleBy(s, focal) self.sigRangeChangedManually.emit(mask) + + # self._ic.set() + # self._ic = None + # self.chart.resume_all_feeds() + ev.accept() def mouseDragEvent( @@ -624,6 +649,11 @@ class ChartView(ViewBox): # XXX: WHY ev.accept() + self.start_ic() + # if self._ic is None: + # self.chart.pause_all_feeds() + # self._ic = trio.Event() + if axis == 1: self.chart._static_yrange = 'axis' @@ -641,6 +671,13 @@ class ChartView(ViewBox): self.sigRangeChangedManually.emit(self.state['mouseEnabled']) + if ev.isFinish(): + print('DRAG FINISH') + self.signal_ic() + # self._ic.set() + # self._ic = None + # self.chart.resume_all_feeds() + # WEIRD "RIGHT-CLICK CENTER ZOOM" MODE elif button & QtCore.Qt.RightButton: @@ -788,11 +825,13 @@ class ChartView(ViewBox): # iterate those. # - only register this when certain downsampleable graphics are # "added to scene". - vb.sigRangeChangedManually.connect(vb.maybe_downsample_graphics) + vb.sigXRangeChanged.connect(vb.maybe_downsample_graphics) # mouse wheel doesn't emit XRangeChanged vb.sigRangeChangedManually.connect(vb._set_yrange) - vb.sigResized.connect(vb._set_yrange) # splitter(s) resizing + + # splitter(s) resizing + vb.sigResized.connect(vb._set_yrange) def disable_auto_yrange( self, @@ -808,10 +847,27 @@ class ChartView(ViewBox): ''' for graphic in self._chart._graphics.values(): - # if isinstance(graphic, BarItems): - xpx = graphic.pixelVectors()[0].x() - if xpx: - return xpx + xvec = graphic.pixelVectors()[0] + if xvec: + xpx = xvec.x() + if xpx: + return xpx else: continue return 1.0 + + def maybe_downsample_graphics(self): + + # TODO: a faster single-loop-iterator way of doing this XD + chart = self._chart + # graphics = list(self._chart._graphics.values()) + + for name, graphics in chart._graphics.items(): + # pass in no array which will read and render from the last + # passed array (normally provided by the display loop.) + chart.update_graphics_from_array(name) + + # for graphic in graphics: + # ds_meth = getattr(graphic, 'maybe_downsample', None) + # if ds_meth: + # ds_meth()