Support multi-provider cache symbol switching
parent
1bd0ee8746
commit
e77a51f16e
|
@ -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',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue