Make panning pause feeds, call into update method from downsampler cb loop
parent
ef03b8e987
commit
a9e1c6c50e
|
@ -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:
|
||||||
|
xpx = xvec.x()
|
||||||
if xpx:
|
if xpx:
|
||||||
return 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