diff --git a/piker/ui/watchlist.py b/piker/ui/watchlist.py index 4a876a96..44a61a46 100644 --- a/piker/ui/watchlist.py +++ b/piker/ui/watchlist.py @@ -50,7 +50,7 @@ _kv = (f''' font_size: 18 - text_size: self.size + # text_size: self.size size: self.texture_size color: {colorcode('gray')} font_color: {colorcode('gray')} @@ -59,7 +59,7 @@ _kv = (f''' background_normal: '' valign: 'middle' halign: 'center' - outline_color: [0.1]*4 + # outline_color: [0.1]*4 font_size: 20 @@ -87,9 +87,10 @@ _kv = (f''' # minimum_width: 200 # row_force_default: True # row_default_height: 75 - outline_color: [.7]*4 + # outline_color: [.7]*4 + # part of the `PagerView` size_hint: 1, 0.03 font_size: 25 background_color: [0.13]*3 + [1] @@ -172,8 +173,9 @@ class HeaderCell(Button): """Column header cell label. """ def on_press(self, value=None): - # clicking on a col header indicates to rows by this column - # in `update_quotes()` + """Clicking on a col header indicates to sort rows by this column + in `update_quotes()`. + """ table = self.row.table if self.row.is_header: table.sort_key = self.key @@ -215,7 +217,7 @@ class BidAskLayout(StackLayout): cell_type = HeaderCell if header else Cell top_size = cell_type().font_size small_size = top_size - 5 - top_prop = 0.7 + top_prop = 0.7 # proportion of size used by top cell bottom_prop = 1 - top_prop for (key, size_hint, font_size), value in zip( [('last', (1, top_prop), top_size), @@ -375,22 +377,18 @@ class TickerTable(GridLayout): ): self.add_widget(row) # row append + def ticker_search(self, patt): + """Return sequence of matches when pattern ``patt`` is in a + symbol name. Most naive algo possible for the moment. + """ + for symbol, row in self.symbols2rows.items(): + if patt in symbol: + yield symbol, row -def header_row(headers, **kwargs): - """Create a single "header" row from a sequence of keys. - """ - headers_dict = {key: key for key in headers} - row = Row(headers_dict, headers=headers, is_header_row=True, **kwargs) - return row - - -def ticker_table(quotes, **kwargs): - """Create a new ticker table from a list of quote dicts. - """ - table = TickerTable(cols=1, **kwargs) - for ticker_record in quotes: - table.append_row(ticker_record) - return table + def search(self, patt): + """Search bar api compat. + """ + return dict(self.ticker_search(patt)) or {} async def update_quotes( @@ -484,21 +482,29 @@ async def _async_main(name, watchlists, brokermod): # build out UI Window.set_title(f"watchlist: {name}\t(press ? for help)") Builder.load_string(_kv) - # anchor = AnchorLayout(anchor_x='right', anchor_y='bottom') box = BoxLayout(orientation='vertical', padding=5, spacing=5) - # anchor.add_widget(box) - header = header_row( - first_quotes[0].keys(), + + # add header row + headers = first_quotes[0].keys() + header = Row( + {key: key for key in headers}, + headers=headers, + is_header_row=True, size_hint=(1, None), ) box.add_widget(header) - grid = ticker_table( - first_quotes, + + # build grid + grid = TickerTable( + cols=1, size_hint=(1, None), ) + for ticker_record in first_quotes: + grid.append_row(ticker_record) # associate the col headers row with the ticker table even though # they're technically wrapped separately in containing BoxLayout header.table = grid + # mark the initial sorted column header as bold and underlined sort_cell = header.get_cell(grid.sort_key) sort_cell.bold = sort_cell.underline = True @@ -506,8 +512,7 @@ async def _async_main(name, watchlists, brokermod): # set up a pager view for large ticker lists grid.bind(minimum_height=grid.setter('height')) - pager = PagerView(box, nursery) - pager.add_widget(grid) + pager = PagerView(box, grid, nursery) box.add_widget(pager) widgets = {