Factor selection details into completer view methods
parent
43d73b4a7c
commit
9d2c8a9526
|
@ -258,37 +258,69 @@ class CompleterView(QTreeView):
|
||||||
self.setMaximumSize(self.width() + 10, rows * row_px)
|
self.setMaximumSize(self.width() + 10, rows * row_px)
|
||||||
self.setFixedWidth(333)
|
self.setFixedWidth(333)
|
||||||
|
|
||||||
def select_previous(self) -> QModelIndex:
|
def previous_index(self) -> QModelIndex:
|
||||||
cidx = self.currentIndex()
|
|
||||||
nidx = self.indexAbove(cidx)
|
|
||||||
if nidx.parent() is QModelIndex():
|
|
||||||
nidx = self.indexAbove(cidx)
|
|
||||||
breakpoint()
|
|
||||||
|
|
||||||
return nidx
|
cidx = self.selectionModel().currentIndex()
|
||||||
|
one_above = self.indexAbove(cidx)
|
||||||
|
|
||||||
def select_next(self) -> QModelIndex:
|
if one_above.parent() == QModelIndex():
|
||||||
cidx = self.currentIndex()
|
# if the next node up's parent is the root we don't want to select
|
||||||
nidx = self.indexBelow(cidx)
|
# the next node up since it's a top level node and we only
|
||||||
if nidx.parent() is QModelIndex():
|
# select entries depth >= 2.
|
||||||
nidx = self.indexBelow(cidx)
|
|
||||||
breakpoint()
|
|
||||||
|
|
||||||
return nidx
|
# see if one more up is not the root and we can select it.
|
||||||
|
two_above = self.indexAbove(one_above)
|
||||||
|
if two_above != QModelIndex():
|
||||||
|
return two_above
|
||||||
|
else:
|
||||||
|
return cidx
|
||||||
|
|
||||||
|
return one_above # just next up
|
||||||
|
|
||||||
|
def next_index(self) -> QModelIndex:
|
||||||
|
cidx = self.selectionModel().currentIndex()
|
||||||
|
one_below = self.indexBelow(cidx)
|
||||||
|
|
||||||
|
if one_below.parent() == QModelIndex():
|
||||||
|
# if the next node up's parent is the root we don't want to select
|
||||||
|
# the next node up since it's a top level node and we only
|
||||||
|
# select entries depth >= 2.
|
||||||
|
|
||||||
|
# see if one more up is not the root and we can select it.
|
||||||
|
two_below = self.indexBelow(one_below)
|
||||||
|
if two_below != QModelIndex():
|
||||||
|
return two_below
|
||||||
|
else:
|
||||||
|
return cidx
|
||||||
|
|
||||||
|
return one_below # just next up
|
||||||
|
|
||||||
|
# def first_selectable_index(self) -> QModelIndex:
|
||||||
|
|
||||||
|
def select_next(self) -> Tuple[QModelIndex, QStandardItem]:
|
||||||
|
idx = self.next_index()
|
||||||
|
assert idx.isValid()
|
||||||
|
return self.select_from_idx(idx)
|
||||||
|
|
||||||
|
def select_previous(self) -> Tuple[QModelIndex, QStandardItem]:
|
||||||
|
idx = self.previous_index()
|
||||||
|
assert idx.isValid()
|
||||||
|
return self.select_from_idx(idx)
|
||||||
|
|
||||||
def select_from_idx(
|
def select_from_idx(
|
||||||
|
|
||||||
self,
|
self,
|
||||||
idx: QModelIndex,
|
idx: QModelIndex,
|
||||||
|
|
||||||
) -> Tuple[QModelIndex, QStandardItem]:
|
) -> QStandardItem:
|
||||||
|
# ) -> Tuple[QModelIndex, QStandardItem]:
|
||||||
|
|
||||||
sel = self.selectionModel()
|
sel = self.selectionModel()
|
||||||
model = self.model()
|
model = self.model()
|
||||||
|
|
||||||
# select first indented entry
|
# # select first indented entry
|
||||||
if idx == model.index(0, 0):
|
# if idx == model.index(0, 0):
|
||||||
idx = self.select_next()
|
# idx = self.select_next()
|
||||||
|
|
||||||
sel.setCurrentIndex(
|
sel.setCurrentIndex(
|
||||||
idx,
|
idx,
|
||||||
|
@ -296,7 +328,8 @@ class CompleterView(QTreeView):
|
||||||
QItemSelectionModel.Rows
|
QItemSelectionModel.Rows
|
||||||
)
|
)
|
||||||
|
|
||||||
return idx, model.itemFromIndex(idx)
|
return model.itemFromIndex(idx)
|
||||||
|
# return idx, model.itemFromIndex(idx)
|
||||||
|
|
||||||
# def find_matches(
|
# def find_matches(
|
||||||
# self,
|
# self,
|
||||||
|
@ -498,7 +531,6 @@ class SearchWidget(QtGui.QWidget):
|
||||||
'''Return the current completer tree selection as
|
'''Return the current completer tree selection as
|
||||||
a tuple ``(parent: str, child: str)`` if valid, else ``None``.
|
a tuple ``(parent: str, child: str)`` if valid, else ``None``.
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
model = self.view.model()
|
model = self.view.model()
|
||||||
sel = self.view.selectionModel()
|
sel = self.view.selectionModel()
|
||||||
|
@ -537,7 +569,7 @@ 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)
|
||||||
nidx = view.currentIndex()
|
# nidx = view.currentIndex()
|
||||||
|
|
||||||
symsearch = get_multi_search()
|
symsearch = get_multi_search()
|
||||||
send, recv = trio.open_memory_channel(16)
|
send, recv = trio.open_memory_channel(16)
|
||||||
|
@ -560,6 +592,15 @@ async def handle_keyboard_input(
|
||||||
if mods == Qt.ControlModifier:
|
if mods == Qt.ControlModifier:
|
||||||
ctrl = True
|
ctrl = True
|
||||||
|
|
||||||
|
alt = False
|
||||||
|
if mods == Qt.AltModifier:
|
||||||
|
alt = True
|
||||||
|
|
||||||
|
# ctrl + alt as combo
|
||||||
|
ctlalt = False
|
||||||
|
if (QtCore.Qt.AltModifier | QtCore.Qt.ControlModifier) == mods:
|
||||||
|
ctlalt = True
|
||||||
|
|
||||||
if key in (Qt.Key_Enter, Qt.Key_Return):
|
if key in (Qt.Key_Enter, Qt.Key_Return):
|
||||||
|
|
||||||
value = search.get_current()
|
value = search.get_current()
|
||||||
|
@ -587,45 +628,51 @@ async def handle_keyboard_input(
|
||||||
# - first node index: index = search.index(0, 0, parent)
|
# - first node index: index = search.index(0, 0, parent)
|
||||||
# - root node index: index = search.index(0, 0, QModelIndex())
|
# - root node index: index = search.index(0, 0, QModelIndex())
|
||||||
|
|
||||||
# we're in select mode or cancelling
|
# cancel and close
|
||||||
if ctrl:
|
if ctrl and key in {
|
||||||
# cancel and close
|
Qt.Key_C,
|
||||||
if (key == Qt.Key_C) or (key == Qt.Key_Space):
|
Qt.Key_Space, # i feel like this is the "native" one
|
||||||
search.bar.unfocus()
|
Qt.Key_Alt,
|
||||||
|
}:
|
||||||
|
search.bar.unfocus()
|
||||||
|
|
||||||
# kill the search and focus back on main chart
|
# kill the search and focus back on main chart
|
||||||
if search.chart_app:
|
if search.chart_app:
|
||||||
search.chart_app.linkedcharts.focus()
|
search.chart_app.linkedcharts.focus()
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# result selection nav
|
# selection navigation controls
|
||||||
if key in (Qt.Key_K, Qt.Key_J):
|
elif ctrl and key in {
|
||||||
_search_enabled = False
|
|
||||||
|
|
||||||
if key == Qt.Key_K:
|
Qt.Key_K,
|
||||||
nidx = view.select_previous()
|
Qt.Key_J,
|
||||||
|
|
||||||
elif key == Qt.Key_J:
|
} or key in {
|
||||||
nidx = view.select_next()
|
|
||||||
|
|
||||||
if nidx.isValid():
|
Qt.Key_Up,
|
||||||
i, item = view.select_from_idx(nidx)
|
Qt.Key_Down,
|
||||||
|
}:
|
||||||
|
_search_enabled = False
|
||||||
|
if key in {Qt.Key_K, Qt.Key_Up}:
|
||||||
|
item = view.select_previous()
|
||||||
|
|
||||||
if item:
|
elif key in {Qt.Key_J, Qt.Key_Down}:
|
||||||
|
item = view.select_next()
|
||||||
|
|
||||||
parent_item = item.parent()
|
if item:
|
||||||
if parent_item and parent_item.text() == 'cache':
|
parent_item = item.parent()
|
||||||
|
if parent_item and parent_item.text() == 'cache':
|
||||||
|
|
||||||
value = search.get_current()
|
value = search.get_current()
|
||||||
|
|
||||||
if value is not None:
|
if value is not None:
|
||||||
provider, symbol = value
|
provider, symbol = value
|
||||||
search.chart_app.load_symbol(
|
search.chart_app.load_symbol(
|
||||||
provider,
|
provider,
|
||||||
symbol,
|
symbol,
|
||||||
'info',
|
'info',
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# relay to completer task
|
# relay to completer task
|
||||||
|
|
Loading…
Reference in New Issue