Source code for qtdraw.widget.tab_group_view
"""
Tab of GroupView.
This module provides a set of group view classes in tab format.
"""
from PySide6.QtWidgets import QTabWidget, QDialog
from PySide6.QtGui import QFont
from qtdraw.widget.group_view import GroupView
from qtdraw.widget.custom_widget import Layout
from qtdraw.widget.mathjax import MathJaxSVG
# ==================================================
[docs]
class TabGroupView(QDialog):
# ==================================================
def __init__(self, parent=None, models=None, title="Data", mathjax=None):
"""
Data view group.
Args:
parent (QWidget, optional): parent.
models (dict, optional): set of models, {object_type: GroupModel}.
title (str, optional): window title.
"""
super().__init__(parent)
if mathjax is None:
self._mathjax = MathJaxSVG()
else:
self._mathjax = mathjax
if models is None:
models = {}
self.setWindowTitle(title)
self.tab = QTabWidget(self)
self.tab.setUsesScrollButtons(True)
bold = QFont()
bold.setBold(True)
self.tab.tabBar().setFont(bold)
self.view = {}
for object_type, model in models.items():
item = GroupView(parent=self, model=model, mathjax=self._mathjax)
self.tab.addTab(item, object_type)
self.view[object_type] = item
layout = Layout(self)
layout.addWidget(self.tab)
self.setLayout(layout)
self._tabname = self.tab.tabText(self.tab.currentIndex())
self.tab.currentChanged.connect(self.tab_change)
# ==================================================
[docs]
def select_tab(self, object_type):
"""
Select tab.
Args:
object_type (str): object type.
"""
idx = list(self.view.keys()).index(object_type)
self.tab.setCurrentIndex(idx)
# ==================================================
def closeEvent(self, event):
"""
Close event for deselect all.
:meta private:
"""
for view in self.view.values():
view.clear_selection()
super().closeEvent(event)
# ==================================================
[docs]
def showEvent(self, event):
super().showEvent(event)
self._refresh_view_logic(self.tab.currentWidget())
# ==================================================
[docs]
def tab_change(self, idx):
if self._tabname in self.view:
self.view[self._tabname].clear_selection()
self._tabname = self.tab.tabText(idx)
current_view = self.tab.widget(idx)
self._refresh_view_logic(current_view)
# ==================================================
def _refresh_view_logic(self, view):
if view:
view.force_refresh_widgets()
view.viewport().update()