make tables sortable
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from PySide6.QtCore import Signal, QSortFilterProxyModel
|
||||
from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow
|
||||
from PySide6.QtWidgets import QWidget, QVBoxLayout, QTabWidget, QTableView, QMdiSubWindow, QHeaderView
|
||||
|
||||
from gui.model_config import KontorModelConfig
|
||||
from gui.table_model import KontorTableModel
|
||||
@@ -56,7 +56,8 @@ class ComicWindow(QMdiSubWindow):
|
||||
proxy_model = QSortFilterProxyModel()
|
||||
proxy_model.setSourceModel(model)
|
||||
table_view.setSortingEnabled(True)
|
||||
#table_view.setModel(model)
|
||||
header = table_view.horizontalHeader()
|
||||
header.setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
|
||||
table_view.setModel(proxy_model)
|
||||
layout.addLayout(table_config.get_filter_layout())
|
||||
layout.addWidget(table_view)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from PySide6.QtCore import Signal, QSortFilterProxyModel
|
||||
from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView
|
||||
from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView, QHeaderView
|
||||
|
||||
from gui.model_config import KontorModelConfig
|
||||
from gui.table_model import KontorTableModel
|
||||
@@ -57,6 +57,8 @@ class MediaWindow(QMdiSubWindow):
|
||||
proxy_model = QSortFilterProxyModel()
|
||||
proxy_model.setSourceModel(model)
|
||||
table_view.setSortingEnabled(True)
|
||||
# header = table_view.horizontalHeader()
|
||||
# header.setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
|
||||
#table_view.setModel(model)
|
||||
table_view.setModel(proxy_model)
|
||||
layout.addLayout(table_config.get_filter_layout())
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from PySide6.QtCore import Signal, QSortFilterProxyModel
|
||||
from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow
|
||||
from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow, \
|
||||
QHeaderView
|
||||
|
||||
from gui.model_config import KontorModelConfig
|
||||
from gui.table_model import KontorTableModel
|
||||
@@ -47,18 +48,19 @@ class MetaDataWindow(QMdiSubWindow):
|
||||
|
||||
def generate_data_tab(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)
|
||||
# proxy_model = QSortFilterProxyModel()
|
||||
# proxy_model.setSourceModel(model)
|
||||
table_view.setSortingEnabled(True)
|
||||
#table_view.setModel(model)
|
||||
table_view.setModel(proxy_model)
|
||||
header = table_view.horizontalHeader()
|
||||
header.setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
|
||||
# table_view.setModel(proxy_model)
|
||||
table_view.setModel(model)
|
||||
layout.addLayout(table_config.get_filter_layout())
|
||||
layout.addWidget(table_view)
|
||||
model.refresh()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from PySide6.QtWidgets import QHBoxLayout, QCheckBox, QMdiSubWindow
|
||||
from kontor_schema import KontorDB
|
||||
from kontor_schema import KontorDB, ColumnEntry
|
||||
|
||||
|
||||
class KontorModelConfig:
|
||||
@@ -29,7 +29,7 @@ class KontorModelConfig:
|
||||
# print(self.filter["download"].isChecked())
|
||||
for column, filter_info in self.filter.items():
|
||||
# print(column, filter_info)
|
||||
if filter_info['widget'].isChecked():
|
||||
if filter_info[ColumnEntry.COLUMN_WIDGET].isChecked():
|
||||
_filters[column] = True
|
||||
# print(f"{filter_rule=}")
|
||||
# self.log.info("filters -> %s", _filters)
|
||||
@@ -46,9 +46,9 @@ class KontorModelConfig:
|
||||
filter_layout = QHBoxLayout()
|
||||
for column, filter_info in self.filter.items():
|
||||
filter_checkbox = QCheckBox()
|
||||
filter_checkbox.setText(filter_info['label'])
|
||||
filter_checkbox.setText(filter_info[ColumnEntry.COLUMN_LABEL])
|
||||
filter_checkbox.checkStateChanged.connect(self.main_window.refresh)
|
||||
self.filter[column]['widget'] = filter_checkbox
|
||||
self.filter[column][ColumnEntry.COLUMN_WIDGET] = filter_checkbox
|
||||
filter_layout.addWidget(filter_checkbox)
|
||||
filter_layout.addStretch()
|
||||
# self.log.info("get_filter_layout: %s", self.filter)
|
||||
|
||||
@@ -2,6 +2,7 @@ from datetime import datetime
|
||||
|
||||
from PySide6.QtCore import QAbstractTableModel, QModelIndex
|
||||
from PySide6.QtGui import Qt
|
||||
from kontor_schema import ColumnEntry
|
||||
|
||||
from .model_config import KontorModelConfig
|
||||
|
||||
@@ -42,8 +43,9 @@ class KontorTableModel(QAbstractTableModel):
|
||||
return len(self._data)
|
||||
|
||||
def headerData(self, col, orientation, role=Qt.ItemDataRole.DisplayRole):
|
||||
# self.log.info(f"{self._config.header[col]}")
|
||||
if orientation == Qt.Orientation.Horizontal and role == Qt.ItemDataRole.DisplayRole:
|
||||
return self._config.header[col]['label']
|
||||
return self._config.header[col][ColumnEntry.COLUMN_LABEL]
|
||||
if orientation == Qt.Orientation.Vertical and role == Qt.ItemDataRole.DisplayRole:
|
||||
return str(col+1)
|
||||
|
||||
@@ -52,27 +54,32 @@ class KontorTableModel(QAbstractTableModel):
|
||||
return None
|
||||
value = self._data[index.row()][index.column()]
|
||||
# print('{}:: {}:: {}: {}'.format(index, role, value, type(value)))
|
||||
row = index.row()
|
||||
column = index.column()
|
||||
column_type = self._config.header[column][ColumnEntry.COLUMN_TYPE]
|
||||
# self.log.info(f"{row}-{column}: {column_type}")
|
||||
if role == Qt.ItemDataRole.DisplayRole or role == Qt.ItemDataRole.EditRole:
|
||||
if column_type == "BOOLEAN":
|
||||
if isinstance(value, bytes):
|
||||
if value == b'\x01':
|
||||
return self._config.main_window.tick
|
||||
else:
|
||||
return self._config.main_window.cross
|
||||
if isinstance(value, int):
|
||||
# print('{}:: {}: {}'.format(index, value, type(value)))
|
||||
if value == 1:
|
||||
return self._config.main_window.tick
|
||||
else:
|
||||
return self._config.main_window.cross
|
||||
if isinstance(value, bool):
|
||||
if value:
|
||||
return self._config.main_window.tick
|
||||
else:
|
||||
return self._config.main_window.cross
|
||||
if isinstance(value, datetime):
|
||||
return value.strftime("%Y-%m-%d %M:%M:%S")
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
if isinstance(value, bytes):
|
||||
if value == b'\x01':
|
||||
return self._config.main_window.tick
|
||||
else:
|
||||
return self._config.main_window.cross
|
||||
if isinstance(value, int):
|
||||
# print('{}:: {}: {}'.format(index, value, type(value)))
|
||||
if value == 1:
|
||||
return self._config.main_window.tick
|
||||
else:
|
||||
return self._config.main_window.cross
|
||||
if isinstance(value, bool):
|
||||
if value:
|
||||
return self._config.main_window.tick
|
||||
else:
|
||||
return self._config.main_window.cross
|
||||
return str(value)
|
||||
if role == Qt.ItemDataRole.DecorationRole:
|
||||
if isinstance(value, bytes):
|
||||
|
||||
Reference in New Issue
Block a user