Dynamically re-size the search results view
parent
51d94a301a
commit
890ffc76cf
|
@ -39,6 +39,7 @@ from typing import (
|
|||
Awaitable, Sequence,
|
||||
Any, AsyncIterator
|
||||
)
|
||||
from math import ceil
|
||||
import time
|
||||
# from pprint import pformat
|
||||
|
||||
|
@ -49,7 +50,6 @@ from PyQt5 import QtCore
|
|||
from PyQt5 import QtWidgets
|
||||
from PyQt5.QtCore import (
|
||||
Qt,
|
||||
QSize,
|
||||
QModelIndex,
|
||||
QItemSelectionModel,
|
||||
)
|
||||
|
@ -158,16 +158,25 @@ class CompleterView(QTreeView):
|
|||
|
||||
self.setStyleSheet(f"font: {size}px")
|
||||
|
||||
#def resizeEvent(self, event: 'QEvent') -> None:
|
||||
# def resizeEvent(self, event: 'QEvent') -> None:
|
||||
# self.resize_to_results()
|
||||
# super().resizeEvent(event)
|
||||
|
||||
def on_resize(self) -> None:
|
||||
'''
|
||||
Resize relay event from god.
|
||||
|
||||
'''
|
||||
self.resize_to_results()
|
||||
|
||||
def resize_to_results(self):
|
||||
model = self.model()
|
||||
cols = model.columnCount()
|
||||
|
||||
col_w_tot = 0
|
||||
for i in range(cols):
|
||||
self.resizeColumnToContents(i)
|
||||
col_w_tot += self.columnWidth(i)
|
||||
|
||||
row_px = self.rowHeight(self.currentIndex())
|
||||
|
||||
|
@ -175,22 +184,25 @@ class CompleterView(QTreeView):
|
|||
# we should figure out the exact number of rows to allow
|
||||
# inclusive of search bar and header "rows", in pixel terms.
|
||||
window_h = self.window().height()
|
||||
rows = round(window_h * 0.5 / row_px) - 4
|
||||
rows = ceil(window_h / row_px) - 2
|
||||
|
||||
# TODO: the problem here is that this view widget is **not** resizing/scaling
|
||||
# when the parent layout is adjusted, not sure what exactly is up...
|
||||
# only "scale up" the results view when the window size has increased/
|
||||
# TODO: the problem here is that this view widget is **not**
|
||||
# resizing/scaling when the parent layout is adjusted, not sure
|
||||
# what exactly is up... only "scale up" the results view
|
||||
# when the window size has increased/
|
||||
if not self._last_window_h or self._last_window_h < window_h:
|
||||
self.setMaximumSize(self.width(), rows * row_px)
|
||||
self.setMinimumSize(self.width(), rows * row_px)
|
||||
|
||||
#elif not self._last_window_h or self._last_window_h > window_h:
|
||||
# self.setMinimumSize(self.width(), rows * row_px)
|
||||
# self.setMaximumSize(self.width(), rows * row_px)
|
||||
|
||||
# self.resize(self.width(), rows * row_px)
|
||||
self.resize(self.width(), rows * row_px)
|
||||
self._last_window_h = window_h
|
||||
self.setFixedWidth(333)
|
||||
|
||||
# size to width of longest result seen thus far
|
||||
# TODO: should we always dynamically scale to longest result?
|
||||
if self.width() < col_w_tot:
|
||||
self.setFixedWidth(col_w_tot)
|
||||
|
||||
self.update()
|
||||
|
||||
def is_selecting_d1(self) -> bool:
|
||||
|
@ -447,6 +459,7 @@ class SearchBar(Edit):
|
|||
self.godwidget = godwidget
|
||||
super().__init__(parent, **kwargs)
|
||||
self.view: CompleterView = view
|
||||
godwidget._widgets[view.mode_name] = view
|
||||
|
||||
def show(self) -> None:
|
||||
super().show()
|
||||
|
|
Loading…
Reference in New Issue