from PySide6.QtGui import QAction, QIcon from PySide6.QtWidgets import QWidget, QVBoxLayout, QMenu, QMessageBox, QTabWidget, QTableView from PySide6.QtWidgets import QLabel, QMainWindow from database import KontorDB from dialogs import ExportKontorDialog, ImportKontorDialog from model_config import KontorModelConfig from table_model import KontorTableModel from media_file_model import MediaFileTableModel class MainWindow(QMainWindow): def __init__(self, config): super().__init__() self.tick = QIcon('res/tick.png') self.cross = QIcon('res/cross.png') self.import_icon = QIcon("res/application-import.png") self.export_icon = QIcon("res/application-export.png") self.circle_icon = QIcon("res/arrow-circle-double.png") self.setWindowTitle("Kontor") self.setMinimumSize(800, 500) self._create_actions() self._create_menubar() self._create_toolbars() self._create_statusbar() self.data = [] self.filter = {} self.kontor_db = KontorDB(config) self.central_widget = QWidget() parent_layout = QVBoxLayout() self.central_widget.setLayout(parent_layout) self.tabs = QTabWidget() self.tabs.addTab(self.generate_data_tab("comic", Comic), "Comics") self.tabs.addTab(self.generate_data_tab("media_file", MediaFile), "MediaFile") self.tabs.currentChanged.connect(self._tab_changed) #label.setAlignment(Qt.AlignmentFlag.AlignCenter) parent_layout.addWidget(self.tabs) self.setCentralWidget(self.central_widget) def _create_actions(self): self.newAction = QAction("&New", self) self.aboutAction = QAction("&Über...", self) self.aboutAction.triggered.connect(self.about) self.importAction = QAction(self.import_icon, "&Import", self) self.importAction.triggered.connect(self.import_from_file) self.exportAction = QAction(self.export_icon, "&Export", self) self.exportAction.triggered.connect(self.export_to_file) self.refreshAction = QAction(self.circle_icon, "&Refresh", self) self.refreshAction.triggered.connect(self.refresh) self.updateTitleAction = QAction("&Update Titles", self) self.downloadAction = QAction("&Download Videos", self) self.exitAction = QAction("&Beenden", self) self.exitAction.setShortcut("Alt+F4") self.exitAction.triggered.connect(self.close) def _create_menubar(self): menu_bar = self.menuBar() # File menu file_menu = QMenu("&Datei") menu_bar.addMenu(file_menu) file_menu.addAction(self.exitAction) # Kontor menu kontor_menu = QMenu("&Kontor") menu_bar.addMenu(kontor_menu) kontor_menu.addAction(self.importAction) kontor_menu.addAction(self.exportAction) comic_menu = QMenu("&Comic") tysc_menu = QMenu("&TradeYourSportCards") media_file_menu = QMenu("&MediaFile") media_file_menu.addAction(self.updateTitleAction) media_file_menu.addAction(self.downloadAction) kontor_menu.addMenu(comic_menu) kontor_menu.addMenu(tysc_menu) kontor_menu.addMenu(media_file_menu) # Help menu help_menu = QMenu("&Hilfe") menu_bar.addMenu(help_menu) help_menu.addAction(self.aboutAction) def _create_toolbars(self): # Kontor toolbar kontor_tool_bar = self.addToolBar("Kontor") kontor_tool_bar.addAction(self.importAction) kontor_tool_bar.addAction(self.exportAction) kontor_tool_bar.addAction(self.refreshAction) def _create_statusbar(self): self.statusBar = self.statusBar() self.statusBar.showMessage("Kontor ready", 6000) self.status_label = QLabel("") self.statusBar.addPermanentWidget(self.status_label) def about(self): QMessageBox.about(self.central_widget, "Über Kontor", f"Python: 3.11\nKontor: 0.1.0") def import_from_file(self): import_dlg = ImportKontorDialog(self) if import_dlg.exec(): print(f"import DB from file {import_dlg.file_name}") else: print("no nothing for import") pass def export_to_file(self): export_dlg = ExportKontorDialog(self, self.kontor_db) if export_dlg.exec(): print(export_dlg.get_tables_to_export()) print(f"export DB to {export_dlg.file_name}") self.statusBar.showMessage(f"export DB to {export_dlg.file_name}", 3000) self.kontor_db.export_db(export_dlg.current_export_type, export_dlg.file_name, export_dlg.get_tables_to_export()) else: self.statusBar.showMessage("Export cancelled", 3000) def refresh(self): self.data[self.tabs.currentIndex()].refresh() def _tab_changed(self, tab_index): self.data[tab_index].refresh() def generate_data_tab(self, table_name, table): data_tab = QWidget() table_config = KontorModelConfig(self.kontor_db, self, table_name, table) 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