diff --git a/python/kontor-gui/gui/main_window.py b/python/kontor-gui/gui/main_window.py index 384723b..5a97c6a 100644 --- a/python/kontor-gui/gui/main_window.py +++ b/python/kontor-gui/gui/main_window.py @@ -5,6 +5,7 @@ from sqlalchemy import Engine from kontor_schema import KontorDB from .comic_window import ComicWindow +from .media_window import MediaWindow from .progress import ProgressUpdate from .dialogs import ExportKontorDialog, ImportKontorDialog from .model_config import KontorModelConfig @@ -62,8 +63,11 @@ class MainWindow(QMainWindow): self.newAction = QAction("&New", self) self.aboutAction = QAction("&Über...", self) self.aboutAction.triggered.connect(self.about) - self.showComicWindow = QAction("Show/Hide &Comic Window", self) + self.showComicWindow = QAction("&Comic Window", self) self.showComicWindow.triggered.connect(self.show_comic_window) + self.showTyscWindow = QAction("TYSC Window", self) + self.showMediaWindow = QAction("&Media Window", self) + self.showMediaWindow.triggered.connect(self.show_media_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) @@ -101,6 +105,12 @@ class MainWindow(QMainWindow): kontor_menu.addMenu(comic_menu) kontor_menu.addMenu(tysc_menu) kontor_menu.addMenu(media_file_menu) + window_menu = QMenu("&Window") + layouts_menu = QMenu("&Layouts") + window_menu.addMenu(layouts_menu) + window_menu.addAction(self.showComicWindow) + window_menu.addAction(self.showMediaWindow) + menu_bar.addMenu(window_menu) # Help menu help_menu = QMenu("&Hilfe") menu_bar.addMenu(help_menu) @@ -135,6 +145,18 @@ class MainWindow(QMainWindow): comic.close() self.mdi_area.removeSubWindow(comic) + def show_media_window(self): + if 'media' not in self._subwindows: + media = MediaWindow(self) + media.closed.connect(self.sub_window_closed) + self._subwindows['media'] = media + self.mdi_area.addSubWindow(media) + media.show() + else: + media = self._subwindows.pop('media') + media.close() + self.mdi_area.removeSubWindow(media) + def remove_sub_window(self, name: str): # self.log.info("remove subwindow %s", name) if name in self._subwindows: diff --git a/python/kontor-gui/gui/media_window.py b/python/kontor-gui/gui/media_window.py new file mode 100644 index 0000000..6518953 --- /dev/null +++ b/python/kontor-gui/gui/media_window.py @@ -0,0 +1,60 @@ +from PySide6.QtCore import Signal +from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView + +from gui.model_config import KontorModelConfig +from gui.table_model import KontorTableModel + + +class MediaWindow(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("Media") + self.setWidget(QWidget()) + layout = QVBoxLayout() + 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.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() + table_view.setModel(model) + layout.addLayout(table_config.get_filter_layout()) + layout.addWidget(table_view) + model.refresh() + return data_tab