Make panning pause feeds, call into update method from downsampler cb loop
							parent
							
								
									675611dc61
								
							
						
					
					
						commit
						14d5ca1cc6
					
				| 
						 | 
					@ -20,6 +20,7 @@ Chart view box primitives
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
from __future__ import annotations
 | 
					from __future__ import annotations
 | 
				
			||||||
from contextlib import asynccontextmanager
 | 
					from contextlib import asynccontextmanager
 | 
				
			||||||
 | 
					# import itertools
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
from typing import Optional, Callable
 | 
					from typing import Optional, Callable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,7 +37,7 @@ from ..log import get_logger
 | 
				
			||||||
from ._style import _min_points_to_show
 | 
					from ._style import _min_points_to_show
 | 
				
			||||||
from ._editors import SelectRect
 | 
					from ._editors import SelectRect
 | 
				
			||||||
from . import _event
 | 
					from . import _event
 | 
				
			||||||
from ._ohlc import BarItems
 | 
					# from ._ohlc import BarItems
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
log = get_logger(__name__)
 | 
					log = get_logger(__name__)
 | 
				
			||||||
| 
						 | 
					@ -319,6 +320,7 @@ async def handle_viewmode_mouse(
 | 
				
			||||||
        ):
 | 
					        ):
 | 
				
			||||||
            # when in order mode, submit execution
 | 
					            # when in order mode, submit execution
 | 
				
			||||||
            # msg.event.accept()
 | 
					            # msg.event.accept()
 | 
				
			||||||
 | 
					            # breakpoint()
 | 
				
			||||||
            view.order_mode.submit_order()
 | 
					            view.order_mode.submit_order()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -384,6 +386,29 @@ class ChartView(ViewBox):
 | 
				
			||||||
        self.order_mode: bool = False
 | 
					        self.order_mode: bool = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.setFocusPolicy(QtCore.Qt.StrongFocus)
 | 
					        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
 | 
					    @asynccontextmanager
 | 
				
			||||||
    async def open_async_input_handler(
 | 
					    async def open_async_input_handler(
 | 
				
			||||||
| 
						 | 
					@ -429,11 +454,6 @@ class ChartView(ViewBox):
 | 
				
			||||||
    def maxmin(self, callback: Callable) -> None:
 | 
					    def maxmin(self, callback: Callable) -> None:
 | 
				
			||||||
        self._maxmin = callback
 | 
					        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(
 | 
					    def wheelEvent(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        ev,
 | 
					        ev,
 | 
				
			||||||
| 
						 | 
					@ -542,6 +562,11 @@ class ChartView(ViewBox):
 | 
				
			||||||
            self._resetTarget()
 | 
					            self._resetTarget()
 | 
				
			||||||
            self.scaleBy(s, focal)
 | 
					            self.scaleBy(s, focal)
 | 
				
			||||||
            self.sigRangeChangedManually.emit(mask)
 | 
					            self.sigRangeChangedManually.emit(mask)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # self._ic.set()
 | 
				
			||||||
 | 
					            # self._ic = None
 | 
				
			||||||
 | 
					            # self.chart.resume_all_feeds()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ev.accept()
 | 
					            ev.accept()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def mouseDragEvent(
 | 
					    def mouseDragEvent(
 | 
				
			||||||
| 
						 | 
					@ -624,6 +649,11 @@ class ChartView(ViewBox):
 | 
				
			||||||
                # XXX: WHY
 | 
					                # XXX: WHY
 | 
				
			||||||
                ev.accept()
 | 
					                ev.accept()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                self.start_ic()
 | 
				
			||||||
 | 
					                # if self._ic is None:
 | 
				
			||||||
 | 
					                #     self.chart.pause_all_feeds()
 | 
				
			||||||
 | 
					                #     self._ic = trio.Event()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if axis == 1:
 | 
					                if axis == 1:
 | 
				
			||||||
                    self.chart._static_yrange = 'axis'
 | 
					                    self.chart._static_yrange = 'axis'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -641,6 +671,13 @@ class ChartView(ViewBox):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                self.sigRangeChangedManually.emit(self.state['mouseEnabled'])
 | 
					                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
 | 
					        # WEIRD "RIGHT-CLICK CENTER ZOOM" MODE
 | 
				
			||||||
        elif button & QtCore.Qt.RightButton:
 | 
					        elif button & QtCore.Qt.RightButton:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -788,11 +825,13 @@ class ChartView(ViewBox):
 | 
				
			||||||
        #   iterate those.
 | 
					        #   iterate those.
 | 
				
			||||||
        # - only register this when certain downsampleable graphics are
 | 
					        # - only register this when certain downsampleable graphics are
 | 
				
			||||||
        #   "added to scene".
 | 
					        #   "added to scene".
 | 
				
			||||||
        vb.sigRangeChangedManually.connect(vb.maybe_downsample_graphics)
 | 
					        vb.sigXRangeChanged.connect(vb.maybe_downsample_graphics)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # mouse wheel doesn't emit XRangeChanged
 | 
					        # mouse wheel doesn't emit XRangeChanged
 | 
				
			||||||
        vb.sigRangeChangedManually.connect(vb._set_yrange)
 | 
					        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(
 | 
					    def disable_auto_yrange(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
| 
						 | 
					@ -808,10 +847,27 @@ class ChartView(ViewBox):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        '''
 | 
					        '''
 | 
				
			||||||
        for graphic in self._chart._graphics.values():
 | 
					        for graphic in self._chart._graphics.values():
 | 
				
			||||||
            # if isinstance(graphic, BarItems):
 | 
					            xvec = graphic.pixelVectors()[0]
 | 
				
			||||||
            xpx = graphic.pixelVectors()[0].x()
 | 
					            if xvec:
 | 
				
			||||||
            if xpx:
 | 
					                xpx = xvec.x()
 | 
				
			||||||
                return xpx
 | 
					                if xpx:
 | 
				
			||||||
 | 
					                    return xpx
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
        return 1.0
 | 
					        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()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue