Support pub-sub of monitor's symbol selection
parent
3ed750d324
commit
152062ba8a
|
@ -178,8 +178,9 @@ def monitor(loglevel, broker, rate, name, dhost, test, tl):
|
|||
|
||||
tractor.run(
|
||||
partial(main, tries=1),
|
||||
name='kivy-monitor',
|
||||
name='monitor',
|
||||
loglevel=loglevel if tl else None,
|
||||
rpc_module_paths=['piker.ui.monitor'],
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ from kivy import utils
|
|||
from kivy.app import async_runTouchApp
|
||||
from kivy.core.window import Window
|
||||
from kivy.properties import BooleanProperty
|
||||
from kivy.uix.behaviors import ButtonBehavior
|
||||
|
||||
from ..log import get_logger
|
||||
from .pager import PagerView
|
||||
|
@ -263,7 +262,7 @@ class BidAskLayout(StackLayout):
|
|||
return [self.last, self.bid, self.ask]
|
||||
|
||||
|
||||
class Row(ButtonBehavior, HoverBehavior, GridLayout):
|
||||
class Row(HoverBehavior, GridLayout):
|
||||
"""A grid for displaying a row of ticker quote data.
|
||||
"""
|
||||
def __init__(
|
||||
|
@ -383,7 +382,7 @@ class Row(ButtonBehavior, HoverBehavior, GridLayout):
|
|||
log.debug(
|
||||
f"Entered row {self} through {self.border_point}")
|
||||
# don't highlight header row
|
||||
if getattr(self, 'is_header', None):
|
||||
if self.is_header:
|
||||
self.hovered = False
|
||||
|
||||
def on_leave(self):
|
||||
|
@ -394,6 +393,9 @@ class Row(ButtonBehavior, HoverBehavior, GridLayout):
|
|||
|
||||
def on_press(self, value=None):
|
||||
log.info(f"Pressed row for {self._last_record['symbol']}")
|
||||
if self.table and not self.is_header:
|
||||
for q in self.table._click_queues:
|
||||
q.put_nowait(self._last_record['symbol'])
|
||||
|
||||
|
||||
class TickerTable(GridLayout):
|
||||
|
@ -408,6 +410,7 @@ class TickerTable(GridLayout):
|
|||
self._auto_sort = auto_sort
|
||||
self._symbols2index = {}
|
||||
self._sorted = []
|
||||
self._click_queues: List[trio.Queue] = []
|
||||
|
||||
def append_row(self, key, row):
|
||||
"""Append a `Row` of `Cell` objects to this table.
|
||||
|
@ -596,6 +599,21 @@ async def update_quotes(
|
|||
# nursery.cancel_scope.cancel()
|
||||
|
||||
|
||||
async def stream_symbol_selection():
|
||||
"""An RPC async gen for streaming the symbol corresponding
|
||||
value corresponding to the last clicked row.
|
||||
"""
|
||||
widgets = tractor.current_actor().statespace['widgets']
|
||||
table = widgets['table']
|
||||
q = trio.Queue(1)
|
||||
table._click_queues.append(q)
|
||||
try:
|
||||
async for symbol in q:
|
||||
yield symbol
|
||||
finally:
|
||||
table._click_queues.remove(q)
|
||||
|
||||
|
||||
async def _async_main(
|
||||
name: str,
|
||||
portal: tractor._portal.Portal,
|
||||
|
|
Loading…
Reference in New Issue