import os from typing import Mapping from PyQt6.QtWidgets import * from PyQt6.QtCore import * from PyQt6.QtGui import * from bigtext import BigText from fulltabwidget import FullTabWidget from logFileModel import LogFileModel from settings import Settings class Tabs(QWidget): tabs_by_index = {} tabs_by_filename = {} def __init__(self, settings: Settings): super(Tabs, self).__init__() self.settings = settings self.tabs = QTabWidget() self.tabs.setTabsClosable(True) self.tabs.setMovable(True) self.tabs.tabCloseRequested.connect(self._close_tab) self.layout = QVBoxLayout(self) self.layout.setContentsMargins(0, 0, 0, 0) self.layout.addWidget(self.tabs) def create_tab(self, file: str): if not os.path.isfile(file): message = QMessageBox(QMessageBox.Icon.Warning, "File not found", "'%s' is not a file or cannot be opened" % (file)) message.exec() return model = LogFileModel(file, self.settings) full_tab = FullTabWidget(model) if model.get_file() in self.tabs_by_filename: for tab_index in range(0, self.tabs.count()): widget : FullTabWidget = self.tabs.widget(tab_index) if widget.get_file() == model.get_file(): self.tabs.setCurrentIndex(tab_index) break else: tab_index = self.tabs.addTab(full_tab, model.get_tab_name()) self.tabs_by_filename[model.get_file()] = full_tab self.tabs.setCurrentIndex(tab_index) def _close_tab(self, tab_index: int): full_tab: FullTabWidget = self.tabs.widget(tab_index) full_tab.destruct() del self.tabs_by_filename[full_tab.file_view.get_file()] self.tabs.removeTab(tab_index)