add meta data subwindow

This commit is contained in:
Thomas Peetz
2025-02-02 21:38:16 +01:00
parent da453d642d
commit 591171b223
5 changed files with 99 additions and 33 deletions
+6 -3
View File
@@ -1,4 +1,4 @@
from PySide6.QtCore import Signal
from PySide6.QtCore import Signal, QSortFilterProxyModel
from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow
from gui.model_config import KontorModelConfig
@@ -53,9 +53,12 @@ class ComicWindow(QMdiSubWindow):
self.data_views.append(model)
data_tab.setLayout(layout)
table_view = QTableView()
table_view.setModel(model)
proxy_model = QSortFilterProxyModel()
proxy_model.setSourceModel(model)
table_view.setSortingEnabled(True)
#table_view.setModel(model)
table_view.setModel(proxy_model)
layout.addLayout(table_config.get_filter_layout())
layout.addWidget(table_view)
model.refresh()
return data_tab
+19 -24
View File
@@ -7,6 +7,7 @@ from kontor_schema import KontorDB
from .comic_window import ComicWindow
from .media_window import MediaWindow
from .meta_data_window import MetaDataWindow
from .progress import ProgressUpdate
from .dialogs import ExportKontorDialog, ImportKontorDialog
from .model_config import KontorModelConfig
@@ -50,8 +51,8 @@ class MainWindow(QMainWindow):
self.status_progress = QProgressBar()
self.progress_update = ProgressUpdate(self.status_progress)
self._create_statusbar()
centerPoint = QGuiApplication.screens()[0].geometry().center()
self.move(centerPoint - self.frameGeometry().center())
center_point = QGuiApplication.screens()[0].geometry().center()
self.move(center_point - self.frameGeometry().center())
def _create_actions(self):
self.newAction = QAction("&New", self)
@@ -62,6 +63,8 @@ class MainWindow(QMainWindow):
self.showTyscWindow = QAction("TYSC Window", self)
self.showMediaWindow = QAction("&Media Window", self)
self.showMediaWindow.triggered.connect(self.show_media_window)
self.showMetaDataWindow = QAction("Meta Data Window", self)
self.showMetaDataWindow.triggered.connect(self.show_meta_data_window)
self.importAction = QAction(self.import_icon, "&Import", self)
self.importAction.triggered.connect(self.import_from_file)
self.exportAction = QAction(self.export_icon, "&Export", self)
@@ -104,6 +107,7 @@ class MainWindow(QMainWindow):
window_menu.addMenu(layouts_menu)
window_menu.addAction(self.showComicWindow)
window_menu.addAction(self.showMediaWindow)
window_menu.addAction(self.showMetaDataWindow)
menu_bar.addMenu(window_menu)
# Help menu
help_menu = QMenu("&Hilfe")
@@ -125,7 +129,7 @@ class MainWindow(QMainWindow):
self.statusBar.addPermanentWidget(self.status_progress)
def about(self):
QMessageBox.about(self.central_widget, "Über Kontor", f"Python: 3.11\nKontor: 0.1.0")
QMessageBox.about(self, "Über Kontor", f"Python: 3.11\nKontor: 0.1.0")
def show_comic_window(self):
if 'comic' not in self._subwindows:
@@ -151,6 +155,18 @@ class MainWindow(QMainWindow):
media.close()
self.mdi_area.removeSubWindow(media)
def show_meta_data_window(self):
if 'meta_data' not in self._subwindows:
meta_data = MetaDataWindow(self)
meta_data.closed.connect(self.sub_window_closed)
self._subwindows['meta_data'] = meta_data
self.mdi_area.addSubWindow(meta_data)
meta_data.show()
else:
meta_data = self._subwindows.pop('meta_data')
meta_data.close()
self.mdi_area.removeSubWindow(meta_data)
def remove_sub_window(self, name: str):
# self.log.info("remove subwindow %s", name)
if name in self._subwindows:
@@ -218,27 +234,6 @@ class MainWindow(QMainWindow):
self.log.info("refresh")
for (_, window) in self._subwindows.items():
window.refresh()
# def refresh(self):
# self.data[self.tabs.currentIndex()].refresh()
# def _tab_changed(self, tab_index):
# self.data[tab_index].refresh()
def update_status(self, message, timeout=3000):
self.statusBar.showMessage(message, timeout=timeout)
def generate_data_tab(self, table_name):
data_tab = QWidget()
table_config = KontorModelConfig(self.kontor_db, self, table_name)
model = KontorTableModel(table_config)
layout = QVBoxLayout()
self.data.append(model)
data_tab.setLayout(layout)
table_view = QTableView()
table_view.setModel(model)
layout.addLayout(table_config.get_filter_layout())
layout.addWidget(table_view)
model.refresh()
return data_tab
+7 -2
View File
@@ -1,4 +1,4 @@
from PySide6.QtCore import Signal
from PySide6.QtCore import Signal, QSortFilterProxyModel
from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView
from gui.model_config import KontorModelConfig
@@ -24,6 +24,7 @@ class MediaWindow(QMdiSubWindow):
self.tabs = QTabWidget()
self.tabs.addTab(self.generate_data_tab("media_file"), "Media File")
self.tabs.addTab(self.generate_data_tab("media_video"), "Media Video")
self.tabs.addTab(self.generate_data_tab("media_article"), "Media Article")
self.tabs.currentChanged.connect(self._tab_changed)
layout.addWidget(self.tabs)
self.setLayout(layout)
@@ -53,7 +54,11 @@ class MediaWindow(QMdiSubWindow):
self.data_views.append(model)
data_tab.setLayout(layout)
table_view = QTableView()
table_view.setModel(model)
proxy_model = QSortFilterProxyModel()
proxy_model.setSourceModel(model)
table_view.setSortingEnabled(True)
#table_view.setModel(model)
table_view.setModel(proxy_model)
layout.addLayout(table_config.get_filter_layout())
layout.addWidget(table_view)
model.refresh()
+65
View File
@@ -0,0 +1,65 @@
from PySide6.QtCore import Signal, QSortFilterProxyModel
from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow
from gui.model_config import KontorModelConfig
from gui.table_model import KontorTableModel
class MetaDataWindow(QMdiSubWindow):
closed = Signal()
def __init__(self, main_window):
super().__init__()
self.data_views = list()
self._main_window = main_window
self.log = main_window.log
self._init_gui()
self.tick = main_window.tick
self.cross = main_window.cross
def _init_gui(self):
self.setWindowTitle("Meta Data")
self.setWidget(QWidget())
layout = QVBoxLayout()
self.tabs = QTabWidget()
self.tabs.addTab(self.generate_data_tab("module_data"), "Module")
self.tabs.addTab(self.generate_data_tab("meta_data_table"), "Tables")
self.tabs.addTab(self.generate_data_tab("meta_data_column"), "Columns")
self.tabs.currentChanged.connect(self._tab_changed)
layout.addWidget(self.tabs)
self.setLayout(layout)
self.setWidget(self.tabs)
def closeEvent(self, event):
self.closed.emit()
super().closeEvent(event)
self._main_window.remove_sub_window('comic')
def refresh(self):
# self.log.info("refresh")
self.data_views[self.tabs.currentIndex()].refresh()
def _tab_changed(self, tab_index):
self.data_views[tab_index].refresh()
def update_status(self, message):
self._main_window.update_status(message)
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)
table_view.setSortingEnabled(True)
#table_view.setModel(model)
table_view.setModel(proxy_model)
layout.addLayout(table_config.get_filter_layout())
layout.addWidget(table_view)
model.refresh()
return data_tab
@@ -1,12 +1,9 @@
import json
import re
import subprocess
import uuid
from datetime import datetime
from logging import Logger
from pathlib import Path
import mariadb
from sqlalchemy import Engine, select
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import sessionmaker
@@ -137,10 +134,11 @@ class KontorDB:
row = []
for order in columns.keys():
column_name = columns[order]['column']
ref_column = columns[order]['ref_column']
if str(column_name).endswith("_id"):
ref_table = column_name[:-3]
ref = getattr(entry, ref_table)
value = getattr(ref, "name")
value = getattr(ref, ref_column)
row.append(value)
else:
row.append(getattr(entry, column_name))