Fix row header borders using a `BorderImage`
							parent
							
								
									1bbf212ad0
								
							
						
					
					
						commit
						274a5a728a
					
				| 
						 | 
					@ -38,6 +38,9 @@ def colorcode(name):
 | 
				
			||||||
    return _colors[name if name else 'gray']
 | 
					    return _colors[name if name else 'gray']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# border size
 | 
				
			||||||
 | 
					_bs = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_kv = (f'''
 | 
					_kv = (f'''
 | 
				
			||||||
#:kivy 1.10.0
 | 
					#:kivy 1.10.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,7 +61,7 @@ _kv = (f'''
 | 
				
			||||||
    canvas.before:
 | 
					    canvas.before:
 | 
				
			||||||
        Color:
 | 
					        Color:
 | 
				
			||||||
            rgb: [0.08]*4
 | 
					            rgb: [0.08]*4
 | 
				
			||||||
        Rectangle:
 | 
					        BorderImage:
 | 
				
			||||||
            pos: self.pos
 | 
					            pos: self.pos
 | 
				
			||||||
            size: self.size
 | 
					            size: self.size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,17 +71,14 @@ _kv = (f'''
 | 
				
			||||||
    background_color: [0]*4
 | 
					    background_color: [0]*4
 | 
				
			||||||
    canvas.before:
 | 
					    canvas.before:
 | 
				
			||||||
        Color:
 | 
					        Color:
 | 
				
			||||||
            rgb: [0.13]*4
 | 
					            rgb: [0.14]*4
 | 
				
			||||||
        Rectangle:
 | 
					        BorderImage:  # use a fixed size border
 | 
				
			||||||
            pos: self.pos
 | 
					            pos: self.pos
 | 
				
			||||||
            size: self.size
 | 
					            size: [self.size[0] - {_bs}, self.size[1]]
 | 
				
			||||||
        # RoundedRectangle:
 | 
					            border: [0, {_bs} , 0, {_bs}]
 | 
				
			||||||
        #     pos: self.pos
 | 
					 | 
				
			||||||
        #     size: self.size
 | 
					 | 
				
			||||||
        #     radius: [8,]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
<TickerTable>
 | 
					<TickerTable>
 | 
				
			||||||
    spacing: '5dp'
 | 
					    spacing: '{_bs}dp'
 | 
				
			||||||
    row_force_default: True
 | 
					    row_force_default: True
 | 
				
			||||||
    row_default_height: 75
 | 
					    row_default_height: 75
 | 
				
			||||||
    cols: 1
 | 
					    cols: 1
 | 
				
			||||||
| 
						 | 
					@ -307,14 +307,13 @@ async def update_quotes(
 | 
				
			||||||
        color_row(row, data)
 | 
					        color_row(row, data)
 | 
				
			||||||
        cache[sym] = (data, row)
 | 
					        cache[sym] = (data, row)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # the core cell update loop
 | 
					    # core cell update loop
 | 
				
			||||||
    while True:
 | 
					    while True:
 | 
				
			||||||
        log.debug("Waiting on quotes")
 | 
					        log.debug("Waiting on quotes")
 | 
				
			||||||
        quotes = await queue.get()
 | 
					        quotes = await queue.get()  # new quotes data only
 | 
				
			||||||
        for quote in quotes:
 | 
					        for quote in quotes:
 | 
				
			||||||
            data, displayable = qtconvert(quote, symbol_data=symbol_data)
 | 
					            data, displayable = qtconvert(quote, symbol_data=symbol_data)
 | 
				
			||||||
            row = grid.symbols2rows[data['symbol']]
 | 
					            row = grid.symbols2rows[data['symbol']]
 | 
				
			||||||
            # only updates newly timestamped quotes
 | 
					 | 
				
			||||||
            cache[data['symbol']] = (data, row)
 | 
					            cache[data['symbol']] = (data, row)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # color changed field values
 | 
					            # color changed field values
 | 
				
			||||||
| 
						 | 
					@ -346,10 +345,8 @@ async def update_quotes(
 | 
				
			||||||
async def run_kivy(root, nursery):
 | 
					async def run_kivy(root, nursery):
 | 
				
			||||||
    '''Trio-kivy entry point.
 | 
					    '''Trio-kivy entry point.
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    # run kivy
 | 
					    await async_runTouchApp(root)  # run kivy
 | 
				
			||||||
    await async_runTouchApp(root)
 | 
					    nursery.cancel_scope.cancel()  # cancel all other tasks that may be running
 | 
				
			||||||
    # now cancel all the other tasks that may be running
 | 
					 | 
				
			||||||
    nursery.cancel_scope.cancel()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async def _async_main(name, watchlists, brokermod):
 | 
					async def _async_main(name, watchlists, brokermod):
 | 
				
			||||||
| 
						 | 
					@ -384,15 +381,12 @@ async def _async_main(name, watchlists, brokermod):
 | 
				
			||||||
            header = header_row(
 | 
					            header = header_row(
 | 
				
			||||||
                first_quotes[0].keys(),
 | 
					                first_quotes[0].keys(),
 | 
				
			||||||
                size_hint=(1, None),
 | 
					                size_hint=(1, None),
 | 
				
			||||||
                # put black lines between cells on the header row
 | 
					 | 
				
			||||||
                spacing='3dp',
 | 
					 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            root.add_widget(header)
 | 
					            root.add_widget(header)
 | 
				
			||||||
            grid = ticker_table(
 | 
					            grid = ticker_table(
 | 
				
			||||||
                first_quotes,
 | 
					                first_quotes,
 | 
				
			||||||
                size_hint=(1, None),
 | 
					                size_hint=(1, None),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					 | 
				
			||||||
            # associate the col headers row with the ticker table even though
 | 
					            # associate the col headers row with the ticker table even though
 | 
				
			||||||
            # they're technically wrapped separately in containing BoxLayout
 | 
					            # they're technically wrapped separately in containing BoxLayout
 | 
				
			||||||
            header.table = grid
 | 
					            header.table = grid
 | 
				
			||||||
| 
						 | 
					@ -401,6 +395,7 @@ async def _async_main(name, watchlists, brokermod):
 | 
				
			||||||
            sort_cell.bold = sort_cell.underline = True
 | 
					            sort_cell.bold = sort_cell.underline = True
 | 
				
			||||||
            grid.last_clicked_col_cell = sort_cell
 | 
					            grid.last_clicked_col_cell = sort_cell
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # set up a scroll view for large ticker lists
 | 
				
			||||||
            grid.bind(minimum_height=grid.setter('height'))
 | 
					            grid.bind(minimum_height=grid.setter('height'))
 | 
				
			||||||
            scroll = ScrollView()
 | 
					            scroll = ScrollView()
 | 
				
			||||||
            scroll.add_widget(grid)
 | 
					            scroll.add_widget(grid)
 | 
				
			||||||
| 
						 | 
					@ -412,6 +407,5 @@ async def _async_main(name, watchlists, brokermod):
 | 
				
			||||||
                'header': header,
 | 
					                'header': header,
 | 
				
			||||||
                'scroll': scroll,
 | 
					                'scroll': scroll,
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            nursery.start_soon(run_kivy, widgets['root'], nursery)
 | 
					            nursery.start_soon(run_kivy, widgets['root'], nursery)
 | 
				
			||||||
            nursery.start_soon(update_quotes, widgets, queue, sd, pkts)
 | 
					            nursery.start_soon(update_quotes, widgets, queue, sd, pkts)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue