From 41e2b11da29c069dba8c04dccaa759ba20c08cf9 Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Tue, 11 Feb 2025 16:16:38 +0100 Subject: [PATCH] add details view --- python/kontor-gui/gui/media_window.py | 27 +++++-------- python/kontor-gui/gui/table_details.py | 52 ++++++++++++++++++++++++++ python/kontor-gui/gui/table_model.py | 8 ++++ 3 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 python/kontor-gui/gui/table_details.py diff --git a/python/kontor-gui/gui/media_window.py b/python/kontor-gui/gui/media_window.py index 49f4d6c..080d5cd 100644 --- a/python/kontor-gui/gui/media_window.py +++ b/python/kontor-gui/gui/media_window.py @@ -1,8 +1,10 @@ from PySide6.QtCore import Signal, QSortFilterProxyModel -from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView, QHeaderView, QLabel +from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView, QHeaderView, QLabel, \ + QHBoxLayout, QFormLayout, QLineEdit -from gui.model_config import KontorModelConfig -from gui.table_model import KontorTableModel +from .model_config import KontorModelConfig +from .table_details import KontorTableDetailsView +from .table_model import KontorTableModel class MediaWindow(QMdiSubWindow): @@ -66,22 +68,11 @@ class MediaWindow(QMdiSubWindow): return data_tab def generate_data_tab_with_details(self, table_name): - data_tab = QWidget() - table_config = KontorModelConfig(self._main_window.kontor_db, self, table_name) model = KontorTableModel(table_config) - layout = QVBoxLayout() self.data_views.append(model) - data_tab.setLayout(layout) - table_view = QTableView() - proxy_model = QSortFilterProxyModel() - proxy_model.setSourceModel(model) - table_view.setSortingEnabled(True) - table_view.setModel(proxy_model) - layout.addLayout(table_config.get_filter_layout()) - layout.addWidget(table_view) - layout.addWidget(QLabel("test test")) - model.refresh() - table_view.resizeColumnToContents(0) - return data_tab + details_view = KontorTableDetailsView(model) + return details_view.data_view + def cell_selected(self, item): + self.log.info(f"Cell {item.row()}:{item.column()} clicked") diff --git a/python/kontor-gui/gui/table_details.py b/python/kontor-gui/gui/table_details.py new file mode 100644 index 0000000..a0e7cef --- /dev/null +++ b/python/kontor-gui/gui/table_details.py @@ -0,0 +1,52 @@ +from PySide6.QtCore import QSortFilterProxyModel +from PySide6.QtWidgets import QHBoxLayout, QWidget, QTableView, QVBoxLayout, QFormLayout, QLineEdit, QLabel + +from .table_model import KontorTableModel + + +class KontorTableDetailsView: + def __init__(self, table_model: KontorTableModel): + self._data_view: QWidget = QWidget() + self._model = table_model + self._label = QLabel() + self.init_gui() + + def init_gui(self): + layout = QVBoxLayout() + self._data_view.setLayout(layout) + details_layout = QHBoxLayout() + table_with_details = QWidget() + table_with_details.setLayout(details_layout) + + table_view = QTableView() + table_view.setSelectionBehavior(QTableView.SelectionBehavior.SelectRows) + proxy_model = QSortFilterProxyModel() + proxy_model.setSourceModel(self._model) + table_view.setSortingEnabled(True) + table_view.setModel(proxy_model) + table_view.clicked.connect(self.update_details) + + layout.addLayout(self._model.config.get_filter_layout()) + details_layout.addWidget(table_view) + + form = QWidget() + form_layout = QFormLayout(form) + form.setLayout(form_layout) + + title = QLineEdit(form) + form_layout.addRow("ID", self._label) + form_layout.addRow("Title", title) + # layout.addWidget(table_view) + details_layout.addWidget(form) + layout.addWidget(table_with_details) + self._model.refresh() + table_view.resizeColumnToContents(0) + + @property + def data_view(self): + return self._data_view + + def update_details(self, item): + print(f"Cell {item.row()}-{item.column()} selected") + self._model.log.info(f"Cell {item.row()}-{item.column()} selected") + self._label.setText(self._model.raw_data()[item.row()][0]) diff --git a/python/kontor-gui/gui/table_model.py b/python/kontor-gui/gui/table_model.py index 24290c1..fb32802 100644 --- a/python/kontor-gui/gui/table_model.py +++ b/python/kontor-gui/gui/table_model.py @@ -52,6 +52,14 @@ class KontorTableModel(QAbstractTableModel): def __str__(self): return f"KontorTableModel({self._config})" + @property + def config(self): + return self._config + + @property + def raw_data(self): + return self._data + def refresh(self): # self.log.info("refresh") data = self._config.get_data()