Support multi-provider cache symbol switching

symbol_search
Tyler Goodlet 2021-05-18 11:22:59 -04:00
parent 1bd0ee8746
commit e77a51f16e
1 changed files with 67 additions and 24 deletions

View File

@ -492,6 +492,34 @@ class SearchWidget(QtGui.QWidget):
self.view.set_results({'cache': list(self.chart_app._chart_cache)}) self.view.set_results({'cache': list(self.chart_app._chart_cache)})
self.bar.focus() self.bar.focus()
def get_current(self) -> Optional[Tuple[str, str]]:
'''Return the current completer tree selection as
a tuple ``(parent: str, child: str)`` if valid, else ``None``.
'''
model = self.view.model()
sel = self.view.selectionModel()
cidx = sel.currentIndex()
# TODO: get rid of this hard coded column -> 1
# and use the ``CompleterView`` schema/settings
# to figure out the desired field(s)
# https://doc.qt.io/qt-5/qstandarditemmodel.html#itemFromIndex
node = model.itemFromIndex(cidx.siblingAtColumn(1))
if node:
symbol = node.text()
provider = node.parent().text()
# TODO: move this to somewhere non-search machinery specific?
if provider == 'cache':
symbol, _, provider = symbol.rpartition('.')
return provider, symbol
else:
return None
async def handle_keyboard_input( async def handle_keyboard_input(
@ -507,9 +535,10 @@ async def handle_keyboard_input(
bar = search.bar bar = search.bar
view = bar.view view = bar.view
view.set_font_size(bar.dpi_font.px_size) view.set_font_size(bar.dpi_font.px_size)
model = view.model() # model = view.model()
nidx = cidx = view.currentIndex() # nidx = cidx = view.currentIndex()
sel = view.selectionModel() nidx = view.currentIndex()
# sel = view.selectionModel()
symsearch = get_multi_search() symsearch = get_multi_search()
send, recv = trio.open_memory_channel(16) send, recv = trio.open_memory_channel(16)
@ -529,7 +558,7 @@ async def handle_keyboard_input(
log.debug(f'key: {key}, mods: {mods}, txt: {txt}') log.debug(f'key: {key}, mods: {mods}, txt: {txt}')
# parent = view.currentIndex() # parent = view.currentIndex()
cidx = sel.currentIndex() # cidx = sel.currentIndex()
ctrl = False ctrl = False
if mods == Qt.ControlModifier: if mods == Qt.ControlModifier:
@ -537,23 +566,30 @@ async def handle_keyboard_input(
if key in (Qt.Key_Enter, Qt.Key_Return): if key in (Qt.Key_Enter, Qt.Key_Return):
# TODO: get rid of this hard coded column -> 1 value = search.get_current()
# and use the ``CompleterView`` schema/settings if value is None:
# to figure out the desired field(s)
# https://doc.qt.io/qt-5/qstandarditemmodel.html#itemFromIndex
node = model.itemFromIndex(cidx.siblingAtColumn(1))
if node:
value = node.text()
# print(f' value: {value}')
else:
continue continue
log.info(f'Requesting symbol: {value}') provider, symbol = value
app = search.chart_app # # TODO: get rid of this hard coded column -> 1
# # and use the ``CompleterView`` schema/settings
# # to figure out the desired field(s)
# # https://doc.qt.io/qt-5/qstandarditemmodel.html#itemFromIndex
# node = model.itemFromIndex(cidx.siblingAtColumn(1))
# if node:
# symbol = node.text()
# provider = node.parent().text()
# # print(f' value: {value}')
# else:
# continue
log.info(f'Requesting symbol: {symbol}.{provider}')
# app = search.chart_app
search.chart_app.load_symbol( search.chart_app.load_symbol(
app.linkedcharts.symbol.brokers[0], provider,
value, symbol,
'info', 'info',
) )
@ -593,20 +629,27 @@ async def handle_keyboard_input(
i, item = view.select_from_idx(nidx) i, item = view.select_from_idx(nidx)
if item: if item:
parent_item = item.parent() parent_item = item.parent()
if parent_item and parent_item.text() == 'cache': if parent_item and parent_item.text() == 'cache':
node = model.itemFromIndex(
i.siblingAtColumn(1) value = search.get_current()
) if value is not None:
if node: # continue
provider, symbol = value
# node = model.itemFromIndex(
# i.siblingAtColumn(1)
# )
# if node:
# TODO: parse out provider from # TODO: parse out provider from
# cached value. # cached value.
value = node.text() # value = node.text()
search.chart_app.load_symbol( search.chart_app.load_symbol(
app.linkedcharts.symbol.brokers[0], provider,
node.text(), symbol,
'info', 'info',
) )