add meta data subwindow
This commit is contained in:
@@ -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 PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow
|
||||||
|
|
||||||
from gui.model_config import KontorModelConfig
|
from gui.model_config import KontorModelConfig
|
||||||
@@ -53,9 +53,12 @@ class ComicWindow(QMdiSubWindow):
|
|||||||
self.data_views.append(model)
|
self.data_views.append(model)
|
||||||
data_tab.setLayout(layout)
|
data_tab.setLayout(layout)
|
||||||
table_view = QTableView()
|
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.addLayout(table_config.get_filter_layout())
|
||||||
layout.addWidget(table_view)
|
layout.addWidget(table_view)
|
||||||
model.refresh()
|
model.refresh()
|
||||||
return data_tab
|
return data_tab
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from kontor_schema import KontorDB
|
|||||||
|
|
||||||
from .comic_window import ComicWindow
|
from .comic_window import ComicWindow
|
||||||
from .media_window import MediaWindow
|
from .media_window import MediaWindow
|
||||||
|
from .meta_data_window import MetaDataWindow
|
||||||
from .progress import ProgressUpdate
|
from .progress import ProgressUpdate
|
||||||
from .dialogs import ExportKontorDialog, ImportKontorDialog
|
from .dialogs import ExportKontorDialog, ImportKontorDialog
|
||||||
from .model_config import KontorModelConfig
|
from .model_config import KontorModelConfig
|
||||||
@@ -50,8 +51,8 @@ class MainWindow(QMainWindow):
|
|||||||
self.status_progress = QProgressBar()
|
self.status_progress = QProgressBar()
|
||||||
self.progress_update = ProgressUpdate(self.status_progress)
|
self.progress_update = ProgressUpdate(self.status_progress)
|
||||||
self._create_statusbar()
|
self._create_statusbar()
|
||||||
centerPoint = QGuiApplication.screens()[0].geometry().center()
|
center_point = QGuiApplication.screens()[0].geometry().center()
|
||||||
self.move(centerPoint - self.frameGeometry().center())
|
self.move(center_point - self.frameGeometry().center())
|
||||||
|
|
||||||
def _create_actions(self):
|
def _create_actions(self):
|
||||||
self.newAction = QAction("&New", self)
|
self.newAction = QAction("&New", self)
|
||||||
@@ -62,6 +63,8 @@ class MainWindow(QMainWindow):
|
|||||||
self.showTyscWindow = QAction("TYSC Window", self)
|
self.showTyscWindow = QAction("TYSC Window", self)
|
||||||
self.showMediaWindow = QAction("&Media Window", self)
|
self.showMediaWindow = QAction("&Media Window", self)
|
||||||
self.showMediaWindow.triggered.connect(self.show_media_window)
|
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 = QAction(self.import_icon, "&Import", self)
|
||||||
self.importAction.triggered.connect(self.import_from_file)
|
self.importAction.triggered.connect(self.import_from_file)
|
||||||
self.exportAction = QAction(self.export_icon, "&Export", self)
|
self.exportAction = QAction(self.export_icon, "&Export", self)
|
||||||
@@ -104,6 +107,7 @@ class MainWindow(QMainWindow):
|
|||||||
window_menu.addMenu(layouts_menu)
|
window_menu.addMenu(layouts_menu)
|
||||||
window_menu.addAction(self.showComicWindow)
|
window_menu.addAction(self.showComicWindow)
|
||||||
window_menu.addAction(self.showMediaWindow)
|
window_menu.addAction(self.showMediaWindow)
|
||||||
|
window_menu.addAction(self.showMetaDataWindow)
|
||||||
menu_bar.addMenu(window_menu)
|
menu_bar.addMenu(window_menu)
|
||||||
# Help menu
|
# Help menu
|
||||||
help_menu = QMenu("&Hilfe")
|
help_menu = QMenu("&Hilfe")
|
||||||
@@ -125,7 +129,7 @@ class MainWindow(QMainWindow):
|
|||||||
self.statusBar.addPermanentWidget(self.status_progress)
|
self.statusBar.addPermanentWidget(self.status_progress)
|
||||||
|
|
||||||
def about(self):
|
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):
|
def show_comic_window(self):
|
||||||
if 'comic' not in self._subwindows:
|
if 'comic' not in self._subwindows:
|
||||||
@@ -151,6 +155,18 @@ class MainWindow(QMainWindow):
|
|||||||
media.close()
|
media.close()
|
||||||
self.mdi_area.removeSubWindow(media)
|
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):
|
def remove_sub_window(self, name: str):
|
||||||
# self.log.info("remove subwindow %s", name)
|
# self.log.info("remove subwindow %s", name)
|
||||||
if name in self._subwindows:
|
if name in self._subwindows:
|
||||||
@@ -218,27 +234,6 @@ class MainWindow(QMainWindow):
|
|||||||
self.log.info("refresh")
|
self.log.info("refresh")
|
||||||
for (_, window) in self._subwindows.items():
|
for (_, window) in self._subwindows.items():
|
||||||
window.refresh()
|
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):
|
def update_status(self, message, timeout=3000):
|
||||||
self.statusBar.showMessage(message, timeout=timeout)
|
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
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView
|
||||||
|
|
||||||
from gui.model_config import KontorModelConfig
|
from gui.model_config import KontorModelConfig
|
||||||
@@ -24,6 +24,7 @@ class MediaWindow(QMdiSubWindow):
|
|||||||
self.tabs = QTabWidget()
|
self.tabs = QTabWidget()
|
||||||
self.tabs.addTab(self.generate_data_tab("media_file"), "Media File")
|
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_video"), "Media Video")
|
||||||
|
self.tabs.addTab(self.generate_data_tab("media_article"), "Media Article")
|
||||||
self.tabs.currentChanged.connect(self._tab_changed)
|
self.tabs.currentChanged.connect(self._tab_changed)
|
||||||
layout.addWidget(self.tabs)
|
layout.addWidget(self.tabs)
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
@@ -53,7 +54,11 @@ class MediaWindow(QMdiSubWindow):
|
|||||||
self.data_views.append(model)
|
self.data_views.append(model)
|
||||||
data_tab.setLayout(layout)
|
data_tab.setLayout(layout)
|
||||||
table_view = QTableView()
|
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.addLayout(table_config.get_filter_layout())
|
||||||
layout.addWidget(table_view)
|
layout.addWidget(table_view)
|
||||||
model.refresh()
|
model.refresh()
|
||||||
|
|||||||
@@ -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 json
|
||||||
import re
|
|
||||||
import subprocess
|
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from logging import Logger
|
from logging import Logger
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import mariadb
|
|
||||||
from sqlalchemy import Engine, select
|
from sqlalchemy import Engine, select
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
@@ -137,10 +134,11 @@ class KontorDB:
|
|||||||
row = []
|
row = []
|
||||||
for order in columns.keys():
|
for order in columns.keys():
|
||||||
column_name = columns[order]['column']
|
column_name = columns[order]['column']
|
||||||
|
ref_column = columns[order]['ref_column']
|
||||||
if str(column_name).endswith("_id"):
|
if str(column_name).endswith("_id"):
|
||||||
ref_table = column_name[:-3]
|
ref_table = column_name[:-3]
|
||||||
ref = getattr(entry, ref_table)
|
ref = getattr(entry, ref_table)
|
||||||
value = getattr(ref, "name")
|
value = getattr(ref, ref_column)
|
||||||
row.append(value)
|
row.append(value)
|
||||||
else:
|
else:
|
||||||
row.append(getattr(entry, column_name))
|
row.append(getattr(entry, column_name))
|
||||||
|
|||||||
Reference in New Issue
Block a user