Skip to content

Commit

Permalink
Correction of table footer display to respect scroll bar size and vis…
Browse files Browse the repository at this point in the history
…ibility.
  • Loading branch information
titov-vv committed Mar 7, 2024
1 parent f7e8ab0 commit 9b38608
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 16 deletions.
9 changes: 9 additions & 0 deletions jal/widgets/custom/table_footer.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,13 @@
class FooterView(QHeaderView):
def __init__(self, parent: QTreeView, table_header: QHeaderView):
super().__init__(Qt.Horizontal, parent)
self._parent = parent
self._model = None
self._linked_header = table_header
self.setSectionResizeMode(QHeaderView.Fixed)
self._linked_header.geometriesChanged.connect(self.on_header_geometry)
self._linked_header.sectionResized.connect(self.on_header_resize)
self._linked_header.sectionMoved.connect(self.on_header_move)

def setModel(self, model: QAbstractItemModel) -> None:
self._model = model
Expand All @@ -37,6 +41,11 @@ def paintSection(self, painter: QPainter, rect: QRect, idx: int) -> None:
self.style().drawControl(QStyle.CE_Header, opt, painter, self)
painter.restore()

def on_header_geometry(self):
cr = self._parent.contentsRect()
hs = self._linked_header.geometry()
self.setGeometry(cr.left(), cr.top() + cr.height() - hs.height() + 1, hs.width(), hs.height())

def on_header_resize(self, section: int, _old_size: int, new_size: int) -> None:
self.resizeSection(section, new_size)

Expand Down
11 changes: 3 additions & 8 deletions jal/widgets/custom/tableview_with_footer.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,13 @@ class TableViewWithFooter(QTableView):
def __init__(self, parent_view):
self._parent_view = parent_view
super().__init__(parent_view)
self._header = self.horizontalHeader()
self._footer = FooterView(self, self.horizontalHeader())
self._header.sectionResized.connect(self._footer.on_header_resize)
self._header.sectionMoved.connect(self._footer.on_header_move)

# Create a bottom margin for footer placement (mirror of a top header margin)
def resizeEvent(self, event: QResizeEvent) -> None:
super().resizeEvent(event)
m = self.viewportMargins()
self.setViewportMargins(m.left(), m.top(), m.right(), m.top()) # Mirror top margin to bottom
cr = self.contentsRect()
header_size = self._header.geometry()
self._footer.setGeometry(cr.left(), cr.top() + cr.height() - m.top() + 1, header_size.width(), header_size.height())
margins = self.viewportMargins()
self.setViewportMargins(margins.left(), margins.top(), margins.right(), margins.top())

def setModel(self, model: QAbstractItemModel) -> None:
super().setModel(model)
Expand Down
11 changes: 3 additions & 8 deletions jal/widgets/custom/treeview_with_footer.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,13 @@ class TreeViewWithFooter(QTreeView):
def __init__(self, parent_view):
self._parent_view = parent_view
super().__init__(parent_view)
self._header = self.header()
self._footer = FooterView(self, self.header())
self._header.sectionResized.connect(self._footer.on_header_resize)
self._header.sectionMoved.connect(self._footer.on_header_move)

# Create a bottom margin for footer placement (mirror of a top header margin)
def resizeEvent(self, event: QResizeEvent) -> None:
super().resizeEvent(event)
m = self.viewportMargins()
self.setViewportMargins(m.left(), m.top(), m.right(), m.top()) # Mirror top margin to bottom
cr = self.contentsRect()
header_size = self._header.geometry()
self._footer.setGeometry(cr.left(), cr.top() + cr.height() - m.top() + 1, header_size.width(), header_size.height())
margins = self.viewportMargins()
self.setViewportMargins(margins.left(), margins.top(), margins.right(), margins.top())

def setModel(self, model: QAbstractItemModel) -> None:
super().setModel(model)
Expand Down

0 comments on commit 9b38608

Please sign in to comment.